我有一个Concourse CI流水线的设置,逻辑上依赖于两个独立的Git资源。
对于具体的需求,比方说,发布一个版本的 m.n.o
,管道需要同时检查出两个项目。重要的是,它需要参考相同的? release/m.n.o
中的两个分支。此外,我希望我的流水线能够通过更新项目A和B来触发,当然,也要满足分支名匹配的要求,例如,如果我更新了 project-a/release/1.2.3
我想让Concourse CI结账 project-b/release/1.2.3
而不是其他。值得一提的是,可能有多个 release/m.n.o
分支在两个项目中都是活跃的,即可以推送给 project-a/release/1.2.3
以便A & B v.1.2.3都能进入CI,然后推送给 project-b/release/2.3.4
所以A & B v.2.3.4都是由CI构建的。
resource_types:
- name: git-multibranch
type: docker-image
source:
repository: cfcommunity/git-multibranch-resource
resources:
- name: code
type: git-multibranch
source:
uri: [email protected]:project-a.git
branches: 'release/.*'
- name: config
type: git-multibranch
source:
uri: [email protected]:project-b.git
branches: 'release/.*'
jobs:
- name: build
plan:
- get: code
version: latest
trigger: true
- get: config
version: every
trigger: true
# ... more stuff
到目前为止,我找到的唯一稳定的工作方案是,将分支名作为一个变量,并在每次需要处理1.2.3或2.3.4版本时用 fly set-pipeline
(或者使用Vault,但那更复杂)。
另外,我也可以创建两个(3,4,N)管道,每个版本我都有一个。然而,我发现到目前为止,这两种方案与其他CICD引擎所能实现的相比,勉强令人满意。
总的来说,感觉我缺少了Concourse的一些基本概念,在这里可以用它来实现一个简单的目标,即检查具有相同名称分支的两个仓库,所以我真的很感激任何帮助。
我不相信有什么开箱即用的东西可以为你实现这个目标。如果我处于类似的位置,我可能会在Concourse中使用同一个管道配置文件来设置两个管道,使用分支名称的占位符,这些占位符的值在两个单独的变量文件中。