Azure Pipeline如何按集成测试结果控制任务运行及流水线终止
实现方案
Azure DevOps Pipelines 提供了内置的状态判断函数,配合任务name属性和condition参数即可实现你的需求,无需额外自定义变量捕获任务状态。
配置要点
- 给「Run Integration Tests」任务添加唯一
name标识,用于后续针对该任务的状态判断 - 给「Publish e2e test videos」任务添加
condition: succeededOrFailed('任务名'),保证无论前序测试任务成功还是失败,该发布任务都会执行 - 给「Publish Web Static Artifact」任务添加
condition: succeeded('任务名'),保证只有测试任务执行成功时,才会发布静态资源,测试失败时该任务自动跳过,流水线执行完视频发布后直接终止,整体状态标记为失败
完整修改后的azure-pipelines.yml
trigger: - main pool: vmImage: ubuntu-latest steps: - script: ./e2e.sh displayName: Run Integration Tests # 给测试任务添加唯一name标识 name: E2ETest - task: PublishBuildArtifacts@1 displayName: Publish e2e test videos inputs: PathtoPublish: 'app/cypress/videos' ArtifactName: Videos publishLocation: 'Container' # 无论E2ETest成功失败都执行本任务 condition: succeededOrFailed('E2ETest') # 可选配置:如果发布视频本身出错也不阻塞后续流程,可取消下面这行的注释 # continueOnError: true - task: PublishBuildArtifacts@1 displayName: Publish Web Static Artifact inputs: PathtoPublish: 'app/dist/web' ArtifactName: Web publishLocation: 'Container' # 只有E2ETest执行成功时才运行本任务 condition: succeeded('E2ETest')
内置状态函数说明:
succeeded('任务名'):仅当指定任务执行成功时返回truesucceededOrFailed('任务名'):指定任务执行完成,无论成功或失败都返回true(任务被手动取消的场景不会返回true)always():无论前序任何状态都执行,包含手动取消场景,如果你需要即使用户手动取消流水线也发布视频,可把视频发布任务的condition替换为always()
内容的提问来源于stack exchange,提问作者Werner Raath
相关产品推荐
相关产品推荐

