我希望
PublishTestResults@2
任务仅在前一个任务script
(运行单元测试)实际运行时才运行。
- 如果使用
condition: succeededOrFailed()
,则即使上一步未运行,PublishTestResults@2
也会运行 - 我认为这就是condition: always()
的作用。
- 如何使一个任务在前一个任务失败的情况下也依赖于前一个任务?
always()
和succeededOrFailed()
之间有什么区别?
# This step only runs if the previous step was successful - OK
- script: |
cd $(System.DefaultWorkingDirectory)/application/src
yarn test:unit --silent --ci --reporters=jest-junit
displayName: 'Jest Unit Tests'
env:
JEST_JUNIT_OUTPUT_DIR: $(System.DefaultWorkingDirectory)/testresults
JEST_JUNIT_OUTPUT_NAME: 'jest-junit.xml'
# This step ALWAYS runs - NO
# This step should ONLY run if the previous step RAN (success OR fail)
- task: PublishTestResults@2
displayName: 'Frontend Test results'
condition: succeededOrFailed()
inputs:
testResultsFormat: JUnit
searchFolder: $(System.DefaultWorkingDirectory)/testresults
testResultsFiles: 'jest-junit.xml'
testRunTitle: 'Frontend Test Results'
mergeTestResults: false
failTaskOnFailedTests: true
更新:我怀疑“前端测试结果”发布步骤正在运行,因为前面的两个步骤未运行,但是之前的一个步骤成功了:
always()
即使运行被取消也会执行,而succeededOrFailed()
将在管道失败或成功时运行,但如果它被取消,则不会运行。 - Facundo Santiago