Jenkinsfile:在 post 条件块中请求输入

Jenkinsfile: Ask for input in a post condition block

我希望我的 Jenkins 部署管道

  1. 尝试 shell 命令,
  2. 如果该命令失败,请提供输入步骤,然后
  3. 重试命令并在“确定”时继续管道。

这是我尝试这样做的(开始)。

    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

是否有更好的方法来实现我想要的结果?

根据documentation

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] 的结果 并失败 。有一种方法可以改变这种行为,但我不会把这个解决方案称为任何干净的。