0

我有一个 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,所以我非常感谢任何帮助。

4

1 回答 1

1

我不相信有任何开箱即用的东西可以为您实现这一目标。如果我处于类似的位置,我可能会使用相同的管道配置文件在 Concourse 中设置两个管道,使用占位符作为分支名称,并将这些占位符的值放在两个单独的变量文件中。

于 2020-05-15T12:58:34.653 回答