如何有条件地执行Concourse任务?

时间:2019-04-25 19:05:18

标签: concourse concourse-git-resource

我正在修改继承的主题脚本。

我们有一个看起来像这样的管道:

[1]build - [2]test A - [3]test B - [4]publish - [5]deploy

我们的团队以前只与master分支合作,但现在我们正在使用功能分支。

我对build step进行了修改,使其可以在每个分支上运行-不仅是master。但是我希望publish step仅针对master分支版本运行

如何使step 5仅在为主分支运行时运行step 1?在Concourse上有这样做的方法吗?

1 个答案:

答案 0 :(得分:0)

如果同一管道构建了所有分支,则说明您不使用git资源或使用支持多个分支的修改后的git资源。

我假设您所说的“步骤” 1 ... 5是Concourse工作。

我可以看到两个选择。

  • 选项1.简单但肮脏/误导。

在步骤4和5的开始,检查git分支。如果不是高手,请立即返回成功。管道将保持绿色,并且发布和部署作业看起来像已经运行,而实际上却什么也没做。

  • 选项2。稍微复杂一点,但是正确的方法。

使用两个管道。除master以外的所有分支的一条管道。该管道将​​仅包含步骤1 ...3。第二个管道将跟踪master分支并具有所有步骤1 ... 5。

现在的问题是如何以DRY方式管理这两个管道(没有代码重复,管道不可能彼此漂移)?

答案是使用https://github.com/geofffranks/spruce之类的YAML合并工具。自述文件提到了BOSH,但这是一个完全通用的YAML合并工具。

最后一部分是如何保持DRY并同时指定不同的分支。可以使用https://concourse-ci.org/setting-pipelines.html#pipeline-vars获得。