如何避免Jenkins多分支管道作业触发自身。

8
我希望我的Jenkins多分支管道作业避免触发自身。该作业会因为递增版本文件并将其检入源代码控制而进行提交,从而引起无限循环。
在常规作业中,我可以按照这些说明避免此循环(尽管这不是最干净的方法)。
这些说明对于多分支管道无效(没有“忽略来自某些用户的提交”选项)。在Jenkins多分支管道中,有没有任何方法可以防止自我触发的提交?

目前还没有一个明确的解决方案,但如果有帮助的话,我找到了两种方法可以使其工作。首先,我可以通过将“属性策略”更改为“命名分支获取不同属性”,然后在“添加属性”下选择“抑制自动SCM触发”来禁用一组分支上的自动构建。其次,我能够配置Bitbucket以抑制某些用户的推送通知。通过这样做,我可以抑制构建服务器用户的构建,这是我链接文章中使用的相同方法。但是,我不知道其他存储库是否支持此功能。 - Pace
可能是Jenkins多分支管道扫描无限重建的重复问题。 - Pace
1个回答

9

使用GIT时的一种解决方法:

更新版本并提交时,在提交日志中使用一个特定的信息,如:[git-version-bump] - Bumping the version

在检出源代码管理器后,检查最后一次提交是否是更新版本的提交,如果是,终止任务。

stage('Checkout') {
    checkout scm
    if (lastCommitIsBumpCommit()) {
        currentBuild.result = 'ABORTED'
        error('Last commit bumped the version, aborting the build to prevent a loop.')
    } else {
        echo('Last commit is not a bump commit, job continues as normal.')
    }
}

private boolean lastCommitIsBumpCommit() {
    lastCommit = sh([script: 'git log -1', returnStdout: true])
    if (lastCommit.contains("[git-version-bump]")) {
        return true
    } else {
        return false
    }
}

1
这是我所做的,但它会引入与我的Git服务器集成(Bitbucket)有关的问题。版本升级的构建仍然“运行”,因此在Bitbucket中显示的“构建状态”徽章引用的是“最新”的构建,而不是实际执行某些操作的构建。真的需要一种方式来完全阻止管道运行。 - FGreg
我做了同样的事情,但使用result = 'NOT_BUILT',因为我认为从语义上讲这更合适。另请参阅:https://javadoc.jenkins-ci.org/hudson/model/Result.html - ken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接