Jenkins

Jenkins에서 json 파싱하는 법

thxxyj 2023. 12. 27. 22:08
728x90

1. jq 사용

단, Jenkins node에 jq 패키지가 설치되어 있어야한다.

def parsedRes = sh(script: "curl -s ... | jq -r ...", returnStdout: true)

 

2. Jenkins pipeline 에서 JsonSlurper를 사용

1. returnStdout을 통해 sh(curl) response를 가져온다.

def myResponse = sh(script: """curl -s -X GET 'http://(....)' -H 'accept: */*' """, returnStdout: true).trim()

 

 

2. groovy.json.JsonSlurper 을 통해 response를 파싱한다.

def jsonRes = new JsonSlurper().parseText(myResponse)
def jsonResType = jsonRes.getClass() // 타입: class groovy.json.internal.LazyMap

def jsonResClassic = new JsonSlurperClassic().parseText(myResponse)
def jsonResClassicType = jsonResClassic.getClass() // 타입: class java.util.HashMap

def parsedRes = jsonRes['xxx']['yyy']     // "jsonRes"에서 원하는 데이터 추출

 

 

* readJson을 통한 파싱은 jsonSlurperClassic().parseText()로 얻은 데이터로 가능함

jsonSlurper().parseText()를 통한 변수를 사용할 경우 "Caused: java.io.NotSerializableException: groovy.json.internal.LazyMap" 에러 발생

https://stackoverflow.com/questions/37864542/jenkins-pipeline-notserializableexception-groovy-json-internal-lazymap

 

 

참조

https://e.printstacktrace.blog/how-to-catch-curl-response-in-jenkins-pipeline/

https://stackoverflow.com/questions/42550786/jenkins-groovy-parse-json

728x90