在一个jenkins工作中,我们希望跟踪多个分支,并在其中任何分支发生变化时仅触发一次。那可能吗?
问题是,我们必须为每个分支连续运行一堆作业,它们不应该干扰。我们想要实现的目标是:
[changes on any branch] -> checkout master -> job1 -> job2 -> job3 -> checkout release -> job1 -> job2 -> job3
当前行为是,为每个已更改的分支触发作业。所以,如果构建管道'由于主人的变化而被触发,可能会因释放的变化而再次触发:
[changes on master] -> checkout master -> job1 -> ... -> checkout release -> ...
[changes on release] -> checkout master -> job1 -> ... -> checkout release -> ...
另一个(甚至更好)选项是,定期启动一个作业,只为每个分支做构建,如果它有变化:
for each branch do
if branch has changes then
job1
job2
...
答案 0 :(得分:0)
与此同时,我自己想出了一个解决方案。
现在,有一个作业定期运行以执行git fetch
,将输出传输到文件并检查给定分支列表中的任何更改。
git fetch -v --dry-run > NUL 2> git-fetch.log
如果是这种情况,则会触发每个分支都有一个“主”作业的作业链。这些还检查以前保存的输出以查找特定分支中的更改,并可能触发子作业列表。之后,他们运行所有子作业(或在没有任何改变时跳过它们)。
看起来像这样:
- job1
git fetch
if changes in any branch then trigger job-master
- job-master
if changes in master then trigger 'sub-jobs'
trigger job-feature1
- job-feature1
if changes in feature1 then trigger 'sub-jobs'
trigger feature2
- job-feature2
if changes in feature2 then trigger 'sub-jobs'
...