0

Fe 通常你使用“develop”,但今天你想使用“patchXYZ”......在不改变管道的情况下,有没有办法提示用户输入分支名称?如果不是,此流程的 Concourse 最佳实践是什么?

4

1 回答 1

1

您不能从 Web UI 更改分支名称,我认为这实际上是一个好主意,管道应该始终代表同一个分支。

我的建议是为给定项目提供两种类型的管道:

  1. 主管道。它有一个规范的名称,例如projectA-main,它遵循 repo 的主分支(main、master、develop,...)。它是长寿的。
  2. 每个功能分支的管道。这是短暂的。按照您的示例,它的名称可能类似于projectA-patchXYZ.

我们现在需要一种方法来避免手动维护不同管道的痛苦(和错误)。这实际上很容易做到,使用 Concourse ((vars))(参见文档)。

您仍然只有一个管道文件,但使用这些((vars)). 对于您的带有 git 分支名称的示例:

resources:
  - name: repo
    type: git
    icon: git
    source:
      uri: https://github.com/marco-m/concourse-pipelines.git
      branch: ((branch))

然后,您将使用 fly 设置管道,扩展该变量:

$ BRANCH=$(git branch --show-current) \
  fly -t ci set-pipeline \
    -p projectA-$BRANCH -c ... \
    -y branch=$BRANCH

(请参阅 fly 文档-y)。

完成后,您应该记住销毁该分支管道,否则它们会堆积起来,吞噬资源。

或者您可以继续重置相同的分支管道,从而有效地获得您想要的。在这种情况下,管道名称应该保持不变,例如

$ BRANCH=$(git branch --show-current) \
  fly -t ci set-pipeline \
    -p projectA-branch -c ... \
    -y branch=$BRANCH

最后一点:当给定项目有多个管道时,还必须考虑副作用:在管道之外可见的效果。

经典示例是将工件推送到 S3。两条管道(主管道和分支管道)会将内容放在同一个地方,这可能不是您想要的。

在这种情况下,((branch))可以在 S3 资源的正则表达式中使用相同的技巧。

您可以在marco-m/concourse-pipelines查看我的示例管道,您可能会发现我的marco-m/concourse-in-a-box很有用,这是一个基于 Docker Compose 的一体化 Concourse CI/CD 系统,具有与 Minio S3 兼容的存储和 HashiCorp Vault 机密管理器。这样可以在简单而完整的环境中从头开始学习 Concourse 管道。

于 2021-05-29T08:54:11.307 回答