如何设置基于标签的 azure 管道阶段触发?

时间:2021-05-04 14:13:53

标签: azure azure-devops azure-pipelines azure-pipelines-yaml

我有以下 Azure YAML 管道文件,其阶段根据推送到 Azure 存储库的标记 some-tag-v* 引用执行。

trigger:
  branches:
    include:
      - refs/tags/some-tag-v*
    exclude:
      - refs/tags/some-branch

pool:
  name: some-name
  demands:
  - Agent.Name -equals some-name

stages:
- stage: A
  jobs:
  - job: A
  steps:
  - checkout: self
  - bash: |
      some-bash-commands
- stage: B
  jobs:
  - job: B
    steps:
    - bash: |
       More-bash-commands

问题:我希望仅在推送 some-tag-2-v* 而不是 some-tag-v* 时执行阶段 B。我正在研究基于条件的触发,但我不确定这是否是正确的方法。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用 YAML conditions

stages:
- stage: A
  condition: ...
  jobs:
  - job: A
  steps:
  - checkout: self
  - bash: |
      some-bash-commands

对于条件,您可能可以利用管道和构建变量,例如:

variables:
  isSomeTag: $[eq(variables['Build.SourceBranch'], 'refs/tags/some-tag-v')]

答案 1 :(得分:1)

我建议您可以直接在 Stages 中使用 IF Expression。这样会更方便。

这是一个例子:

trigger:
  branches:
    include:
      - - refs/tags/some-tag-v*
      
    exclude:
      - refs/tags/some-branch


stages:
- ${{ if eq(variables['Build.SourceBranch'], 'refs/tags/some-tag-v') }}:

  - stage: A
    jobs:
    - job: A
      steps:
       - checkout: self
       - bash: echo 1
      
- ${{ if eq(variables['Build.SourceBranch'], 'some-tag-2-v') }}:

  - stage: B
    jobs:
    - job: B
      steps:
       - bash: echo 2

当管道被 some-tag-2-v 触发时,它只会运行阶段 B。