DevOps YAML 构建管道多回购触发分支未被 Release Pipeline 识别以用于持续部署触发器或工件过滤器

DevOps YAML build pipeline multi-repo trigger branch not identified by Release Pipeline for continuous deployment trigger or artifact filter

我有一个 YAML 构建管道,它位于存储库 PipelineRepo、分支 master

它包含对第二个存储库 AppRepo 的引用,在分支 dev 上有一个触发器。

AppRepo/dev 上进行提交时,构建会触发并生成工件。 Build.SourceBranch 在构建期间可用的预定义变量当然是 dev,因为这是 AppRepo 上的触发分支。这是根据此处的文档:

https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#triggers

文档的具体部分是这样的:

When an update to one of the repositories triggers a pipeline, then the following variables are set based on triggering repository:

  • Build.Repository.ID
  • Build.Repository.Name
  • Build.Repository.Provider
  • Build.Repository.Uri
  • Build.SourceBranch
  • Build.SourceBranchName
  • Build.SourceVersion
  • Build.SourceVersionMessage

我在发布管道中使用工件,其中我有一个“开发”阶段,其中有一个用于分支 dev:

的工件过滤器

我在分支 dev:

的工件上有一个持续部署触发器

现在我们来解决问题

每次从 AppRepo/dev 分支生成新的构建工件时,持续部署触发器不会触发,因为它认为工件的构建分支是 PipelineRepo/master。舞台上的神器过滤器也是如此——我通过将持续部署触发器更改为 master.

进行了测试

注意:您可以在屏幕截图中看到构建名称包含单词“dev”。这是因为我在自定义构建名称中使用了 Build.SourceBranch 变量。这证明神器肯定是由AppRepo/dev触发分支产生的。

如何让 DevOps 发布管道选择触发分支?

根据您的描述,我可以在我的组织中重现类似的问题。

当管道被另一个 repo 分支触发时,它仍然在 Release artifacts 中显示 master 分支。

同时trigger分支在Pipelines中的显示也不一致

例如:

概览:

详细视图:

我建议您可以在 Our feedback Site 中创建反馈票。

解决方法:

您可以在 Pipeline 中添加构建标签来区分工件。

Yaml 示例:

resources:
  repositories:
  - repository: test
    type: git
    name: 123/ARM
    trigger:
    - test

steps:
- checkout: test
- script: echo  "##vso[build.addbuildtag]$(Build.SourceBranch)" 

发布管道:

您可以设置主分支并添加构建标签。