Azure Devops 管道仅在合并时触发

Dav*_*ord 11 pipeline git-merge azure-devops cicd

我正在寻找一种仅在成功(或尝试)拉取请求合并时触发 Azure 管道的方法。

我现在有 :

trigger:
 branches:
  include:
    - DEV

steps:
- script: FOO
Run Code Online (Sandbox Code Playgroud)

但每次 DEV 分支发生更改时都会运行,我想避免这种情况。

此外,我想要一个编程响应,而不是每次都通过用户界面。

编辑:发生了一件奇怪的事情

condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'))
Run Code Online (Sandbox Code Playgroud)

得到:

Expanded: and(True, eq('IndividualCI', 'PullRequest'))" 
Run Code Online (Sandbox Code Playgroud)

在做公关时,因此没有达到预期效果

Leo*_*SFT 11

\n

我正在寻找一种仅在成功(或尝试)拉取请求合并时触发 Azure 管道的方法。

\n
\n

目前还没有这样的开箱即用的方法来实现这一目标。

\n

我们只能在目标分支上设置 CI 触发器,但我们可以为管道设置条件以避免构建任何任务:

\n
and(succeeded(), eq(variables[\'Build.Reason\'], \'PullRequest\'))\n
Run Code Online (Sandbox Code Playgroud)\n

例如

\n
trigger:\n branches:\n  include:\n    - DEV\n\nsteps:\n- script: FOO\n  condition: and(succeeded(), eq(variables[\'Build.Reason\'], \'PullRequest\'))\n
Run Code Online (Sandbox Code Playgroud)\n

或者你可以设置舞台、工作等条件。

\n

请查看文档指定条件以了解更多详细信息。

\n

如果分支上有变化DEV,则条件会避免它。

\n

注意:使用上述方式,管道会被触发,但不会执行任何任务。

\n

如果您甚至不希望触发管道。您可以使用 powershall 任务添加新管道来调用 REST API 来触发上述管道并将条件设置为 powershell 任务。

\n

这样,只有当提交来自 PR 时才会触发管道。

\n

更新:

\n
\n

在 DEV 分支上执行 PR 会导致:“Expanded: and(True,\neq(\'IndividualCI\', \'PullRequest\'))”

\n
\n

是的,你是对的。这是因为 azure devops 不具备在 PR 完成后触发管道的功能。拉取请求触发器和构建验证都会在 PR启动时触发管道。

\n

为了解决这个请求,我们可以尝试创建一个服务钩子来监控 PR 状态。如果 PR 状态发生变化,则通过 API 或应用程序触发管道,您可以查看此文档以了解更多详细信息。

\n

另一种实现方式是使用 REST API。

\n

主要思想是\xef\xbc\x9a

\n
    \n
  1. 创建一个管道并将其设置为Buildvalidation,但不要将其设置为Required,应将其设置为Optional
  2. \n
\n

在此输入图像描述

\n
    \n
  1. 在上述管道中添加 powershell 任务以调用 REST API 来监视 PR 状态直至完成,并添加另一个任务以调用REST API 来触发当前管道
  2. \n
\n

因此,您可以删除:

\n
trigger:\n branches:\n  include:\n    - DEV\n
Run Code Online (Sandbox Code Playgroud)\n

在您当前的管道中。

\n