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

如何在Jenkins Groovy流水线或共享库Groovy类中直接运行Python代码(非命令行)?

Jenkins Groovy流水线/共享库中直接运行Python代码的方案

当然可以,不用命令行也能在Groovy流水线或共享库中执行Python代码,下面是具体实现方式:

一、在Groovy流水线中直接运行Python代码

你可以借助Java的Python解释器绑定(比如Jython或CPython的Java桥接),直接在Groovy脚本中执行Python代码,无需调用sh或bat命令行。

示例:嵌入Python代码并执行

import org.python.util.PythonInterpreter

pipeline {
    agent any
    stages {
        stage('Run Python Code') {
            steps {
                script {
                    def python = new PythonInterpreter()
                    // 执行单行Python代码
                    python.exec("print('Hello from Python in Groovy Pipeline')")
                    
                    // 执行多行Python逻辑,计算并返回结果
                    python.exec("""
def add(a, b):
    return a + b

result = add(10, 20)
""")
                    // 获取Python中的变量值
                    def groovyResult = python.get("result")
                    echo "Python计算结果:${groovyResult}"
                }
            }
        }
    }
}

注意:需要确保Jenkins服务器上已安装Jython或配置了Python的Java交互环境,否则PythonInterpreter类会无法加载。

二、在共享库的Groovy类中封装Python执行逻辑

把Python执行逻辑封装到共享库的类里,能让所有流水线复用这个能力,避免重复代码。

1. 共享库目录结构

src/
└── com/
    └── mycompany/
        └── PythonRunner.groovy

2. PythonRunner.groovy类实现

package com.mycompany

import org.python.util.PythonInterpreter

class PythonRunner {
    // 执行单行Python代码
    static void runSingleLine(String code) {
        def python = new PythonInterpreter()
        python.exec(code)
    }

    // 执行多行Python代码并返回指定变量的值
    static Object runMultiLine(String code, String returnVar) {
        def python = new PythonInterpreter()
        python.exec(code)
        return python.get(returnVar)
    }
}

3. 在流水线中调用共享库的方法

@Library('my-shared-library') _
import com.mycompany.PythonRunner

pipeline {
    agent any
    stages {
        stage('Use Shared Lib to Run Python') {
            steps {
                script {
                    PythonRunner.runSingleLine("print('Hello from Shared Library Python Runner')")
                    
                    def calcResult = PythonRunner.runMultiLine("""
def multiply(x, y):
    return x * y

product = multiply(5, 8)
""", "product")
                    echo "共享库中Python计算的乘积:${calcResult}"
                }
            }
        }
    }
}

补充说明

如果Jenkins环境没有配置Java-Python桥接环境,也可以用一种“伪无命令行”的方式:把Python代码写入临时文件,通过Groovy的ProcessBuilder执行Python解释器,这种方式不需要手动拼接命令行字符串,比直接写sh 'python script.py'更集成:

script {
    def pythonCode = """
print('Alternative way without explicit command line')
"""
    def tempFile = File.createTempFile("temp", ".py")
    tempFile.text = pythonCode
    def process = new ProcessBuilder("python", tempFile.absolutePath).start()
    process.waitFor()
    echo new String(process.inputStream.bytes)
    tempFile.delete()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:15:34