我有一个 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: git@bitbucket.org:project-a.git
branches: 'release/.*'
- name: config
type: git-multibranch
source:
uri: git@bitbucket.org:project-b.git
branches: 'release/.*'
jobs:
- name: build
plan:
- get: code
version: latest
trigger: true
- get: config
version: every
trigger: true
# ... more stuff
到目前为止,我发现的唯一稳定的工作解决方案是将分支名称保持为变量,并在每次需要使用fly set-pipeline
(或使用 Vault,但这更复杂)处理版本 1.2.3 或 2.3.4 时切换它。
或者,我可以创建两个 (3, 4, N) 管道,一个用于我拥有的每个发布版本。然而,与其他 CI/CD 引擎所能达到的效果相比,我发现这两个选项到目前为止都不能令人满意。
总的来说,感觉就像我错过了 Concourse 的一些基本概念,可以在这里用来实现一个简单的目标,即检查两个具有相同名称分支的 repos,所以我非常感谢任何帮助。