Azure Pipelines - 处理依赖下游管道的构建
Azure Pipelines - Handling builds for Dependent downstream pipelines
我们有更多的通用上游管道——pipleline-a、pipleline-b、pipeline-c、pipeline-d……每个都在自己的存储库中——repository-a、repository-b、repository-c、repository- …
我的目标管道,比如 repository-y 中的 pipeline-y,依赖于这些上游管道工件,当任何上游库发生更改并且相应的上游管道成功构建时,目标管道需要构建。
换句话说,如果任何上游管道由于它们的变化而成功完成,则需要触发目标管道-y(CI 上游库的触发器在它们自己的管道中工作正常)。
我们目前实现了这一点,使用目标管道-y 中的资源管道触发器,如下所示:
上游管道-管道-a.yml
trigger:
- repository-a*
steps
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
publishJUnitResults: false
javaHomeOption: 'JDKVersion'
mavenVersionOption: 'Default'
mavenAuthenticateFeed: true
effectivePomSkip: false
sonarQubeRunAnalysis: false
goals: 'package deploy'
目标管道-y.yml资源部分
resources:
pipelines:
- pipeline: pipeline-a
source: pipeline-a
trigger:
branches:
- 'pipeline-a-v1*'
- pipeline: pipeline-b
source: pipeline-b
trigger:
branches:
- 'pipeline-b-v1*'
- pipeline: pipeline-c
source: pipeline-c
trigger:
branches:
- 'pipeline-c-v1*'
- pipeline: pipeline-d
source: pipeline-d
trigger:
branches:
- 'pipeline-d-v1*'
- pipeline: pipeline-e
source: pipeline-e
trigger:
branches:
- 'pipeline-e-v1*'
这很好用。
我的问题是,随着我们添加更多上游公共库,我们必须更新目标下游中的资源部分。当上游库有新版本时,我们必须修改 resources-pipelines-pipiline-trigger - branches 从“pipeline-a-v1”到“pipeline-a-v2”中的版本。
有更好的方法吗?可以在 resources-pipelines-pipeline-trigger - branches - example pipeline-a-$(version) 中使用变量。可以使用 Build 系统变量派生版本,如下所示:
我试过了
变量:
版本:$[replace(variables['Build.SourceBranchName'], variables['Build.Repository.Name'], '')]
好像没用。
无法在 YAML 中动态指定资源。
一个建议是在添加新管道时使用 REST API 挂钩。然后触发一个程序,为 pipeline-y.yml.
生成新的 YAML
我们有更多的通用上游管道——pipleline-a、pipleline-b、pipeline-c、pipeline-d……每个都在自己的存储库中——repository-a、repository-b、repository-c、repository- … 我的目标管道,比如 repository-y 中的 pipeline-y,依赖于这些上游管道工件,当任何上游库发生更改并且相应的上游管道成功构建时,目标管道需要构建。 换句话说,如果任何上游管道由于它们的变化而成功完成,则需要触发目标管道-y(CI 上游库的触发器在它们自己的管道中工作正常)。
我们目前实现了这一点,使用目标管道-y 中的资源管道触发器,如下所示:
上游管道-管道-a.yml
trigger:
- repository-a*
steps
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
publishJUnitResults: false
javaHomeOption: 'JDKVersion'
mavenVersionOption: 'Default'
mavenAuthenticateFeed: true
effectivePomSkip: false
sonarQubeRunAnalysis: false
goals: 'package deploy'
目标管道-y.yml资源部分
resources:
pipelines:
- pipeline: pipeline-a
source: pipeline-a
trigger:
branches:
- 'pipeline-a-v1*'
- pipeline: pipeline-b
source: pipeline-b
trigger:
branches:
- 'pipeline-b-v1*'
- pipeline: pipeline-c
source: pipeline-c
trigger:
branches:
- 'pipeline-c-v1*'
- pipeline: pipeline-d
source: pipeline-d
trigger:
branches:
- 'pipeline-d-v1*'
- pipeline: pipeline-e
source: pipeline-e
trigger:
branches:
- 'pipeline-e-v1*'
这很好用。
我的问题是,随着我们添加更多上游公共库,我们必须更新目标下游中的资源部分。当上游库有新版本时,我们必须修改 resources-pipelines-pipiline-trigger - branches 从“pipeline-a-v1”到“pipeline-a-v2”中的版本。
有更好的方法吗?可以在 resources-pipelines-pipeline-trigger - branches - example pipeline-a-$(version) 中使用变量。可以使用 Build 系统变量派生版本,如下所示:
我试过了
变量: 版本:$[replace(variables['Build.SourceBranchName'], variables['Build.Repository.Name'], '')]
好像没用。
无法在 YAML 中动态指定资源。
一个建议是在添加新管道时使用 REST API 挂钩。然后触发一个程序,为 pipeline-y.yml.
生成新的 YAML