Azure 管道 - 尽管没有条件,仍会跳过阶段

Azure pipelines - Stages are skiped despite no conditions

我正在尝试在 Azure 中设置管道。

实际行为

根据拉取请求,构建验证会触发管道并触发所有阶段和作业。

合并后,将跳过所有作业。

预期行为

合并拉取请求后,我希望阶段 B 被触发

问题

我错过了什么所以管道在合并时正确触发?

azure.pipelines.yml

trigger:
  branches:
    include:
      - master 
stages:
  - template: 'main.yml'

main.yml

 stages:
  - stage: 'A'
    condition: startsWith(variables['build.reason'], 'PullRequest')
    jobs:
      - job: A
        steps:
          - script: echo A

  - stage: 'B'
    jobs:
      - job: 'B'
        steps:
          - script: echo B

触发器功能仅适用于整个管道,不适用于管道中的个人 stage/job。

通常,我们使用不同的触发器类型 (CI/PRresources) 和过滤器 (branches, paths, tags) 定义何时应该触发管道。

在流水线中,我们一般会为一个stage、job或step指定条件来定义这个stage、job或step何时应该运行或不。条件将在管道被触发后进行验证。

要指定条件,您可以使用以下方式之一:

我发现了问题并采纳了 @bright-ran-msft

的建议

阶段 AB 是隐式链接的。由于阶段 A 未在合并时触发,阶段 B 也不会启动。

解决方案

而不是使用condition,需要使用if

例子

 stages:
 - ${{ if eq( variables['build.reason'], 'PullRequest') }}:
  - stage: 'A'
    jobs:
      - job: A
        steps:
          - script: echo A

  - stage: 'B'
    jobs:
      - job: 'B'
        steps:
          - script: echo B