如何限制并行运行的某些管道的数量?

时间:2018-05-29 07:17:10

标签: jenkins jenkins-pipeline

我想允许并行运行以下管道,但由于资源有限,我必须限制并行运行的最大数量。

pipeline {

  agent { label "$JENKINS_AGENT" }
  parameters { .. }
  options { .. }

  stages {
    stage('Checkout') { .. }
    stage('Config') { .. }
    stage('Deploy') { .. }
    stage('Test') { .. }
  }

  post {
    failure { .. }
    success { .. }
    always {
      cleanup()
    }
  }
}

例如,如果我只限于3次部署,我怎么能实现这个目标呢?

编辑:我已将以下内容添加到我的jenkins文件中。似乎工作,但我不确定这是否是正确的方法。 (使用Throttle Concurrent Builds Plugin

properties([
  [
    $class: 'ThrottleJobProperty',
    categories: ['parallel_pipeline'],
    limitOneJobWithMatchingParams: false,
    maxConcurrentPerNode: 3,
    maxConcurrentTotal: 3,
    paramsToUseForLimit: '',
    throttleEnabled: true,
    throttleOption: 'project'
  ],
])

2 个答案:

答案 0 :(得分:2)

您可能会发现这些插件很有用:

  1. Throttle Concurrent Builds Plugin
  2. Lockable Resources Plugin

答案 1 :(得分:0)

严格来说,目前尚不可能。有open ticket in the Jenkins JIRA对此功能有要求。

您可以通过一些技巧解决此问题。在链接的JIRA问题中,有两种变通方法,其中包括创建伪信号量,以便锁定各个线程,直到伪信号量释放为止。

在特定的用例中,我能够处理此问题的另一种方法是确保parallel步骤的每个分支都包裹在stage块中。由于一个阶段一次锁定一个执行器,这意味着您将运行与可用执行器插槽一样多的分支,然后其他分支将等待,直到执行器插槽可用以继续执行。但是,这并不总是有效的-例如,您可能有理由不将每个分支都设为独立阶段。