В моем конвейере есть задание, которое терпит неудачу. Этот сбой является ожидаемым, и при обнаружении ошибки конвейер следует продолжить. Конвейер запускает и публикует модульные тесты. У меня это работает, конвейер работает до конца, тесты выполняются и публикуются. Однако результаты теста не отображаются, а конвейер помечается как неудавшийся.
Вот полный Ямл
trigger: none
# Variable to store where the initial code checkout path
variables:
- name: BuildDir
value: Test
stages:
- stage: Checkout
pool: $(PoolName)
jobs:
- job: CheckoutRedwoodAndSealink
displayName: Checking out
steps:
- checkout: git://Redwood/Redwood@working/conifer
path: 'Redwood'
displayName: Checking out Redwood
- checkout: self
path: 'Sealink'
displayName: Checking out Sealink
- task: PowerShell@2
displayName: Change the value of BuildDir
# Store the checkout location
inputs:
targetType: 'inline'
script: 'Write-Host "##vso[task.setvariable variable=BuildDir;isOutput=true]$(Agent.BuildDirectory)"'
name: setvar
- stage: CopyThirdParty
dependsOn: Checkout
pool: $(PoolName)
variables:
# Set the build directory
BuildDir: $[stageDependencies.Checkout.CheckoutRedwoodAndSealink.outputs['setvar.BuildDir'] ]
jobs:
- job: CopyRedwoodTP
displayName: Copying Redwood Third Party
steps:
- checkout: none
- task: CmdLine@2
- task: CopyFiles@2
inputs:
SourceFolder: 'C:\Redwood\third-party'
Contents: '**'
TargetFolder: '$(BuildDir)\Redwood\third-party'
OverWrite: true
- stage: Build
dependsOn:
- Checkout
- CopyThirdParty
pool: $(PoolName)
variables:
# Set the build directory
BuildDir: $[stageDependencies.Checkout.CheckoutRedwoodAndSealink.outputs['setvar.BuildDir'] ]
jobs:
- job: Configure
displayName: Configuring CMake
steps:
- checkout: none
- task: CMake@1
inputs:
cmakeArgs: -S ./ -B ./build
workingDirectory: $(BuildDir)/Sealink
- task: CMake@1
inputs:
cmakeArgs: -S ./ -B ./build
workingDirectory: $(BuildDir)/Sealink
- job: Build
displayName: Building
dependsOn: Configure
steps:
- checkout: none
- task: CMake@1
inputs:
cmakeArgs: '--build ./build --config Debug'
workingDirectory: $(BuildDir)/Sealink
continueOnError: true
# if first build failed - try again
- job: Build2
condition: failed()
dependsOn: Build
steps:
- checkout: none
- task: CMake@1
displayName: Configuring CMake )2)
inputs:
cmakeArgs: -S ./ -B ./build
workingDirectory: $(BuildDir)/Sealink
- task: CMake@1
displayName: Building (2)
inputs:
cmakeArgs: '--build ./build --config Debug'
workingDirectory: $(BuildDir)/Sealink
- stage: RunTests
pool: $(PoolName)
dependsOn:
- Build
- Checkout
variables:
BuildDir: $[stageDependencies.Checkout.CheckoutRedwoodAndSealink.outputs['setvar.BuildDir'] ]
jobs:
- job: RunTests
displayName: Running Unit Tests
continueOnError: true
steps:
- checkout: none
- task: PowerShell@2
inputs:
targetType: 'inline'
script: '$(BuildDir)/Sealink/build/UnitTesting/Debug/Test.exe --gtest_output = "xml:./TestResults/"'
- stage: Publish
pool: $(PoolName)
dependsOn:
- RunTests
- Checkout
jobs:
- job: publish
steps:
- checkout: none
- task: PublishTestResults@2
displayName: Publishng unit test results
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
searchFolder: '$(System.DefaultWorkingDirectory)/TestResults'
failTaskOnFailedTests: true
При использовании continueOnError конвейер продолжает работать, но результаты теста не отображаются.





Убедитесь, что ваш тест был запущен и результат теста сгенерирован успешно. Ниже приведен мой yaml для справки.
steps:
- script: |
cmake -B build && cmake --build build
displayName: 'Build'
- script: |
cmake -E chdir build ctest -T Test
displayName: 'Test'
- task: PublishTestResults@2
inputs:
testResultsFormat: 'CTest'
testResultsFiles: '**/Test.xml'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Agent.BuildDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
Результат теста:
В yaml, которым вы поделились, есть только сборка, но нет теста. Вы можете использовать опцию -T, за которой следует ctest, чтобы создать файл результатов теста Test.xml. Этот файл будет создан в каталоге Testing в текущем каталоге сборки. Вы можете добавить задачу PublishBuildArtifacts@1 в свой конвейер для дальнейшей проверки.
Спасибо за это. Я запускаю и публикую тесты согласно моему первоначальному вопросу. Я отредактировал вопрос, чтобы дать полный ЯМЛ.
Добавьте две PublishBuildArtifacts@1 задачи в свой конвейер. Первый добавляется после PowerShell@2 задачи RunTests задания. PathtoPublish: '$(BuildDir)'. Вы можете проверить, был ли успешно создан файл результатов теста. Второй добавляется после PublishTestResults@2 задачи publish задания. PathtoPublish: '$(System.DefaultWorkingDirectory)/TestResults'. Вы можете проверить, находится ли файл результатов вашего теста в указанном вами searchFolder.
Привет @RoachFIsher, какова последняя ситуация с проблемой? Находится ли ваш файл результатов теста в указанной вами папке поиска?