我目前正在处理一个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)
}
}
}
}
}