#curl #groovy #jenkins-pipeline
Вопрос:
У меня есть сценарий конвейера (файл Дженкинса), в котором я хочу получить ответ CURL (если 200 ок, двигайтесь дальше. В противном случае прервите выполнение задания). Я борюсь с синтаксисом curl на этапе конвейера, предназначенном для этого:
stage('Getting getting external API') {
steps {
script{
/* groovylint-disable-next-line LineLength */
final String url = "curl -X 'GET' 'https://my-endpoint-test/operations/promote/Approved' -H 'accept: */*'"
final def (String code) = sh(script: "curl -s -w '\n%{response_code}' $url", returnStdout: true)
echo "HTTP response status code: $code"
/* groovylint-disable-next-line NestedBlockDepth */
if (code != "200") {
error ('URL status different of 200. Exiting script.')
}
}
}
}
Я думаю, что я не в правильном направлении с этим URL-адресом, он жалуется на «»после GET и до «- H».
WorkflowScript: 54: unexpected char: '' @ line 54, column 47.
l String url = "curl -X 'GET' 'https:/
^1 error
Кроме того, не могли бы вы посоветовать более простой способ прерывания этого конвейера в зависимости от ответа о состоянии http?
Комментарии:
1. Обратная косая черта в строке Java/Groovy предназначена для экранирования специальных символов . Чего вы пытаетесь достичь с помощью этих»»? Кроме того, переменная имеет имя
url
, но содержит полнуюcurl
команду, которую затем вы интерполируете в другуюcurl
команду. Вы когда-нибудь думали об использовании декларативных конвейеров ?2. @Герольдброзер. Да, я именно боролся с этими негативными реакциями. Они выходят из форматирования завитков , как видно на Swagger. В этом есть большой смысл. Я не знал, как это лечить. И да: я рассматривал декларативные конвейеры . Я просто пытаюсь следовать каким-то стандартам в этом проекте. Но я определенно попробую, если сценарий не соответствует нашим потребностям.
3. В целом, сценарии трубопроводов удовлетворяют большему количеству потребностей. Но я уже много лет не видел ни одного проекта Дженкинса, который нуждался бы в таком. Сейчас доступно так много плагинов в виде шагов конвейера: jenkins.io/doc/pipeline/steps .
Ответ №1:
Ваша команда curl неверна.
stage('Getting getting external API') {
steps {
script{
cmd = """
curl -s -X GET -H 'accept: */*' -w '{http_code}'
'https://my-endpoint-test/operations/promote/Approved'
"""
status_code = sh(script: cmd, returnStdout: true).trim()
// must call trim() to remove the default trailing newline
echo "HTTP response status code: ${status_code}"
if (status_code != "200") {
error('URL status different of 200. Exiting script.')
}
}
}
}
Комментарии:
1. Кажется, работает довольно хорошо. Я не уверен в выводе, потому что переменная ${status_code} возвращает нечто большее, чем просто номер состояния: код состояния HTTP — ответа: {«Код состояния»:500,»сообщение»:»Внутренняя ошибка сервера»}{http_code}