Jenkins声明性管道:如何在when指令上输入前后等待
在我的Jenkins文件中,我有两个阶段:预直播和直播。我在stage Pre-Live上向用户请求输入,以了解是否应将部署部署到Pre-Live环境,然后在stage-Live上,我再次向用户请求输入,以了解是否应将部署到Live环境 我设法实现了这一点。下面是代码的外观:Jenkins声明性管道:如何在when指令上输入前后等待,jenkins,jenkins-pipeline,jenkins-declarative-pipeline,Jenkins,Jenkins Pipeline,Jenkins Declarative Pipeline,在我的Jenkins文件中,我有两个阶段:预直播和直播。我在stage Pre-Live上向用户请求输入,以了解是否应将部署部署到Pre-Live环境,然后在stage-Live上,我再次向用户请求输入,以了解是否应将部署到Live环境 我设法实现了这一点。下面是代码的外观: stage("Pre Live") { input { message 'Deploy to Pre Live?' parameters { booleanParam(name: 'RELE
stage("Pre Live") {
input {
message 'Deploy to Pre Live?'
parameters {
booleanParam(name: 'RELEASE_PRE_LIVE', defaultValue: false)
}
}
when {
beforeInput false
expression {
return RELEASE_PRE_LIVE.toBoolean()
}
}
steps {
// ...
}
}
stage("Live") {
input {
message 'Deploy to Live?'
parameters {
booleanParam(name: 'RELEASE_LIVE', defaultValue: false)
}
}
when {
beforeInput false
expression {
return RELEASE_LIVE.toBoolean()
}
}
steps {
// ...
}
}
然而,我不能做的是,太过保留所有这些逻辑,而且如果前一个阶段(Pre-Live)已经执行,那么也只能在阶段现场请求输入。通常,这可以通过Live阶段中的
when
指令完成,但问题是我需要该阶段中的when
指令在输入后进行评估,因为我需要输入值来知道用户是否要部署Live,但是,如果Pre-Live从未运行过,我也不想在这个阶段不必要地等待输入,因为这没有意义。您是否考虑过使用构建步骤触发另一个管道,并将管道拆分为两个管道而不是一个管道
下面是一篇关于声明性管道语法的示例文章:
我相信您可以通过设置一个变量,然后将变量从预激活阶段传递到激活阶段,来实现额外的检查。然后在现场阶段作用于该变量
你们已经把下一部分写下来了,但我认为这对于上下文来说是很好的
在输入指令之前进行评估
默认情况下,如果定义了阶段的when条件,则不会在输入之前对其进行计算。但是,这可以通过在when块中指定beforeInput选项来更改。如果beforeInput设置为true,则将首先计算when条件,并且仅当when条件计算为true时才会输入
beforeInput true优先于beforeAgent true
发件人:我不建议这样做。为什么要使两条管道复杂化并进行维护?这将解决问题。连接管道确实是分离复杂建筑过程的便捷方法。我知道这一点。问题是,如果我在输入
之前计算when
指令,那么我将无法使用输入
作为执行活动阶段的条件。@TiagoSilva如果可以有两个when{}块,那不是很好吗?一个在输入之前计算,另一个在输入之后计算?PS-我一直认为使用脚本化管道解决这个问题要简单得多。我对声明性语句不太熟悉。@TiagoSilva同样,您可以在Live stagewhen
指令中的Pre-LivehasExecuted
中设置一个变量,并在{allOf{expression1;hasExecuted==true}}中使用when
指令