如何防止bitbucket组织工作风格中同一存储库中不同分支的并发构建?

时间:2017-06-21 07:50:25

标签: jenkins bitbucket jenkins-plugins jenkins-pipeline

我在Jenkins中配置了BitBucket组织作业,该作业配置为每20分钟扫描整个组织,如果它在任何组织的存储库中识别出提交,则会触发自动构建。

有时,在某个时间更改了多个分支,这会导致Jenkins触发同一个项目的多个构建。

其中一个项目永远不应该允许并发构建,因为它使用在构建运行时被锁定的资源,这会导致其他分支,其中提交被推送但它们总是失败,因为它们的主资源被第一个实例锁定构建。

我了解Throttle Builds plugin并且它看起来非常适合自由式/管道作业,但在组织扫描的情况下,我无法在组织下的存储库中配置任何内容,只需组织本身,同样的适用于Hudson Locks and Latches plugin

任何人都知道任何解决方案吗?

1 个答案:

答案 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"
}