在 Concourse 中,是否可以在 Web UI 或 fly CLI 中以交互方式 select 一个 git 资源分支?
In Concourse, is it possible AT ALL to select a git resource branch interactively in web UI or fly CLI?
F.e。通常你使用“develop”,但今天你想使用“patchXYZ”......在不改变管道的情况下,有没有办法提示用户输入分支名称?
如果不是,对于这个流程,Concourse 的最佳实践是什么?
您不能从网络更改分支名称 UI 我认为这实际上是个好主意,管道应始终代表相同的分支。
我的建议是为给定项目使用两种类型的管道:
- 主管道。它有一个规范的名称,例如
projectA-main
,并且它遵循 repo 的主要分支(main、master、develop,...)。它是长寿的。
- 每个功能分支一个管道。这是短暂的。按照您的示例,它的名称可能类似于
projectA-patchXYZ
.
我们现在需要一种方法来避免手动维护不同管道的痛苦(和错误)。这实际上很容易做到,使用 Concourse ((vars))
(参见 documentation)。
您仍然只有一个管道文件,但使用这些 ((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
(请参阅 -y
的 fly 文档)。
一旦完成,你应该记得销毁那个分支管道,否则它们会堆积起来,消耗资源。
或者您可以不断重置相同的分支管道,有效地获得您想要的。在这种情况下,管道名称应保持不变,类似于
$ BRANCH=$(git branch --show-current) \
fly -t ci set-pipeline \
-p projectA-branch -c ... \
-y branch=$BRANCH
最后说明:当给定项目有多个管道时,还必须考虑副作用:管道外可见的影响。
经典示例是将工件推送到 S3。两条管道(主要和分支)会将东西放在同一个地方,这可能不是你想要的。
在这种情况下,可以在 S3 资源的正则表达式中使用相同的 ((branch))
技巧。
您可以在 marco-m/concourse-pipelines and you might find useful my marco-m/concourse-in-a-box 查看我的示例管道,这是一个基于 Docker Compose 的一体式 Concourse CI/CD 系统,具有 Minio S3 兼容存储和HashiCorp Vault 秘密经理。这使您能够在一个简单而完整的环境中从头开始学习 Concourse 管道。
F.e。通常你使用“develop”,但今天你想使用“patchXYZ”......在不改变管道的情况下,有没有办法提示用户输入分支名称? 如果不是,对于这个流程,Concourse 的最佳实践是什么?
您不能从网络更改分支名称 UI 我认为这实际上是个好主意,管道应始终代表相同的分支。
我的建议是为给定项目使用两种类型的管道:
- 主管道。它有一个规范的名称,例如
projectA-main
,并且它遵循 repo 的主要分支(main、master、develop,...)。它是长寿的。 - 每个功能分支一个管道。这是短暂的。按照您的示例,它的名称可能类似于
projectA-patchXYZ
.
我们现在需要一种方法来避免手动维护不同管道的痛苦(和错误)。这实际上很容易做到,使用 Concourse ((vars))
(参见 documentation)。
您仍然只有一个管道文件,但使用这些 ((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
(请参阅 -y
的 fly 文档)。
一旦完成,你应该记得销毁那个分支管道,否则它们会堆积起来,消耗资源。
或者您可以不断重置相同的分支管道,有效地获得您想要的。在这种情况下,管道名称应保持不变,类似于
$ BRANCH=$(git branch --show-current) \
fly -t ci set-pipeline \
-p projectA-branch -c ... \
-y branch=$BRANCH
最后说明:当给定项目有多个管道时,还必须考虑副作用:管道外可见的影响。
经典示例是将工件推送到 S3。两条管道(主要和分支)会将东西放在同一个地方,这可能不是你想要的。
在这种情况下,可以在 S3 资源的正则表达式中使用相同的 ((branch))
技巧。
您可以在 marco-m/concourse-pipelines and you might find useful my marco-m/concourse-in-a-box 查看我的示例管道,这是一个基于 Docker Compose 的一体式 Concourse CI/CD 系统,具有 Minio S3 兼容存储和HashiCorp Vault 秘密经理。这使您能够在一个简单而完整的环境中从头开始学习 Concourse 管道。