Jenkins声明性管道并行步骤执行程序

时间:2017-08-22 12:16:45

标签: jenkins jenkins-pipeline jenkins-declarative-pipeline

我正在将作业从multijob迁移到Jenkins Declarative管道作业。我无法在多个执行程序上运行并行步骤。

例如,在下面的管道中,我看到在运行管道时只使用了一个执行程序。

我想知道为什么只使用一个执行器。我们的想法是,每个并行步骤都会隐藏一个构建docker镜像的make目标。

pipeline {
  agent none
  stages {
    stage('build libraries') {
      agent { label 'master' }
      steps {
        parallel(
          "nodejs_lib": {
            dir(path: 'nodejs_lib') {
                sh 'sleep 110'
            }
          },
          "python_lib": {
            dir(path: 'python_lib') {
              sh 'sleep 100'
            }
          }
        )
      }
    }
  }
  options {
    ansiColor('gnome-terminal')
    buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '30'))
    timestamps()
  }
}

1 个答案:

答案 0 :(得分:4)

您可以尝试以下方式为管道作业执行并行任务执行:

def tasks = [:]

            tasks["TasK No.1"] = {
              stage ("TASK1"){    
                node('master') {  
                    sh '<docker_build_command_here>'
                }
              }
            }
            tasks["task No.2"] = {
              stage ("TASK2"){    
                node('master') {  
                    sh '<docker_build_command_here>'
                }
              }
            }
            tasks["task No.3"] = {
              stage ("TASK3"){    
                node('remote_node') {  
                    sh '<docker_build_command_here>'
                }
              }
            }

 parallel tasks       

如果要在单个节点上执行并行任务,并且还希望为这两个任务设置相同的工作空间,则可以采用以下方法:

node('master') { 

def tasks = [:]

                tasks["TasK No.1"] = {
                  stage ("TASK1"){    

                        sh '<docker_build_command_here>'
                  }
                }
                tasks["task No.2"] = {
                  stage ("TASK2"){    

                        sh '<docker_build_command_here>'
                  }
                }


     parallel tasks       
}