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

Jenkins流水线跨阶段传值时choice参数选项为空问题排查

问题根因

Jenkins声明式流水线中,直接定义在stage顶层的input配置块属于静态解析范畴:流水线启动时就会提前解析所有stage的结构、渲染input参数的默认配置,这个解析动作发生在所有stage的业务逻辑执行之前。
你定义的projectsString初始值是空字符串,这个初始值会在流水线启动解析debug2阶段的input配置时,直接被读取作为choice参数的选项列表。后续debug阶段修改变量值的逻辑是运行时才执行的,此时input的参数配置早就渲染完成,不会再同步更新变量的最新值,所以最终选项列表为空。
另外你代码里的选项分隔符写法有误:当前拼接的是\\n(反斜杠字符加字母n),而choice参数需要用\n(换行符)分隔不同选项,就算变量能正常传值,所有选项也会挤在同一行无法正常识别。

修复方案

不要使用stage顶层的静态input块,把input逻辑移到stage的steps -> script块内,用方法调用的形式执行input步骤。这时候input会在代码运行到对应位置时才渲染参数,能正确读取前序阶段赋值完成的projectsString变量。
修正后的可运行代码如下:

def projectsString = ''

pipeline {
    agent any
    stages {
        stage('debug') {
            when {
                branch 'master'
            }
            steps {
                script {
                    def files = findFiles()
                    files.each { f ->
                        if (f.directory) {
                            // 修正换行符写法,用\n作为选项分隔符
                            projectsString = projectsString + f.name + "\n"
                            echo projectsString
                        }
                    }
                }
            }
        }

        stage('debug2') {
            when {
                branch 'master'
            }
            steps {
                script {
                    // 运行时执行input,此时projectsString已完成赋值
                    def selectedValue = input(
                        message: "Choose",
                        ok: "Submit",
                        parameters: [
                            choice(
                                name: 'CHOICES',
                                choices: projectsString,
                                description: 'Please Select One'
                            )
                        ]
                    )
                    echo "Selected choice is : ${selectedValue}"
                }
            }
        }
    }
}

额外注意:如果工作目录下不存在子文件夹,projectsString会是空值,直接传给choice参数会触发参数校验错误,建议在执行input前加一层判断,比如无匹配目录时提前终止构建或者追加默认选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:27:23