Jenkins 管道脚本中需要基于条件的输入步骤
Need Condition based Input Step in Jenkins pipeline script
我在 jenkins 管道脚本中有三个阶段,即 (1) 预检查,(2) build-prod & (3) build-dr。
我在"build-dr"
阶段说明了手动触发的输入步骤
我的管道是基于条件的,即基于预检查阶段的用户参数。
条件1:"precheck" -> "build-prod"然后"build-dr"被执行。
条件 2:"precheck" 然后执行 "build-dr"(跳过 build-prod)。
我需要条件 1 中的输入步骤并且工作正常,但是不应为条件 2 执行输入步骤,即没有带有输入步骤的弹出消息。请让我知道我们如何在第 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'
}
}
}
}
请多多指教。
您目前正在使用 here but this prevents you to make this input conditional. You actually have to use the 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'
}
}
}
}
我在 jenkins 管道脚本中有三个阶段,即 (1) 预检查,(2) build-prod & (3) build-dr。
我在"build-dr"
阶段说明了手动触发的输入步骤我的管道是基于条件的,即基于预检查阶段的用户参数。
条件1:"precheck" -> "build-prod"然后"build-dr"被执行。
条件 2:"precheck" 然后执行 "build-dr"(跳过 build-prod)。
我需要条件 1 中的输入步骤并且工作正常,但是不应为条件 2 执行输入步骤,即没有带有输入步骤的弹出消息。请让我知道我们如何在第 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'
}
}
}
}
请多多指教。
您目前正在使用 here but this prevents you to make this input conditional. You actually have to use the 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'
}
}
}
}