在跟踪多个分支时,只建立一次jenkins工作一次?

时间:2015-11-18 08:12:13

标签: git jenkins

在一个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
    ...

1 个答案:

答案 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'
        ...