我在Jenkins中配置了BitBucket组织作业,该作业配置为每20分钟扫描整个组织,如果它在任何组织的存储库中识别出提交,则会触发自动构建。
有时,在某个时间更改了多个分支,这会导致Jenkins触发同一个项目的多个构建。
其中一个项目永远不应该允许并发构建,因为它使用在构建运行时被锁定的资源,这会导致其他分支,其中提交被推送但它们总是失败,因为它们的主资源被第一个实例锁定构建。
我了解Throttle Builds plugin并且它看起来非常适合自由式/管道作业,但在组织扫描的情况下,我无法在组织下的存储库中配置任何内容,只需组织本身,同样的适用于Hudson Locks and Latches plugin。
任何人都知道任何解决方案吗?
答案 0 :(得分:7)
我遇到了类似的问题,并希望确保我的multibranch管道的每个分支一次只能执行一个构建。这是我添加到管道脚本中的内容:
pipeline {
agent any
options {
disableConcurrentBuilds() //each branch has 1 job running at a time
}
...
...
}
https://jenkins.io/doc/book/pipeline/syntax/#options
[更新09/30/2017]
您可能还想查看lock
&声明管道的milestone
步骤。
<强>锁定强>
我们现在依赖于&#34;可锁定资源&#34;而不是试图限制使用该阶段的作业的并发构建数量。插件和锁定步骤来控制它。锁定步骤将并发性限制为单个构建,并且在指定并发性受限的位置时提供了更大的灵活性。
stage('Build') {
doSomething()
lock('myResource') {
echo "locked build"
}
}
<强>里程碑强>
里程碑步骤是替换最初用于舞台的功能的最后一个难题,并为处理作业的并发构建添加了更多控制。锁定步骤限制在管道的一部分中同时运行的构建数量,而里程碑步骤确保作业的旧构建不会覆盖较新的构建。
stage('Build') {
milestone()
echo "Building"
}
stage('Test') {
milestone()
echo "Testing"
}