基于 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 条件,但我把它放在那里,如果它不是主分支,甚至不会加载舞台。实际情况是不会执行该阶段的片段。