azure-devops - 我希望 Azure Pipeline 构建与刚刚构建的触发管道相同命名的分支
问题描述
问题
我有两个存储库A
,B
在一个项目中,每个都有自己的管道A-CI
和B-CI
. 存储库是 Azure Repos Git(所以不是外部的)。我让它在完成B-CI
时触发管道A-CI
。如果A-CI
由提交到 branch触发develop
,则B-CI
触发 buildmaster
虽然B
也有一个develop
分支。当一个新的开发版本已经构建时,
我想为开发环境构建一个新版本。B
A
是否可以让管道资源触发B-CI
管道以构建与刚刚由管道资源构建的分支同名的分支?如果它可以回退到master
以防匹配的分支在B
.
A-C
但是,如果并且B-CI
两者都引用同一存储库的不同管道 yaml,则此方案有效。
管道 YAML
A-CI
trigger:
- '*'
stages:
- stage: Build
jobs:
- job: BuildJob
pool:
name: 'MyBuildPool'
steps:
- powershell: |
Write-Host "Building A"
B-CI
resources:
pipelines:
- pipeline: Pipeline_A
source: 'A-CI'
trigger:
branches:
- master
- develop
- feature/*
trigger:
- '*'
stages:
- stage: Build
jobs:
- job: BuildJob
pool:
name: MyBuildPool
steps:
- powershell: |
Write-Host $(Build.SourceBranch) # is always refs/heads/master
Write-Host $(Build.Reason) # is ResourceTrigger
背景信息
其背后的主要思想是,它A
包含 IaC 项目,并且每当项目的基础设施发生变化时,所有应用程序也应该被部署。
我不想将 IaC 放入应用程序仓库,因为我们有多个应用程序,所以我必须将 IaC 代码分成几个块。
然后我可能仍然会遇到同样的问题,因为某些资源(例如 Azure KeyVault)在应用程序之间共享,因此A
仍会包含所有应用程序使用的通用内容,并且对其进行更改需要重新部署所有应用程序。
解决方案
请检查管道触发器:
如果触发管道和触发管道使用相同的存储库,那么当一个触发另一个时,两个管道将使用相同的提交运行。如果您的第一个管道构建代码,而第二个管道对其进行测试,这将很有帮助。
但是,如果两个管道使用不同的存储库,则触发的管道将使用其默认分支中最新版本的代码。
在这种情况下,因为如果你的master
默认分支总是.B-CI
$(Build.SourceBranch)
refs/heads/master
作为一种解决方法:
您可以为 repository 创建一个新的 yaml 管道B
。您可以将 yaml 文件的类似内容用于 B-CI。您只需要将其中的某些内容更改为:
resources:
pipelines:
- pipeline: Pipeline_A
source: 'A-CI'
trigger:
branches:
- develop
当我们创建新的 yaml 文件时,它总是放在 master 分支中。对我来说,我在 dev 分支中创建了一个同名的文件,并在其中复制了相同的内容。然后我在 master 分支中删除了新的 yaml 文件,现在当 A-CI 管道的 dev 构建时,将使用 B repos 的 dev。
推荐阅读
- ios - 修改 endcap .round 样式,使其更明显圆形,与此处显示的示例图像不同
- url - Angular 2:多个组件的一条路径?
- python - 预期 input_1 的形状为 (224, 224, 3) 但得到的数组的形状为 (400, 401, 3)
- c# - 在使用 C# .NET Core 3 中使用 SSL 证书连接到 MySQL 数据库
- javascript - 如何将 observable 应用于复选框以验证它是否被选中,从而能够重新加载我的应用程序页面?
- javascript - 如何在 JavaScript 中过滤嵌套的嵌套对象?
- encoding - 网站输出奇怪的字符编码
- tcp - 无法从 Coturn 服务器获取 ICE TCP 中继候选
- coldfusion - Firebird Jaybird 2.2.10 / ColdFusion 2018 - 字符串长度错误
- odata - 从 Microsoft Graph API 消息中获取对话