如果 Azure 管道中的存储库资源不存在分支,是否可以使用后备引用?

问题描述 投票:0回答:1

到目前为止,管道似乎运行良好。它是动态的,因为它将触发所有发布分支、所有存储库,这正是我们想要的。

我们真正想要的是能够使用后备引用,以防触发构建的分支 Build.SourceBranch 对于一个或多个存储库不可用。

trigger:
- none

pool:
  name: <POOL_NAME>
  demands:
  - agent.name -equals  <AGENT_NAME>
# Overrides the value for Build.BuildNumber, which is used to name the artifact (ZIP file) that is produced

name: '$(Date:yyyyMMdd)T$(Hours)$(Minutes)$(Seconds)'

resources:
  repositories:
  - repository: REPO-A
    type: git
    ref: $(Build.SourceBranch)
    name: <COMPANY>/REPO-A
    trigger:
      branches:
        include:
        - 'release/*'

  - repository: REPO-B
    type: git
    ref: $(Build.SourceBranch)
    name: <COMPANY>/REPO-B
    trigger:
      branches:
        include:
        - 'release/*'
          
stages:
- stage: 'BuildAndUploadArtifact'
  jobs:
  - job:
    workspace:
      clean: all
    steps:
    - checkout: self
    - checkout: REPO-A
    - checkout: REPO-B

    - task: CmdLine@2
      inputs:
        script: |
          echo "hello, world!"

考虑这两种情况:

场景 1 - 使用此管道

  • REPO-A 和 REPO-B 都有一个release/2024-1分支和一个 发布/2024-2 分支。在release/2024-1分支中进行了提交 在 REPO-A 中。这两个存储库均已通过release/2024-1分支进行签出。

场景 2 - 不适用于此管道

  • REPO-A 有一个release/2024-1 分支。 REPO-B 只有一个 MASTER 分支。 在 REPO-A 的 release/2024-1 分支中进行提交。 REPO-A 是 使用release/2024-1分支签出,但REPO-B没有 那个分支。结果:管道不会运行。

我们希望能够为 REPO-B 指定一个后备引用,以便它可以回退到该分支。如果使用 MASTER 指定后备引用,则 REPO-A 将使用 release/2024-1 分支,而 REPO-B 将使用 MASTER 分支。

今天可以实现吗?

注意!: 此管道已大大简化。实际上,还有更多的存储库,并且这些存储库在后续步骤中作为一个应用程序一起构建。

azure azure-devops azure-pipelines
1个回答
0
投票

是的,您可以根据源分支动态定义变量值,然后将该变量用作repo-B ref 值。这样它就可以退回到 repo-B 来结帐。

下面的示例 yaml:

trigger: none

# dynamically set the branch value, please change according to your real requirement
variables:
  ${{ if or( eq(variables['Build.SourceBranchName'], 'dev1'), contains(variables['Build.SourceBranch'], 'bugfix/') ) }}:
      branch: $(Build.SourceBranchName)
  ${{ else }}:
      branch: 'main'

pool:
  VMimage: Ubuntu-latest

resources:
  repositories: 
  - repository: repo-A
    name: 'wadetest1/test1'
    ref: $(Build.SourceBranch)
    type: git
    trigger:
      - bugfix/*
      - release/*
      - dev1
  - repository: repo-B
    name: 'wadetest1/test2'
    type: git
    ref: $(branch)              #<- use the dynamic variable here
    trigger:
      - dev1
steps:
  - checkout: self
  - checkout: repo-A 
  - checkout: repo-B

它将在

main
上检出后备分支
repo-B
,因为它没有release/test1 分支:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.