Jenkinsfile:在 post 条件块中请求输入
Jenkinsfile: Ask for input in a post condition block
我希望我的 Jenkins 部署管道
- 尝试 shell 命令,
- 如果该命令失败,请提供输入步骤,然后
- 重试命令并在“确定”时继续管道。
这是我尝试这样做的(开始)。
stage('Get config') {
steps {
sh 'aws appconfig get-configuration [etc etc]'
}
post {
failure {
input {
message "There is no config deployed for this environment. Set it up in AWS and then continue."
ok "Continue"
}
steps {
sh 'aws appconfig get-configuration [etc etc]'
}
}
}
}
当运行直接在input
一个stage
时,这个例子确实显示了输入。但是,当把它放在 post { failure }
中时,我得到这个错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 27: Missing required parameter: "message" @ line 27, column 21.
input {
^
Jenkins 声明式管道是否允许 post
中的 input
?
是否有更好的方法来实现我想要的结果?
Post-condition blocks contain steps the same as the steps section.
这意味着您代码中的 input 被解释为步骤而不是指令。
使用脚本语法的解决方案(try/catch 也可以):
stage('Get config') {
steps {
script {
def isConfigOk = sh( script: 'aws appconfig get-configuration [etc etc]', returnStatus: true) == 0
if ( ! isConfigOk ) {
input (message: "There is no config deployed for this environment. Set it up in AWS and then continue.", ok: "Continue")
sh 'aws appconfig get-configuration [etc etc]'
}
}
}
}
使用 post 部分:
stage('Get config') {
steps {
sh 'aws appconfig get-configuration [etc etc]'
}
post {
failure {
input (message: "There is no config deployed for this environment. Set it up in AWS and then continue.", ok: "Continue")
sh 'aws appconfig get-configuration [etc etc]'
}
}
}
请记住,您使用 post 部分的方法将 忽略第二个 aws appconfig get-configuration [etc etc]
的结果 并失败 。有一种方法可以改变这种行为,但我不会把这个解决方案称为任何干净的。
我希望我的 Jenkins 部署管道
- 尝试 shell 命令,
- 如果该命令失败,请提供输入步骤,然后
- 重试命令并在“确定”时继续管道。
这是我尝试这样做的(开始)。
stage('Get config') {
steps {
sh 'aws appconfig get-configuration [etc etc]'
}
post {
failure {
input {
message "There is no config deployed for this environment. Set it up in AWS and then continue."
ok "Continue"
}
steps {
sh 'aws appconfig get-configuration [etc etc]'
}
}
}
}
当运行直接在input
一个stage
时,这个例子确实显示了输入。但是,当把它放在 post { failure }
中时,我得到这个错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 27: Missing required parameter: "message" @ line 27, column 21.
input {
^
Jenkins 声明式管道是否允许 post
中的 input
?
是否有更好的方法来实现我想要的结果?
Post-condition blocks contain steps the same as the steps section.
这意味着您代码中的 input 被解释为步骤而不是指令。
使用脚本语法的解决方案(try/catch 也可以):
stage('Get config') {
steps {
script {
def isConfigOk = sh( script: 'aws appconfig get-configuration [etc etc]', returnStatus: true) == 0
if ( ! isConfigOk ) {
input (message: "There is no config deployed for this environment. Set it up in AWS and then continue.", ok: "Continue")
sh 'aws appconfig get-configuration [etc etc]'
}
}
}
}
使用 post 部分:
stage('Get config') {
steps {
sh 'aws appconfig get-configuration [etc etc]'
}
post {
failure {
input (message: "There is no config deployed for this environment. Set it up in AWS and then continue.", ok: "Continue")
sh 'aws appconfig get-configuration [etc etc]'
}
}
}
请记住,您使用 post 部分的方法将 忽略第二个 aws appconfig get-configuration [etc etc]
的结果 并失败 。有一种方法可以改变这种行为,但我不会把这个解决方案称为任何干净的。