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

Azure Pipeline:排除拉取请求构建验证触发CD流水线

解决PR构建触发CD流水线的问题

方法1:在CD流水线中添加构建原因过滤

直接在CD的作业或阶段层面添加条件判断,仅当触发CD的CI构建不是PR类型时才执行部署逻辑。修改CD.yml如下:

trigger: none
resources:
  pipelines:
    - pipeline: CI
      source: "CI"
      trigger:
        branches:
          include:
            - main
          exclude:
            - '*' 
        stages:
          - 'Package: CI'

jobs:
- job: DeployJob
  # 仅当CI构建原因不是PullRequest时运行
  condition: ne(variables['resources.pipeline.CI.buildReason'], 'PullRequest')
  steps:
    # 这里写你的部署步骤
    - script: echo "开始部署"

原理:PR触发的CI构建,其buildReason会被标记为PullRequest,通过这个条件可以直接跳过CD的执行。

方法2:让CI仅在非PR构建时主动触发CD

放弃CD的资源自动触发器,改为在CI流水线中添加条件触发逻辑,只有非PR构建完成后才主动调用CD。

  1. 修改CD.yml,移除资源触发器,保持手动触发:
trigger: none
# 移除原有的resources.pipelines配置
  1. 在CI.yml中添加一个条件触发阶段,仅当非PR构建时执行:
# 你的CI现有阶段配置...
- stage: TriggerCD
  condition: ne(variables['Build.Reason'], 'PullRequest')
  jobs:
  - job: TriggerDeployment
    steps:
    - task: TriggerPipeline@2
      inputs:
        pipeline: 'CD' # 替换为你的CD流水线名称或ID
        branch: 'main'
        waitForCompletion: false # 按需设置是否等待CD执行完成

原理:完全由CI控制CD的触发时机,PR构建会跳过这个触发阶段,自然不会启动CD。

方法3:修正CD的阶段过滤逻辑(针对你现有配置)

你提到PR构建时会跳过Package: CI阶段,但CD仍被触发,大概率是CD的阶段过滤配置位置错误。修正如下:

trigger: none
resources:
  pipelines:
    - pipeline: CI
      source: "CI"
      trigger:
        branches:
          include: [main]
          exclude: ['*']
        # 阶段过滤要放在trigger根节点下,而非branches节点内
        stages: ['Package: CI']

同时确认CI中PR构建时,Package: CI阶段确实未执行(可查看CI流水线运行日志验证)。修正后,CD只会在CI的Package: CI阶段成功时才触发,PR构建跳过该阶段后就不会触发CD了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:30:26