在跟踪多个分支时,只构建一次jenkins作业



在一个jenkins作业中,我们希望跟踪多个分支,并在其中任何分支发生更改时只触发一次。这可能吗?

问题是,我们必须为每个分支连续运行一堆作业,它们不应该干扰。例如,我们想要实现的是:

[changes on any branch] -> checkout master -> job1 -> job2 -> job3 -> checkout release -> job1 -> job2 -> job3

当前的行为是,每个发生更改的分支都会触发作业。因此,如果"构建管道"是因为master中的更改而被触发的,那么它可能会因为发布中的更改再次被触发:

[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
    ...

与此同时,我自己想出了一个解决方案。

现在,有一个作业定期运行,用于执行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'
        ...

最新更新