首页 > 解决方案 > 我希望 Azure Pipeline 构建与刚刚构建的触发管道相同命名的分支

问题描述

问题

我有两个存储库AB在一个项目中,每个都有自己的管道A-CIB-CI. 存储库是 Azure Repos Git(所以不是外部的)。我让它在完成B-CI时触发管道A-CI。如果A-CI由提交到 branch触发develop,则B-CI触发 buildmaster虽然B也有一个develop分支。当一个新的开发版本已经构建时,
我想为开发环境构建一个新版本。BA

是否可以让管道资源触发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仍会包含所有应用程序使用的通用内容,并且对其进行更改需要重新部署所有应用程序。

标签: azure-devopsazure-pipelines

解决方案


请检查管道触发器

如果触发管道和触发管道使用相同的存储库,那么当一个触发另一个时,两个管道将使用相同的提交运行。如果您的第一个管道构建代码​​,而第二个管道对其进行测试,这将很有帮助。

但是,如果两个管道使用不同的存储库,则触发的管道将使用其默认分支中最新版本的代码。

在这种情况下,因为如果你的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。


推荐阅读