使用jq捕获来自Jenkins的响应



我目前正在处理一个jenkinsfile,该文件没有任何方法来捕捉工作是否成功完成的响应。

当前是这样的

steps {
sh """
#!/bin/bash
curl -d '{ "ref": "${env.BRANCH_NAME}" }' \
-H "Accept: application/json" \
'#somelink/api' \
-k -q
"""
}
}
}
post {
success {
slackSend(
color: 'good',
message: "Build success : ${env.JOB_NAME}-${env.BUILD_NUMBER}. <${env.BUILD_URL}|Go to build>"
)
}
failure {
slackSend(
color: 'danger',
message: "Build failed : ${env.JOB_NAME}-${env.BUILD_NUMBER}. <${env.BUILD_URL}|Go to build>"
)
}
aborted {
slackSend(
color: '#858384',
message: "Build aborted : ${env.JOB_NAME}-${env.BUILD_NUMBER}. <${env.BUILD_URL}|Go to build>"
)
}

在Jenkins中它会显示

的结果
```+ curl -d '{ "ref": "service" }' -H 'Accept: application/json' http://somelink/payload -k -q
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed

0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    20    0     0  100    20      0     19  0:00:01  0:00:01 --:--:--    19
100    20    0     0  100    20      0      9  0:00:02  0:00:02 --:--:--     9
100    20    0     0  100    20      0      6  0:00:03  0:00:03 --:--:--     6
100    20    0     0  100    20      0      4  0:00:05  0:00:04  0:00:01     4
100    20    0     0  100    20      0      3  0:00:06  0:00:05  0:00:01     3
100    20    0     0  100    20      0      3  0:00:06  0:00:06 --:--:--     0
100    20    0     0  100    20      0      2  0:00:10  0:00:07  0:00:03     0
100    20    0     0  100    20      0      2  0:00:10  0:00:08  0:00:02     0
100    20    0     0  100    20      0      2  0:00:10  0:00:09  0:00:01     0
100    20    0     0  100    20      0      1  0:00:20  0:00:10  0:00:10     0
100    20    0     0  100    20      0      1  0:00:20  0:00:11  0:00:09     0
100    20    0     0  100    20      0      1  0:00:20  0:00:12  0:00:08     0
100    20    0     0  100    20      0      1  0:00:20  0:00:13  0:00:07     0
100    20    0     0  100    20      0      1  0:00:20  0:00:14  0:00:06     0
100    20    0     0  100    20      0      1  0:00:20  0:00:15  0:00:05     0
100    20    0     0  100    20      0      1  0:00:20  0:00:16  0:00:04     0
100    20    0     0  100    20      0      1  0:00:20  0:00:17  0:00:03     0
100    20    0     0  100    20      0      1  0:00:20  0:00:18  0:00:02     0
100    20    0     0  100    20      0      1  0:00:20  0:00:19  0:00:01     0
100    20    0     0    0    20      0      0 --:--:--  0:00:20 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:21 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:22 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:23 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:24 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:25 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:26 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:27 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:28 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:29 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:30 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:31 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:32 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:33 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:34 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:35 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:36 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:37 --:--:--     0
100    20    0     0    0    20      0      0 --:--:--  0:00:38 --:--:--     0
0  4847    0     0    0    20      0      0 --:--:--  0:00:39 --:--:--     0{"status":"success","message":"triggered: umask 0022; r10k deploy environment service -pvnnWARNt -> Environment "SOMEBRANCH"```

我在这里想要实现的是捕获"status":"success",如果出现了,那么它应该继续到success {}步骤。否则进入failure{}步骤

脚本运行良好,并产生的结果,它应该,然而,有某些情况下,"status":并不总是显示为成功,但它仍然显示在詹金斯,这一切都很好。任何帮助将不胜感激!

如果您想捕获输出,您应该这样做:

steps {
def captured_output = sh returnStdout: true, script: """
#!/bin/bash
curl -d '{ "ref": "${env.BRANCH_NAME}" }' \ ...

在那里,您可能希望使用-s--silent选项来抑制curl调试输出:

curl -s -d ...

你可以解析输出,只要它是一个有效的JSON:

def parsed_data = readJSON text: captured_output

如果status字段的响应不是success,则构建失败:

if (parsed_data.status != "success") {
error ("Miserably failed")
}

您的post步骤将进入failure子句。

如果你可以安装http请求插件,它将真正帮助你实现你的期望,这是相当简单的解析响应

pipeline {
agent any;
stages {
stage('call api') {
steps {
script {
def response = httpRequest url: 'http://localhost:8080/api/json?pretty=true', authentication: 'credentialsID', customHeaders:[[name:'Accept', value:"application/json"]]
println("Status: "+response.status)
println("Content: "+response.content)
}
}
}
}
}

最新更新