在不调用代理的情况下跳过詹金斯管道中的一个阶段?
Skipping a stage in jenkins pipeline without invoking agent?
我们使用 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
}
}
}
构建过程中的一个阶段,应该只 运行 当构建 master 分支时,您可以考虑部署作业或那个方向的东西。问题是,我们拥有该特定标签的代理商资源有限。当我们构建其他分支时,作业仍然调用 slave1 代理,并且在检查分支不是主分支后跳过该阶段。这很糟糕,因为当所有 slave1 代理都在处理 master 分支作业时,其他作业将不得不等待 slave1 代理变得可用,只是为了检查它是否需要 运行 那个阶段。
jenkins 管道 DSL 是否有任何方法可以跳过该阶段而不等待 slave1 代理确定分支?
我找到了适合我的解决方案。虽然我不太清楚为什么。
然而,引入并行部分并使用节点解决了这个问题,并且在不首先调用代理的情况下跳过了这些阶段。查看修改后的管道:
pipeline {
agent none
options {
timestamps()
}
environment {
//SOME ENV VARS
}
stages {
// more stages
stage('stage1'){
when { branch 'master' }
steps{
parallel(
'Job1': {
node( 'slave1' ){
//doing stuff
}
}
)
}
}
}
接受的答案中提供的方法有效,因为您没有在阶段中声明代理('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
}
}
}
}
检查 when tag documentation 中可用的语法和可用选项。
我们使用 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
}
}
}
构建过程中的一个阶段,应该只 运行 当构建 master 分支时,您可以考虑部署作业或那个方向的东西。问题是,我们拥有该特定标签的代理商资源有限。当我们构建其他分支时,作业仍然调用 slave1 代理,并且在检查分支不是主分支后跳过该阶段。这很糟糕,因为当所有 slave1 代理都在处理 master 分支作业时,其他作业将不得不等待 slave1 代理变得可用,只是为了检查它是否需要 运行 那个阶段。
jenkins 管道 DSL 是否有任何方法可以跳过该阶段而不等待 slave1 代理确定分支?
我找到了适合我的解决方案。虽然我不太清楚为什么。 然而,引入并行部分并使用节点解决了这个问题,并且在不首先调用代理的情况下跳过了这些阶段。查看修改后的管道:
pipeline {
agent none
options {
timestamps()
}
environment {
//SOME ENV VARS
}
stages {
// more stages
stage('stage1'){
when { branch 'master' }
steps{
parallel(
'Job1': {
node( 'slave1' ){
//doing stuff
}
}
)
}
}
}
接受的答案中提供的方法有效,因为您没有在阶段中声明代理('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
}
}
}
}
检查 when tag documentation 中可用的语法和可用选项。