1. 概述

序列化(Serialization) 是在任何编程语言中操作对象时的一个核心概念。它指的是将对象转换为一种标准格式的字节流,以便存储或传输。通过序列化,我们可以保存对象的状态、传输它,并在不同的系统中重新构建该对象。

本文将介绍如何在 Jenkins 流水线中使用 Groovy 将对象序列化为 JSON 字符串。


2. 在 Jenkins 中创建 Groovy 对象

Jenkins 支持在流水线脚本中使用 Groovy 语言,这为流程定制和复杂逻辑实现提供了极大的灵活性。我们可以在 声明式或脚本式流水线 中使用 script 块来编写 Groovy 代码。

以下是一个在 Jenkins 流水线中定义并使用 Groovy 变量的示例:

pipeline {
    agent any
    stages {
        stage("创建 Groovy 变量") {
            steps {
                script {
                    def student = ["name":"John", "age":20, "subjects":["English", "Math", "Physics"]]
                    echo "变量类型是 ${student.getClass()}"
                    echo "学生姓名是 ${student.name}"
                    echo "学生年龄是 ${student.age}"
                    echo "第一门课程是 ${student.subjects[0]}"
                }
            }
        }
    }
}

输出结果如下:

[Pipeline] echo
变量类型是 class java.util.LinkedHashMap
[Pipeline] echo
学生姓名是 John
[Pipeline] echo
学生年龄是 20
[Pipeline] echo
第一门课程是 English

我们看到,Groovy 中的 Map 实际上是 Java 的 LinkedHashMap 实现。这为我们后续进行 JSON 序列化提供了基础。


3. 使用 JsonOutput 类生成 JSON 字符串

Groovy 提供了原生的 JsonOutput 类来将对象序列化为 JSON 字符串。它属于 groovy.json 包,其中包含了处理 JSON 的多个类。

JsonOutput.toJson() 是一个静态方法,接受一个 Groovy 对象作为参数,并返回对应的 JSON 字符串。我们来看一个示例:

import groovy.json.JsonOutput

pipeline {
    agent any
    stages {
        stage("使用 JsonOutput 序列化") {
            steps {
                script {
                    def student = ["name":"John", "age":20, "subjects":["English", "Math", "Physics"]]
                    def json_string = JsonOutput.toJson(student)
                    def json_pretty = JsonOutput.prettyPrint(json_string)
                    echo "${json_pretty}"
                }
            }
        }
    }
}

输出结果如下:

[Pipeline] echo
{
    "name": "John",
    "age": 20,
    "subjects": [
        "English",
        "Math",
        "Physics"
    ]
}

通过 toJson()prettyPrint(),我们成功将 Groovy 对象转换为结构清晰的 JSON 字符串。这个 JSON 可以用于存储、传输,或者后续处理。


4. 使用 Jenkins 原生 writeJSON 步骤生成 JSON

除了使用 JsonOutput,我们还可以使用 Jenkins 自带的 writeJSON 步骤来完成序列化操作。这个步骤属于 Pipeline Utility Steps 插件,使用前需要先安装该插件。

✅ 安装插件截图如下:

安装 pipeline utility steps 插件

安装完成后,我们可以这样使用 writeJSON

pipeline {
    agent any
    stages {
        stage("使用 writeJSON 序列化") {
            steps {
                script {
                    def student = ["name":"John", "age":20, "subjects":["English", "Math", "Physics"]]
                    def json_pretty = writeJSON(json: student, returnText: true, pretty: 4)
                    echo "${json_pretty}"
                }
            }
        }
    }
}

参数说明如下:

  • json: 要序列化的 Groovy 对象
  • returnText: 是否返回字符串而不是写入文件
  • pretty: 缩进空格数,用于美化输出格式

输出结果如下:

[Pipeline] echo
{
    "name": "John",
    "age": 20,
    "subjects": [
        "English",
        "Math",
        "Physics"
    ]
}

⚠️ 注意:writeJSON 默认会自动格式化输出内容,但缩进层级可能与 JsonOutput.prettyPrint() 略有不同。


5. 总结

在 Jenkins 流水线中,我们可以通过 Groovy 定义对象,并利用以下两种方式将其序列化为 JSON:

  • ✅ 使用 Groovy 原生的 JsonOutput 类,适用于通用场景,无需额外插件
  • ✅ 使用 Jenkins 插件 writeJSON 步骤,适合 Jenkins 环境下集成使用,语法更简洁

两种方式各有优劣,选择时可以根据项目需求和 Jenkins 插件支持情况灵活决定。如果你希望减少依赖,推荐使用 JsonOutput;如果已在 Jenkins 环境中,使用 writeJSON 更加便捷。



原始标题:Create JSON Strings via Groovy Variables in Jenkins Pipeline