要求
因此,Azure DevOps 中有一些新功能允许管道触发其他管道,并在此处记录:https ://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure- devops&tabs=yaml#pipeline-triggers-1听起来不错,除了我无法获得所需的行为。我想在同一个存储库中有 2 个管道:
- 管道 A:仅由其自己的 repo 之外的多个其他管道触发,但在同一个项目中。由于被触发,它对自己的 repo 进行了更改,因此触发了管道 B。
- 管道 B:仅由对其自己的 repo 的更改触发,并且在触发时继续执行它需要做的任何事情
管道 A 语法
resources:
pipelines:
- pipeline: database
source: database
trigger:
branches:
- develop
- release/*
# The stages filter should work, according to: https://docs.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops&tabs=yaml
# However, this error occurs when specifying: /azure-pipelines.yml (Line: 8, Col: 15): Stage filters in pipeline resource database is not supported.
#stages:
#- Build
- pipeline: auth
source: auth
trigger:
branches:
- develop
- release/*
- pipeline: api
source: api
trigger:
branches:
- develop
- release/*
- pipeline: web
source: web
trigger:
branches:
- develop
- release/*
... multiple triggers - 9 in total
stages:
...
当前行为
管道 A 不会由任何其他管道触发,而只会在其自己的存储库发生更改时触发。由于无论如何它都会更改自己的存储库,因此它会在无限循环中触发自己。
问题/评论
- Pipeline A 的语法是否正确?
- 来自文档:“但是,如果两个管道使用不同的存储库,那么触发的管道将使用其默认分支中最新版本的代码。” 我假设这意味着来自默认分支的 yaml 管道将被激活。我们真的有那么一点点控制权吗?在管道声明中指定目标分支会好得多。
- 是否有可能以某种方式获得触发管道的源分支?
- 为什么阶段过滤器不像记录的那样工作?
- 在管道 A 中,为了停止循环,我尝试使用 $(Build.TriggeredBy.DefinitionId) 检查它是否与 $(System.DefinitionId) 相同,如果是则跳过构建步骤,但是 $(Build.TriggeredBy.DefinitionId ) 没有价值
- 如果我不能让它工作,我倾向于让其他管道触发管道 A。
发现
- 添加
trigger: none
到管道 A 的顶部会阻止它在提交到其 repo 时运行,它目前根本没有运行! - 在一个单独帐户中的简化管道场景中,我设法让触发的构建工作,在同一个 repo 中有 2 个管道,并发现:
- 执行的 yaml 管道文件与触发管道上的提交位于同一分支
- 签出的代码也来自与触发管道上的提交相同的分支
- 从 GUI 手动执行管道不会触发相关管道
- 依赖管道在第一次启动时立即被触发并排队
- 我无法让分支排除工作:无论排除条款如何,管道都会触发
- 在单独的帐户中运行简化的管道场景,在 repo C 中使用管道 A,在 repo D 中使用依赖管道 B(同一项目),到目前为止,我无法让管道 A 触发管道 B(我的原始场景)
- 哦,太高兴了 :-) 有一个 az azure devops 命令行扩展,它获得了管道支持并允许您触发管道:
- 要安装:https ://docs.microsoft.com/en-us/azure/devops/cli/?view=azure-devops
- 管道运行文档:https ://docs.microsoft.com/en-us/cli/azure/ext/azure-devops/pipelines?view=azure-cli-latest#ext-azure-devops-az-pipelines-run
- 管道触发命令示例:
az pipelines run --branch master --name "<PipelineName>" --org "https://dev.azure.com/<OrganisationName>" -p "<ProjectName>"
- Azure DevOps 集成示例:https ://docs.microsoft.com/en-us/azure/devops/cli/azure-devops-cli-in-yaml?view=azure-devops