You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 16:54:04