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://e.printstacktrace.blog/how-to-catch-curl-response-in-jenkins-pipeline/
https://stackoverflow.com/questions/42550786/jenkins-groovy-parse-json
728x90