Jenkins高级篇之Pipeline方法篇-Pipeline Utility Steps-2-方法readJSON和writeJSON

这篇介绍在Pipeline Utility Steps这个插件里的第二个和第三个方法,和json读写有关。这些方法有一个前提,任何文件都需要放在jenkins的workspace下,执行的job才能去找到文件。Jenkins是没有能力去一个其他磁盘或者网络路径去访问并读取文件的,记住这个很重要。

1方法readJSON

为了接下来的代码测试,我提前在当前项目中的/testdata路径下新建了一个test_json.json的文件,里面写了几个键值对,没有考虑里面考虑嵌套的数组,内容如下。

{
"NAME":"Anthony",
"AGE":18,
"CITY":"Beijing",
"GENDER":"male"
}

在jenkins官网上,readJSON方法后面有两种参数,分别是file和text,我就把这两种情况都在模块类文件里都写成方法。

module文件内容

import hudson.model.*;


def find_files(filetype) {
	
	def files = findFiles(glob:filetype)
	for (file in files) {
		println file.name
	}
}

def read_json_file(file_path) {
	def propMap = readJSON file : file_path
	propMap.each {
	    println ( it.key + " = " + it.value )
	}
}

def read_json_file2(json_string) {
	def propMap = readJSON text : json_string
	propMap.each {
		println ( it.key + " = " + it.value )
	}
}
return this;

pipeline stage文件内容

import hudson.model.*;

println env.JOB_NAME
println env.BUILD_NUMBER

pipeline{
	
	agent any
	stages{
		stage("init") {
			steps{
				script{
					model_test = load env.WORKSPACE + "/pipeline/module/pipeline-demo-module.groovy"
				}
			}
		}
		stage("Parse json") {
			steps{
				script{
					json_file = env.WORKSPACE + "/testdata/test_json.json"
					model_test.read_json_file(json_file)
					println "================================"
					json_string = '{"NAME":"Anthony","AGE":18,"CITY":"Beijing","GENDER":"male"}'
					model_test.read_json_file2(json_string)
				}
			}
		}
	}
}


我的jenkins Job测试成功的是:http://65.49.216.200:8080/job/pipeline-project-demo/27/console

2方法writeJSON

上面介绍json的读取内容,下面介绍如何写入内容到一个json文件里。

上面wirteJSON方法有两个必须的字段,分别是json和file,json是一个json对象,是你需要把这个json写入到文件的内容,第二个file字段是一个文件的路径,这个文件肯定在jenkins的workspace范围之内。第三个字段pretty是可选,也就是可以选择把json对象插入到一个指定的位置。

先来演示,把一个json对象写入到/testdata下的一个new_json.json文件,看看这个json文件会不会自动创建,并检查内容是否是我们写入的。

modele文件内容

import hudson.model.*;
import groovy.json.*;

def find_files(filetype) {
	
	def files = findFiles(glob:filetype)
	for (file in files) {
		println file.name
	}
}

def read_json_file(file_path) {
	def propMap = readJSON file : file_path
	propMap.each {
	    println ( it.key + " = " + it.value )
	}
}

def read_json_file2(json_string) {
	def propMap = readJSON text : json_string
	propMap.each {
		println ( it.key + " = " + it.value )
	}
}

def write_json_to_file(input_json, tofile_path) {
	def input = ''
	if(input_json.toString().endsWith(".json")) {
		input = readJSON file : input_json
	}else {
		def jsonOutput = new JsonOutput()
        def new_json_object = jsonOutput.toJson(input_json)
		input = new_json_object
	}
	writeJSON file: tofile_path, json: input
}

return this;

pipeline stage文件内容

import hudson.model.*;

println env.JOB_NAME
println env.BUILD_NUMBER

pipeline{
	
	agent any
	stages{
		stage("init") {
			steps{
				script{
					model_test = load env.WORKSPACE + "/pipeline/module/pipeline-demo-module.groovy"
				}
			}
		}
		stage("write json") {
			steps{
				script{
					json_file = env.WORKSPACE + "/testdata/test_json.json"
					tojson_file = env.WORKSPACE + "/testdata/new_json.json"
					model_test.write_json_to_file(json_file,tojson_file)
					println "================================"
					json_string = '{"NAME":"Anthony","AGE":18,"CITY":"Beijing","GENDER":"male"}'
					tojson_file = env.WORKSPACE + "/testdata/new_json1.json"
					model_test.write_json_to_file(json_string,tojson_file)
				}
			}
		}
	}
}


上面的module中的write json方法,我参数接收做了判断,如果是一个json文件,没问题,用readJSON然后赋值给一个对象就好。如果传入是一个json格式的字符串对象,需要把字符串转换成json,这里使用了JsonOutput方法,但是出了一个异常,这个需要每次管理员去批准这个script,默认是被禁止的。这个功能也是jenkins管理员需要了解的一个,具体可以看我jenkins job:http://65.49.216.200:8080/job/pipeline-project-demo/35/console

 

这个批准脚本执行,以后你遇到了,知道怎么回事就行。今天暂时这样,下次我想到绕过这个方法,不用批准脚本执行,我再更新这段代码支持传入一个json格式的字符串。然后处理成json对象,最后调用writeJSON方法。

最后来看看,一个json文件作为参数传入,写入到另外一个json文件的效果。这个需要去你自己jenkins执行环境下,我的是linux机器上。

[root@Anthony ~]# cd /var/lib/jenkins/workspace/
[root@Anthony workspace]# ls
mytest              paramater_job_demo@tmp    pipeline-project-demo
mytest@tmp          Pipeline-learn-Demo1      pipeline-project-demo@tmp
paramater_job_demo  Pipeline-learn-Demo1@tmp  utilty_methods_demo
[root@Anthony workspace]# cd pipeline-project-demo
[root@Anthony pipeline-project-demo]# ls
Jenkinsfile  lib  pipeline  testdata
[root@Anthony pipeline-project-demo]# cd testdata/
[root@Anthony testdata]# pwd
/var/lib/jenkins/workspace/pipeline-project-demo/testdata
[root@Anthony testdata]# ls
123.txt  abc.log  a.log  new_json.json  test_json.json
[root@Anthony testdata]# vi new_json.json 
[root@Anthony testdata]# cat new_json.json 
{"NAME":"Anthony","AGE":18,"CITY":"Beijing","GENDER":"male"}[root@Anthony testdata]
# 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值