Jenkins声明式流水线并行步骤执行器

8
我正在将一个从multijob迁移到Jenkins Declarative pipeline job的任务。我无法在多个执行器上运行并行步骤。
例如,在下面的管道中,当我运行管道时,我只看到一个执行器被使用。
我想知道为什么只使用一个执行器。每个并行步骤的想法是调用一个make目标来构建一个docker镜像。
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()
  }
}

你是想在多个节点上执行这个步骤吗? - ANIL
好的,我正在尝试在同一个Jenkins主机上的两个不同执行器上运行两个并行步骤。实际用例中的sleep命令是两个docker构建命令。 - lorem
1个回答

10

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

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       
}

这会占用 Jenkins 上的两个执行器还是一个? - lorem
3
并行任务数量=执行器数量。 - ANIL
@puneeth 我已经更新了我的答案。我包含了另一个脚本,使用它可以在不使用任何插件的情况下为多个任务使用相同的工作区。 - ANIL
谢谢你的回答。我想知道哪种方案更高效。在第一种方案中,每个任务占用一个节点上的执行器,因此总共需要3个执行器。而在第二种方案中,两个任务都在主节点上的单个执行器上运行,因此总共只需要1个执行器。 - lorem
让我们在聊天中继续这个讨论 - ANIL
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接