在不调用代理的情况下跳过詹金斯管道中的一个阶段?

Tar*_*ron 2 jenkins jenkins-slave jenkins-pipeline

我们将jenkins管道dsl用于我们的职位描述。现在我们有了这样的东西:

pipeline {
  agent none 

  options {
    timestamps() 
  }

  environment { 
    //SOME ENV VARS
  }

  stages {
    // more stages
    stage('stage1'){
    when {
         expression { env.BRANCH_NAME == 'master' }
         }
    agent { label 'slave1' }
    steps{
       //doing stuff
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

构建过程中的一个阶段仅应在构建master分支时运行,您可以考虑部署作业或朝该方向进行的工作。问题是,我们带有特定标签的代理商资源有限。当我们建立其他分支时,该作业仍会调用slave1代理,然后在检查该分支不是主节点之后跳过该阶段。这很不好,因为当所有slave1代理都在处理master分支作业时,其他作业将不得不等待slave1代理可用,以检查它是否确实需要运行该阶段。

jenkins管道DSL是否有任何方法可以跳过该阶段而无需等待slave1代理确定分支?

小智 6

接受的答案中提供的方法有效,因为您没有在stage('stage1')中声明代理。而是在步骤中显式创建一个节点,因此在检查条件时不会创建代理。

这种方法可以使用,但会给您的Jenkinsfile添加不必要的复杂性。从Jenkins 管道插件版本1.2.6开始,实现此目的的正确方法是:

pipeline {
  agent none 
  stages {
    // more stages
    stage('stage1'){
      when {
        beforeAgent true
        branch 'master'
      }
      agent { label 'slave1' }
      steps { 
        // do stuff 
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

检查when标记文档中的语法和可用选项。