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/PR
、resources
) 和过滤器 (branches
, paths
, tags
) 定义何时应该触发管道。
在流水线中,我们一般会为一个stage、job或step指定条件来定义这个stage、job或step何时应该运行或不。条件将在管道被触发后进行验证。
要指定条件,您可以使用以下方式之一:
我发现了问题并采纳了 @bright-ran-msft
的建议
阶段 A
和 B
是隐式链接的。由于阶段 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
我正在尝试在 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/PR
、resources
) 和过滤器 (branches
, paths
, tags
) 定义何时应该触发管道。
在流水线中,我们一般会为一个stage、job或step指定条件来定义这个stage、job或step何时应该运行或不。条件将在管道被触发后进行验证。
要指定条件,您可以使用以下方式之一:
我发现了问题并采纳了 @bright-ran-msft
阶段 A
和 B
是隐式链接的。由于阶段 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