使用声明性语法在不同节点上运行 Jenkins 并行阶段

noi*_*eed 3 parallel-processing distributed jenkins jenkins-pipeline

设法在同一节点上成功并行运行集成测试,现在我想将它们分布在不同的节点上。在下面的示例中,我希望阶段IT 1IT 2在不同节点上运行,而IT 3在原始节点上运行。通过使用node作为父级stage('IT 1')node子级尝试了几种组合,但两者都出现语法错误。实现此目的的正确语法是什么?

pipeline {

  agent { label '!master' }

  stages {
    stage('Integration Tests') {
      parallel {
        stage('IT 1 (slow)') {
          steps {
            sh 'run-it-1.sh'
          }
        }
        stage('IT 2 (slow)') {
          steps {
            sh 'run-it-2.sh'
          }
        }
        stage('IT 3 (quick)') {
          steps {
            sh 'run-it-3.sh'
          }
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:使用label而不是node声明性管道的作品。下面的例子:

stage('IT 1 (slow)') {
  agent { label '!master' }
  steps {
    sh 'run-it-1.sh'
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

从 Declarative 版本 1.2 开始,您可以直接声明每个并行阶段要使用的代理类型:https ://jenkins.io/blog/2017/09/25/declarative-1/

未测试此特定用例,但我假设如果您没有为阶段“IT 3”声明任何代理,它将在原始节点上执行。{}

希望它有帮助。