基于 Azure Devops PR 的管道
Azure Devops PR based pipeline
我有一个要求,我需要在完成合并请求后触发一个 azure 管道阶段。我启用了成功触发我的管道的分支策略。我的管道由下面提到的两个阶段组成(示例代码)
stages:
- stage: plan
displayName: 'terraform plan'
condition: eq(variables['Build.Reason'], 'PullRequest')
...
- stage: apply
displayName: 'terraform apply'
condition: eq(variables['Build.Reason'], 'PullRequest')
...
在提出 Pull 请求时,两个阶段都在执行(按顺序),我只需要先执行计划阶段并暂停管道,直到 PR 合并。一旦 PR 合并,应用阶段应该恢复。我怎样才能做到这一点?
使用阶段时不是这样的。管道在 PR 上触发,但从那时起没有任何新的触发器。合并时可以触发新管道。
虽然 PR 管道尚未完成,但它不会向 PR 报告状态。它需要完成才能成功关闭 PR。
不过,如果需要,您可以重复使用构建工件。
我觉得你要找的是舞台上的条件。会是
- ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main')}} :
- stage: apply
displayName: 'terraform apply'
condition: eq(variables['Build.Reason'], 'PullRequest')
如果它是 PR 请求完成的一部分并且它不在主分支中,则只会执行应用阶段。
为澄清起见,它使用的是 Predefined ADO variables。
另一种选择是添加一个 Environment 并在环境上设置门。
你真的不需要条件 if 条件,但我把它放在那里,如果它不是主分支,甚至不会加载舞台。实际情况是不会执行该阶段的片段。
我有一个要求,我需要在完成合并请求后触发一个 azure 管道阶段。我启用了成功触发我的管道的分支策略。我的管道由下面提到的两个阶段组成(示例代码)
stages:
- stage: plan
displayName: 'terraform plan'
condition: eq(variables['Build.Reason'], 'PullRequest')
...
- stage: apply
displayName: 'terraform apply'
condition: eq(variables['Build.Reason'], 'PullRequest')
...
在提出 Pull 请求时,两个阶段都在执行(按顺序),我只需要先执行计划阶段并暂停管道,直到 PR 合并。一旦 PR 合并,应用阶段应该恢复。我怎样才能做到这一点?
使用阶段时不是这样的。管道在 PR 上触发,但从那时起没有任何新的触发器。合并时可以触发新管道。
虽然 PR 管道尚未完成,但它不会向 PR 报告状态。它需要完成才能成功关闭 PR。
不过,如果需要,您可以重复使用构建工件。
我觉得你要找的是舞台上的条件。会是
- ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main')}} :
- stage: apply
displayName: 'terraform apply'
condition: eq(variables['Build.Reason'], 'PullRequest')
如果它是 PR 请求完成的一部分并且它不在主分支中,则只会执行应用阶段。
为澄清起见,它使用的是 Predefined ADO variables。
另一种选择是添加一个 Environment 并在环境上设置门。
你真的不需要条件 if 条件,但我把它放在那里,如果它不是主分支,甚至不会加载舞台。实际情况是不会执行该阶段的片段。