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

如何在Jenkins构建作业中使用Bash变量并传递给下游任务

问题根因

你在sh步骤的单引号包裹脚本中定义的nombre是Bash子进程的内部局部变量,Jenkins的全局env变量集不会自动捕获独立shell进程内的普通变量:这类变量的生命周期仅存在于当前sh步骤的执行窗口内,步骤执行完成、子进程销毁后变量就会被回收,跨步骤、跨阶段自然无法读取,你直接访问env.nombre会拿到null值直接报错。
你之前尝试的environment块赋值写法也不生效:environment块的赋值逻辑是Pipeline启动初始化阶段就执行的,此时PART1阶段的shell脚本还没运行,env.nombre本身就是空值,自然拿不到结果。

可用解决方案

方案1:单变量场景直接捕获sh输出(最简洁)

如果只需要传递单个变量,直接给sh步骤加returnStdout: true参数,把shell命令的标准输出捕获后直接赋值给env下的变量,全Pipeline任意阶段都可以访问:

stages{
    stage('PART1'){
        steps{
            cleanWs()
            git credentialsId: 'ssh-git-access', url: 'git@bitbucket.org:XXXX/XXXXX.git'
            script {
                // .trim()用于去掉cat命令输出末尾自带的换行符,避免传参时带多余空白
                env.nombre = sh(
                    script: 'cat /home/user/nombre.txt',
                    returnStdout: true
                ).trim()
                // 此处验证输出即可看到HELLO
                echo env.nombre
            }   
        }     
    }
    stage('PART2'){
        steps{
            echo env.nombre
            build job: 'JOB_2', parameters: [string(name: 'nombre', value: env.nombre)]
        }
    }
}

修改后PART2阶段的原有逻辑不需要调整,直接读取、下游传参都能正常拿到值。

方案2:多变量场景通过属性文件导入

如果同一个shell步骤里需要生成多个要透传给Jenkins上下文的变量,可以把变量按key=value格式写入属性文件,再通过步骤加载到环境变量中:

script {
    sh '''
    nombre=$(cat /home/user/nombre.txt)
    // 其他需要导出的变量也按相同格式写入文件,注意等号两侧不要加空格
    echo "nombre=${nombre}" > pipeline_env.props
    '''
    // 读取属性文件加载变量,依赖Pipeline Utility Steps插件(多数Jenkins环境默认预装)
    def envProps = readProperties file: 'pipeline_env.props'
    env.nombre = envProps.nombre
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:48:26