如何在Azure DevOps流水线CI与DEV部署阶段间调用独立E2E仓库流水线
解决方案
核心实现逻辑
- 在主流水线中先定义管道资源,指向你独立仓库的ReadyApi测试流水线
- 在
ci_deployment与dev_deployment之间新增API测试阶段,依赖CI部署阶段的成功结果 - 配置主动触发测试流水线并等待执行结果,测试失败时自动阻断后续DEV部署流程
修改后的主流水线代码
--- # 新增部分:定义外部测试流水线资源 resources: pipelines: - pipeline: ReadyApiTest source: <替换为你的ReadyApi流水线实际名称> # 若ReadyApi流水线和主流水线不在同一个项目,补充下方配置 # project: <ReadyApi流水线所属项目名称> branch: trunk trigger: none # 禁止测试流水线被代码提交自动触发,仅主流水线主动调用时运行 trigger: batch: false branches: include: - trunk pool: "poolName" variables: buildMajor: 1 buildMinor: 3 stages: - stage: build_and_test displayName: Build and Test variables: azureResourceGroup: azureInfrastructureStateStorageAccount: environmentName: ci jobs: - job: build_image - job: run_unit_test - job: run_component_test - job: build_and_push_container - stage: ci_deployment variables: deployment_name: $(serviceName) namespace: ci environmentName: ci buildid: $(buildVersion).$(Build.BuildNumber).$(Build.SourceVersion) minReplicas: 1 maxReplicas: 5 dependsOn: build_and_test jobs: - deployment: deploy_to_ci environment: ci displayName: Deploy to ci strategy: runOnce: deploy: steps: - template: pipelines/azure-pipelines-deploy.yaml parameters: environmentName: $(environmentName) aadPodIdentityName: $(aadPodIdentityName) appConfigName: $(appConfigName) keyVaultName: $(keyVaultName) # 新增部分:API测试阶段 - stage: run_readyapi_test displayName: Run ReadyApi Test for CI Environment dependsOn: ci_deployment # 仅CI部署成功后才执行 jobs: - job: trigger_external_test_pipeline pool: server # 服务器作业,无需占用构建代理节点 steps: - task: TriggerPipeline@1 inputs: pipeline: 'ReadyApiTest' # 和上方resources中定义的资源别名一致 # project: <ReadyApi流水线所属项目名称> # 跨项目时补充 branch: 'trunk' waitForCompletion: true # 等待测试流水线完全执行完成再走后续步骤 failOnFailure: true # 测试流水线任何失败都会直接让当前阶段失败,阻断后续部署 - stage: dev_deployment variables: deployment_name: $(serviceName) namespace: dev environmentName: dev buildid: $(buildVersion).$(Build.BuildNumber).$(Build.SourceVersion) minReplicas: 3 maxReplicas: 10 dependsOn: run_readyapi_test # 修改依赖为API测试阶段,测试通过才会部署到DEV jobs: - deployment: deploy_to_dev environment: dev displayName: Deploy to dev strategy: runOnce: deploy: steps: - template: pipelines/azure-pipelines-deploy.yaml parameters: environmentName: $(environmentName) aadPodIdentityName: $(aadPodIdentityName) appConfigName: $(appConfigName) keyVaultName: $(keyVaultName)
关键配置说明
- 你原有的ReadyApi流水线无需修改,
PublishTestResults任务中已配置failTaskOnFailedTests: true,测试用例失败时会自动标记流水线运行失败,主流水线可以直接捕获该状态 waitForCompletion: true会让主流水线暂停执行,直到测试流水线运行完成再继续,避免还没跑完测试就触发了DEV部署- 如果需要给测试流水线传递参数(比如动态传入CI环境的地址),可以在
TriggerPipeline@1任务的pipelineParameters字段中配置键值对
YAML流水线学习建议
- 刚接触YAML编写时可以直接使用Azure DevOps流水线编辑界面的「任务助手」功能,选中需要的任务后可视化填写配置,自动生成对应的YAML代码,降低编写门槛
- 可以在Azure DevOps官方文档站点搜索以下关键词学习相关功能:YAML pipeline resources、Trigger pipeline from YAML、Stage dependencies
内容的提问来源于stack exchange,提问作者Hosertheposer
相关产品推荐
相关产品推荐

