1. 概述
JSON 是一种广泛用于系统间数据交换的标准格式,具有语言无关性,几乎所有主流编程语言都支持 JSON 的解析与生成。
本文将介绍如何在 Jenkins 流水线中使用 JSON 参数,并在 Pipeline 中解析和使用该参数。
2. 在 Jenkins 中创建 JSON 类型参数
Jenkins 并没有原生的 JSON 类型参数,但我们可以使用“多行字符串参数(Text Parameter)”来模拟 JSON 参数的输入。
配置界面如下图所示:
我们定义了一个名为 student
的参数,并设置了一个默认的 JSON 值。接下来我们编写一个简单的流水线来输出该参数内容:
pipeline {
agent any
stages {
stage("print json parameter") {
steps {
echo student
}
}
}
}
运行后可以在控制台看到完整的 JSON 字符串输出:
3. 解析 JSON 参数内容
单纯输出整个 JSON 字符串在实际使用中作用有限,通常我们需要从中提取特定字段进行处理。
下面介绍两种在 Jenkins Pipeline 中解析 JSON 的方法:
3.1 使用 readJSON
步骤
Jenkins 提供了一个内置的 readJSON
工具(属于 Pipeline Utility Steps 插件),可以非常方便地将 JSON 字符串解析为对象。
示例代码如下:
pipeline {
agent any
stages {
stage("parse json parameter") {
steps {
script {
def myobj = readJSON text: student
echo "The student name is $myobj.name"
echo "The subjects are ${myobj.subjects[0].name} and ${myobj.subjects[1].name}"
}
}
}
}
}
运行结果如下:
✅ 优点:语法简洁,适合 Declarative Pipeline
❌ 缺点:灵活性略低,不能处理复杂逻辑
3.2 使用 Groovy 的 JsonSlurper
如果需要更灵活的解析方式,可以使用 Groovy 提供的 JsonSlurper
类。这种方式更适合 Scripted Pipeline 或需要复杂逻辑处理的场景。
示例代码如下:
import groovy.json.JsonSlurper
pipeline {
agent any
stages {
stage("parse json parameter") {
steps {
script {
def myobj = new JsonSlurper().parseText(student)
echo "The student grade is $myobj.grade"
for (i=0; i<myobj.subjects.size(); i++) {
if (myobj.subjects[i].passed) {
echo "he passed the ${myobj.subjects[i].name}"
} else {
echo "he failed the ${myobj.subjects[i].name}"
}
}
}
}
}
}
}
运行结果如下:
✅ 优点:更灵活,支持复杂逻辑处理
❌ 缺点:需要编写更多代码,适合 Scripted Pipeline
4. 小结
本文介绍了在 Jenkins Pipeline 中如何接收 JSON 参数并进行解析的两种方式:
方法 | 描述 | 适用场景 |
---|---|---|
readJSON |
Jenkins 提供的 Pipeline 工具步骤,简单易用 | Declarative Pipeline,快速提取字段 |
JsonSlurper |
Groovy 标准类,支持复杂解析逻辑 | Scripted Pipeline,需灵活处理数据 |
⚠️ 踩坑提醒:
readJSON
需要安装Pipeline Utility Steps
插件JsonSlurper
需要手动导入groovy.json.JsonSlurper
包- JSON 格式必须严格正确,否则解析失败
通过合理使用这两种方式,我们可以在 Jenkins 流水线中高效地处理 JSON 参数,提升自动化流程的灵活性和可配置性。