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

Jenkins Pipeline中两个Groovy脚本如何实现通信?

在Jenkins Pipeline中实现两个Groovy脚本的相互通信

下面是几种实用的实现方式,可根据数据复杂度和使用场景选择:

1. 直接调用脚本并传递/接收数据

如果两个脚本在同一个Pipeline运行流程内,最直接的方式是通过调用时传递参数,或让被调用脚本返回处理结果。

示例:

主脚本(main.groovy)

// 加载子脚本并调用其方法,传递参数
def scriptResult = load("subscript.groovy").processData("来自主脚本的测试数据")
echo "子脚本返回结果:${scriptResult}"

子脚本(subscript.groovy)

// 定义可被外部调用的方法,接收参数并返回处理后的数据
def processData(inputData) {
    def processedData = "${inputData} - 已完成处理"
    return processedData
}

// 暴露方法供外部调用
return this

2. 通过共享变量传递数据

在Pipeline全局作用域定义变量,两个脚本均可访问和修改该变量。注意多阶段Pipeline中,变量需定义在pipeline块外,或用script块包裹确保全局可见。

示例:

主脚本

// 全局共享变量
def sharedData = "初始值"

pipeline {
    agent any
    stages {
        stage("调用第一个脚本") {
            steps {
                script {
                    load("script1.groovy")
                    echo "修改后的共享变量:${sharedData}"
                }
            }
        }
        stage("调用第二个脚本") {
            steps {
                script {
                    load("script2.groovy")
                    echo "第二个脚本处理后的变量:${sharedData}"
                }
            }
        }
    }
}

script1.groovy

// 修改全局共享变量
sharedData = "脚本1修改后的值"

script2.groovy

// 读取并再次修改共享变量
sharedData = "${sharedData} - 脚本2追加内容"

3. 通过文件传递复杂数据

若需传递JSON、XML这类复杂结构数据,可将数据写入工作空间文件,另一脚本读取并解析该文件。

示例:

脚本A(writeData.groovy)

import groovy.json.JsonBuilder

def data = [
    name: "Jenkins",
    version: "2.401",
    modules: ["Pipeline", "Groovy"]
]

// 将数据写入JSON文件
def json = new JsonBuilder(data).toPrettyString()
writeFile file: "shared_data.json", text: json

脚本B(readData.groovy)

import groovy.json.JsonSlurper

// 读取并解析JSON文件
def jsonContent = readFile file: "shared_data.json"
def data = new JsonSlurper().parseText(jsonContent)

echo "读取到的名称:${data.name}"
echo "读取到的模块:${data.modules.join(', ')}"

4. 利用Jenkins环境变量

通过Jenkins的env对象设置环境变量,所有脚本均可访问这些变量。环境变量在整个Pipeline运行期间生效,适合跨阶段、跨脚本的全局数据传递。

示例:

脚本1

// 设置环境变量
env.SHARED_ENV_VAR = "环境变量传递的数据"

脚本2

// 读取环境变量
def receivedData = env.SHARED_ENV_VAR
echo "从环境变量获取的数据:${receivedData}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:36:19