运维开发网

jenkins – 如何在bitbucket组织工作方式中防止同一存储库中不同分支的并发构建?

运维开发网 https://www.qedev.com 2020-05-10 14:41 出处:网络 作者:运维开发网整理
我在我的Jenkins中配置了一个BitBucket组织作业,它被配置为每20分钟扫描整个组织,如果它在组织的任何存储库中识别出提交,则会触发自动构建. 有时,在某个时间更改了多个分支,这会导致Jenkins触发同一个项目的多个构建. 其中一个项目永远不应该允许并发构建,因为它使用在构建运行时被锁定的资源,这会导致其他分支,其中提交被推送但是它们总是失败,因为它们的主要资源被构建的第一个实例锁定.
我在我的Jenkins中配置了一个BitBucket组织作业,它被配置为每20分钟扫描整个组织,如果它在组织的任何存储库中识别出提交,则会触发自动构建.

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

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

我知道Throttle Builds plugin,它看起来非常适合自由式/管道工作,但在组织扫描的情况下,我无法在组织下的存储库中配置任何东西,只有组织本身,Hudson Locks and Latches plugin也是如此.

谁知道任何解决方案?

我有类似的问题,并希望确保我的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步骤.

Rather than attempt to limit the number of concurrent builds of a job using the stage, we now rely on the “Lockable Resources” plugin and the lock step to control this. The lock step limits concurrency to a single build and it provides much greater flexibility in designating where the concurrency is limited.

stage('Build') {
  doSomething()
  lock('myResource') {
    echo "locked build"
  }
}

里程碑

The milestone step is the last piece of the puzzle to replace functionality originally intended for stage and adds even more control for handling concurrent builds of a job. The lock step limits the number of builds running concurrently in a section of your Pipeline while the milestone step ensures that older builds of a job will not overwrite a newer build.

stage('Build') {
  milestone()
  echo "Building"
}
stage('Test') {
  milestone()
  echo "Testing"
}

> https://jenkins.io/blog/2016/10/16/stage-lock-milestone/

> https://jenkins.io/doc/pipeline/steps/pipeline-milestone-step/

> https://jenkins.io/doc/pipeline/steps/lockable-resources/

0

精彩评论

暂无评论...
验证码 换一张
取 消