我在jenkins管道脚本中分为三个阶段,即(1)预检查,(2)build-prod和(3)build-dr。
我已经在“ build-dr”阶段说明了手动触发的输入步骤
我的管道基于条件,即在预检查阶段基于用户参数。
条件1:先执行“ precheck”->“ build-prod”,然后再执行“ build-dr”。
条件2:先执行“ precheck”,然后执行“ build-dr”(跳过build-prod)。
我需要Condition1中的输入步骤,并且工作正常,但是不应为Condition2执行输入步骤,即没有带输入步骤的弹出消息。请让我知道如何在阶段3 build-dr的输入步骤周围放置一个条件,以便在pipleline跳过(2)build-prod时不执行输入步骤。
Jenkins管道脚本代码:
agent any
stages {
stage ("Pre-Check Parameters") {
steps {
echo "Pre-Check called in pipeline"
}
}
stage ("build-prod") {
when {
expression { params.region == 'prod_only' || params.region == 'prod_and_dr' }
}
steps {
build 'job4'
}
}
stage ("build-dr") {
input{
message "Proceed or Abort"
submitter "user1,admin"
parameters {
string(name:'username', defaultValue: 'user1', description: 'Username of the user pressing Ok')
}
}
when {
expression { params.region == 'dr_only' || params.region == 'prod_and_dr'}
}
steps {
build 'job5'
}
}
}
}
请提出建议。
答案 0 :(得分:1)
您当前正在使用here中所述的输入指令,但这会阻止您将此输入作为条件输入。实际上,您必须使用Input Step。无需将输入字段直接添加到stage
指令下面,而是将其移到阶段的steps
块中并在其周围添加一个script
块以使用if / else条件。
请注意删除输入步骤周围的花括号,并在每个属性后添加一个冒号。
您现在要做的是使此行适应您的要求:
if(Condition1 == true)
取决于参数的值。
stage("build-dr") {
when {
expression { params.region == 'dr_only' || params.region == 'prod_and_dr'}
}
steps {
script {
if(Condition1 == true) {
input message: "Proceed or Abort", submitter: "user1,admin",
parameters: [string(name:'username', defaultValue: 'user1', description: 'Username of the user pressing Ok')]
}
}
build 'job5'
}
}
或者,如果要执行第二阶段,则可以使用环境声明块来声明变量并为其分配特定的值。但是,任何环境值都将始终键入为String
,这对于if / else条件很重要。给变量赋值的一种好方法是在第二阶段添加一个post
部分。
pipeline {
agent any
environment {
STAGE_2_EXECUTED = "0"
}
stages{
stage("....") {
steps {
....
}
}
stage("Second stage") {
when {
expression { /* Your condition */ }
}
steps {
....
}
post {
always {
script {
STAGE_2_EXECUTED = "1";
}
}
}
}
stage("Third Stage") {
steps {
script {
if(STAGE_2_EXECUTED == "1") {
input message: "Proceed or Abort", submitter: "user1,admin",
parameters: [string(name:'username', defaultValue: 'user1', description: 'Username of the user pressing Ok')]
}
}
build 'job5'
}
}
}
}