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

Jenkins 如何限制并行运行的某些管道的数量?,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我想允许并行运行以下管道,但由于资源有限,我必须限制并行运行的最大数量 pipeline { agent { label "$JENKINS_AGENT" } parameters { .. } options { .. } stages { stage('Checkout') { .. } stage('Config') { .. } stage('Deploy') { .. } stage('Test') { .. } } pos

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

pipeline {

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

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

  post {
    failure { .. }
    success { .. }
    always {
      cleanup()
    }
  }
}
例如,如果我仅限于3次部署,我如何实现这一点

编辑:我目前已将以下内容添加到我的Jenkins文件中。似乎有效,但我不确定这是不是正确的方法。(使用)


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


  • 严格地说,这在目前是不可能的。存在一个请求此功能的

    你可以通过一些黑客来绕过这个问题。在链接的JIRA问题中有两种变通方法,它们涉及创建伪信号量,以锁定各个线程,直到伪信号量释放为止


    我能够在特定用例中处理这个问题的另一种方法是确保
    并行
    步骤的每个分支都包装在
    阶段
    块中。由于一个阶段一次锁定一个执行器,这意味着您将运行尽可能多的分支(只要有可用的执行器插槽),然后其他分支将等待执行器插槽恢复执行。然而,这并不总是有效的——例如,您可能有理由不将每个分支作为一个独立的阶段。

    我忘了添加我添加的配置片段是用于节流并发构建插件的。下行投票是因为这两个插件都不能限制管道
    并行
    步骤的并发执行分支的数量-这些是用于限制在构建级别而不是管道步骤级别上的并发性。它们可能碰巧对OP起作用,因为OP在并行分支中运行Pipeline
    stage
    s,这在某些方面表现为独立构建。这些插件在通用管道
    parallel
    case中不起作用。
    properties([
      [
        $class: 'ThrottleJobProperty',
        categories: ['parallel_pipeline'],
        limitOneJobWithMatchingParams: false,
        maxConcurrentPerNode: 3,
        maxConcurrentTotal: 3,
        paramsToUseForLimit: '',
        throttleEnabled: true,
        throttleOption: 'project'
      ],
    ])