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

如何在Jenkins Pipeline的不同阶段访问Python脚本中的变量

解决Jenkins管道跨阶段访问Python脚本变量的问题

要在Jenkins第二个阶段获取第一个阶段执行的Python脚本中的变量c,核心思路是让Python脚本将变量值输出到标准输出,再由Jenkins捕获该输出并保存为管道变量,具体步骤如下:

1. 修改Python脚本,输出变量值

修改test.py,添加代码将c的值打印到标准输出:

a=10
b=20
c=10+20
print(c)  # 将变量c的值输出到控制台

如果脚本有其他输出,为了精准提取c的值,可以输出带标识的内容,避免干扰:

a=10
b=20
c=10+20
print(f"c_value={c}")

2. 修改Jenkinsfile,捕获输出并保存为管道变量

在第一个执行Python脚本的阶段,使用sh步骤的returnStdout参数捕获脚本输出,将其保存为Jenkins管道变量,后续阶段即可直接使用该变量:

情况1:Python脚本仅输出c的值

pipeline{
    agent any
    stages{
        stage("Executing python script"){
            steps{
                script {
                    // 捕获Python脚本的输出,去除首尾空白字符后保存为变量c_value
                    c_value = sh(script: 'python test.py', returnStdout: true).trim()
                }
            }
        }

        stage("Getting python variable"){
            steps{
                // 使用管道变量c_value
                sh "echo The value of c is ${c_value}"
            }
        }
    }
}

情况2:Python脚本输出带标识的内容(过滤无关输出)

如果Python脚本输出c_value=30,可以用grep精准提取数值部分:

pipeline{
    agent any
    stages{
        stage("Executing python script"){
            steps{
                script {
                    // 提取c_value=后面的数值内容
                    c_value = sh(script: 'python test.py | grep -oP "c_value=\K.*"', returnStdout: true).trim()
                }
            }
        }

        stage("Getting python variable"){
            steps{
                sh "echo The value of c is ${c_value}"
            }
        }
    }
}

原方法不可行的原因

原Jenkinsfile中直接使用${c}是尝试引用Jenkins管道内置变量,但Python脚本中的c是Python进程内部的局部变量,Jenkins管道无法直接跨进程访问该变量,必须通过输出捕获的方式将值传递到Jenkins环境中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:52:12