You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线交互input步骤点击中止按钮返回null值问题

Jenkins流水线input步骤Abort时无法获取评论的解决方案

问题根因

Jenkins input 步骤的逻辑是:仅当审批人点击 Proceed 按钮时,才会正常返回配置的参数值,执行env.cmnt = input(...)的赋值操作;如果点击 Abort 按钮,input 步骤会直接抛出FlowInterruptedException中断流水线,赋值逻辑完全不会执行,所以aborted分支读取到的env.cmnt自然为null。

修复方案

用try-catch块包裹input步骤,捕获中断异常后从异常对象中提取用户输入的评论,赋值给环境变量后重新抛出异常即可,异常对象内置了审批人在弹窗中填写的所有参数,修改后的完整流水线代码如下:

pipeline {
    agent any
    stages {
        stage("Approval") {
            steps {
                script {
                    try {
                        // 正常通过时赋值
                        env.cmnt = input(
                                message: 'Do you want to approve the pipeline?',
                                parameters: [
                                        text(defaultValue: '',
                                                description: 'Enter your comment...',
                                                name: 'COMMENT')
                                ])
                    } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
                        // 中止时从异常中提取参数赋值
                        env.cmnt = e.getParameters()?.COMMENT ?: ''
                        // 重新抛出异常保证流水线进入aborted状态
                        throw e
                    }
                }
            }
        }
    }
    post{
        success{
            emailext (
                subject: "Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' is approved.",
                body: """<p>APPROVER COMMENT:  '${env.cmnt}'</p>""",
                recipientProviders: [[$class: 'DevelopersRecipientProvider']]
            )
        }
        aborted{
            emailext (
                subject: "Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' is aborted by approver",
                body: """<p>APPROVER COMMENT:  '${env.cmnt}'</p>""",
                recipientProviders: [[$class: 'DevelopersRecipientProvider']]
            )
        }
    }
}

验证说明

修改后无论点击Proceed还是Abort,env.cmnt都会完成赋值,post阶段的两个分支都可以正常读取到审批人输入的评论内容,?: ''的空值处理逻辑可以避免审批人未填写评论时出现空值异常。


内容的提问来源于stack exchange,提问作者Prashant Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:54:00