git 如何防止从管道完成的推送触发Azure管道中的CI作业?

jaxagkaj  于 2022-11-20  发布在  Git
关注(0)|答案(2)|浏览(152)

这个问题是关于Azure Pipelines的,但让我先对比一下:在GitHub操作中,只要工作流使用提供的$GITHUB_TOKEN变量来验证并将更改推送回工作流正在运行的仓库,这将不会触发更多的工作流
在某些场景中,这一点非常重要,因为工作流的一部分功能是对它运行的仓库进行修改,而一个工作流可能会引发一系列工作流的连锁React,所有工作流都会相互触发。我们的场景符合这一描述,我认为GitHub这样构建Actions正是出于这一原因。
我一直试图在Azure管道中实现同样的事情,但我不能弄清楚如何实现,所以我将感谢任何指导。
Azure Pipelines具有$GITHUB_TOKEN变量的等效项-在Azure Pipelines中,它称为$(System.AccessToken),您可以在Git级别使用此令牌针对存储库进行身份验证,并根据授予运行您的管道的服务帐户的任何权限与存储库进行交互。
但不幸的是,使用此提供的令牌并不能抑制CI触发器。
我已启用此设置,希望它能将此功能添加到作业访问令牌中:

但不幸的是它在这方面没有任何作用;使用$(System.AccessToken)变量的推送仍然会触发与推送内容匹配的任何CI触发器。
我知道可以在提交消息中使用某些“标记”来选择退出CI触发器,但在我们的情况下这不是一个可行的选项,因为提交是由外部工具创建的,我们无法完全控制提交消息。(此外,每个提交消息中的这些标记会污染历史记录。
我错过了什么?这真的不可能用蔚蓝色管道实现吗?

wj8zmpe1

wj8zmpe11#

如果您的管道正在将更改推送到代码存储库,它可以通过在提交消息中放置[skip ci]来防止该推送触发任何其他CI管道。
请访问https://learn.microsoft.com/en-us/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&tabs=yaml#skipping-ci-for-individual-pushes

insrf1ej

insrf1ej2#

您可以在条件中使用触发器类型,以禁止触发与从管道完成的推送内容匹配的任何CI触发器。请参阅文档预定义变量
例如:

condition: and(succeeded(),ne(variables['Build.Reason'], 'ResourceTrigger'))

YAML管道演示:

pr:
  - dev2
stages:
- stage: PR
  condition: and(succeeded(),ne(variables['Build.Reason'], 'ResourceTrigger'))
  displayName: prBuild
  jobs:
   - job: test
     steps:
      - script: echo hello for test job,$(Build.Reason)

相关问题