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
'Jenkins' 카테고리의 다른 글
Jenkins Pipeline script from SCM (0) | 2024.02.28 |
---|---|
[Script Console] 실행 중인 job의 파라미터 가져오기 (0) | 2024.01.17 |
[Script Console] Jenkins 실행 중이거나 대기 중인 빌드 일괄 멈추기 (0) | 2023.09.23 |
Jenkins 빌드 로그를 변수에 저장하기 (0) | 2023.08.08 |
Jenkins idle node 조회 (0) | 2023.06.20 |