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

如何在Jenkins Pipeline中实现Shell脚本向Groovy脚本传递值

解决方法

问题根源

Shell 进程和 Jenkins Groovy 运行环境是完全独立的两个进程,你在 Shell 脚本内部定义的code属于子进程局部变量,Shell 执行结束后变量就会销毁,无法直接赋值给外层 Groovy 中定义的code变量。

修复后代码

def code=""
pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                script{
                    try{
                        // 用returnStdout参数捕获Shell的标准输出返回给Groovy变量
                        code = sh(
                            script: '''#!/bin/bash
                            selinium_grid_status=`curl -s -o /dev/null -w "%{http_code}" http://localhost:4444`
                            echo $selinium_grid_status
                            ''',
                            returnStdout: true
                        ).trim() // 去掉Shell输出末尾自带的换行符
                        echo "获取到的状态码为:${code}"
                    }catch (e){
                         print "no value"
                    }
                }
            }
        }
    }
}

核心修改说明

  • 给sh步骤添加returnStdout: true配置,该参数会将Shell脚本的所有标准输出内容作为字符串返回给Groovy
  • Shell脚本最后只需要通过echo输出你要传递的状态码,输出内容就是返回的字符串
  • 调用.trim()方法去除Shell输出末尾默认带的换行符,避免变量存在多余空白字符
  • 直接用外层Groovy的code变量接收返回值,后续就可以在Groovy环境中正常使用该值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:54:03