【发布时间】: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