1. 概述

JSON 是一种广泛用于系统间数据交换的标准格式,具有语言无关性,几乎所有主流编程语言都支持 JSON 的解析与生成。

本文将介绍如何在 Jenkins 流水线中使用 JSON 参数,并在 Pipeline 中解析和使用该参数。


2. 在 Jenkins 中创建 JSON 类型参数

Jenkins 并没有原生的 JSON 类型参数,但我们可以使用“多行字符串参数(Text Parameter)”来模拟 JSON 参数的输入。

配置界面如下图所示:

创建多行字符串参数作为 JSON 文本

我们定义了一个名为 student 的参数,并设置了一个默认的 JSON 值。接下来我们编写一个简单的流水线来输出该参数内容:

pipeline {
    agent any
    stages {
        stage("print json parameter") {
            steps {
                echo student
            }
        }
    }
}

运行后可以在控制台看到完整的 JSON 字符串输出:

手动触发流水线并传入 JSON 参数
流水线输出 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}"
                }
            }
        }
    }
}

运行结果如下:

流水线输出解析后的 JSON 属性

优点:语法简洁,适合 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}"
                        }
                    }
                }
            }
        }
    }
}

运行结果如下:

使用 JsonSlurper 解析 JSON 并输出属性

优点:更灵活,支持复杂逻辑处理
缺点:需要编写更多代码,适合 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 参数,提升自动化流程的灵活性和可配置性。


原始标题:Getting a JSON Object as a Parameter in a Jenkins Pipeline