【问题标题】:Skipping a stage in jenkins pipeline without invoking agent?在不调用代理的情况下跳过詹金斯管道中的一个阶段?
【发布时间】:2017-08-04 06:36:41
【问题描述】:

我们使用 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
    }
  }
}

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

jenkins 管道 DSL 有什么方法可以跳过该阶段而不等待 slave1 代理确定分支?

【问题讨论】:

  • 您是否在管道的顶层声明了agent none,即之前您的stages
  • 是的,我有。见编辑
  • 这是多分支管道吗?如果是这样,请尝试使用when { branch 'master' } condition
  • 感谢您的提示,我试过了,但不幸的是它具有相同的行为。但它更具可读性,所以我会坚持下去。

标签: jenkins jenkins-pipeline jenkins-slave


【解决方案1】:

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

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

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

检查when tag documentation 中可用的语法和可用选项。

【讨论】:

  • 感谢您的更新。我会改变的。但是 beforeAgent 是在 2018 年 1 月 12 日与管道插件版本 1.2.6 一起引入的,所以当我提出问题或找到解决方案时它不可用。
  • 没问题,我也是 jenkinsfile 的新手,并不清楚何时引入此功能。我最近在为我的一个项目创建 jenkinsfile 时发现了这一点。 :)
【解决方案2】:

我找到了适合我的解决方案。虽然我不太清楚为什么。 然而,引入并行部分并使用节点解决了问题,并且在不首先调用代理的情况下跳过了这些阶段。查看修改后的管道:

pipeline {
  agent none 

  options {
   timestamps() 
  }

  environment { 
    //SOME ENV VARS
  }

  stages {
    // more stages
    stage('stage1'){
    when { branch 'master' }
    steps{
      parallel(
        'Job1': {
           node( 'slave1' ){
             //doing stuff
           }
        }
      )
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-06
    • 2016-10-08
    • 2018-12-06
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多