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

如何配置Infra与Code流水线实现分阶段触发联动?

问题描述

我有两条流水线:Infra和Code,共享同一个代码库:

  • Infra流水线:仅在Bicep代码变更时触发,负责重新部署Azure资源
  • Code流水线:仅在应用代码变更时触发,负责更新函数应用等
    这个架构的目的是优化运行时长,避免无Infra变更时执行不必要的资源部署。

两条流水线都包含Dev环境和Prod环境两个阶段,Prod阶段设有审批环节——如果只需要在Dev环境测试代码,我会驳回Prod的审批请求。

当前遇到的问题:当Infra变更时,函数应用代码会被清空,因此Code流水线必须始终在Infra流水线之后运行。但如果我驳回Prod审批,Infra流水线无法完成整个流程,导致依赖它的Code流水线触发机制失效。

现有流水线YAML配置如下:

Infra流水线配置

# infra pipeline yaml
stages:
- stage: Dev
  jobs:
  - template: 'deployInfraToEnv.yaml'
    parameters: ...

- stage: Prod
  jobs:
  - template: 'deployInfraToEnv.yaml'
    parameters: ...

Code流水线配置

# code pipeline yaml
resources:
  pipelines:
    - pipeline: Infra
      source: 'Infra pipeline'
      trigger: true # run after infra pipeline completes

stages:
- stage: Dev
  jobs:
    - template: 'deployCodeToEnv.yaml'
      parameters: ...
  
- stage: Prod
  jobs:
    - template: 'deployCodeToEnv.yaml'
      parameters: ...

我想实现的目标是:

Infra流水线Dev阶段完成 -> 触发Code流水线Dev阶段运行
Infra流水线Prod阶段完成 -> 触发Code流水线Prod阶段运行

请问是否可以通过配置实现这个目标?还是必须放弃现有架构,将Infra与Code部署合并为一条流水线?


解决方案

完全不需要合并流水线,通过以下配置可以实现分阶段触发的需求:

1. 修改Infra流水线,添加阶段级触发任务

在Infra流水线的每个阶段末尾,新增一个触发Code对应阶段的任务,确保该阶段完成后立即触发Code的对应环节:

# infra pipeline yaml
stages:
- stage: Dev
  jobs:
  - template: 'deployInfraToEnv.yaml'
    parameters: ...
  - job: TriggerCodeDev
    dependsOn: deployInfraToEnv # 依赖Dev阶段的部署任务
    steps:
      - task: TriggerPipeline@2
        inputs:
          pipeline: 'Code pipeline' # 指定Code流水线名称
          branch: '$(Build.SourceBranchName)'
          parameters: '{"targetStage": "Dev"}' # 传递目标阶段参数
          waitForCompletion: false

- stage: Prod
  jobs:
  - template: 'deployInfraToEnv.yaml'
    parameters: ...
  - job: TriggerCodeProd
    dependsOn: deployInfraToEnv # 依赖Prod阶段的部署任务
    steps:
      - task: TriggerPipeline@2
        inputs:
          pipeline: 'Code pipeline'
          branch: '$(Build.SourceBranchName)'
          parameters: '{"targetStage": "Prod"}'
          waitForCompletion: false

2. 修改Code流水线,支持按需运行指定阶段

为Code流水线添加参数控制,允许只运行指定的阶段,避免默认执行全流程:

# code pipeline yaml
parameters:
  - name: targetStage
    type: string
    default: 'All' # 默认运行所有阶段

# 保留代码变更触发逻辑(可选)
trigger:
  paths:
    include:
      - 'app-code/**' # 仅应用代码变更时触发全流程

stages:
- ${{ if or(eq(parameters.targetStage, 'All'), eq(parameters.targetStage, 'Dev')) }}:
  - stage: Dev
    jobs:
      - template: 'deployCodeToEnv.yaml'
        parameters: ...
  
- ${{ if or(eq(parameters.targetStage, 'All'), eq(parameters.targetStage, 'Prod')) }}:
  - stage: Prod
    jobs:
      - template: 'deployCodeToEnv.yaml'
        parameters: ...

3. 关闭Code流水线的全局流水线触发

原Code流水线中基于Infra流水线完成的全局触发可以关闭,改用上述阶段级触发:

# 移除或注释原有全局触发配置
# resources:
#   pipelines:
#     - pipeline: Infra
#       source: 'Infra pipeline'
#       trigger: true

配置完成后,即可实现:

  • Infra的Dev阶段部署完成后,自动触发Code的Dev阶段运行
  • Infra的Prod阶段通过审批并部署完成后,自动触发Code的Prod阶段运行
  • 应用代码变更时,Code流水线仍能自动触发全流程测试部署
  • 驳回Prod审批时,Infra的Prod阶段不会执行,自然也不会触发Code的Prod阶段,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者tonsteri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:23:12