Недавно я хотел обновить несколько заданий (не определенных DSL) в Cloudbees, добавив к каждому из них несколько свойств.
Ну, у меня были некоторые проблемы с его работой, вот мои заметки (я использовал Jenkins 1.651.2.1, но есть вероятность, что он должен работать со старыми и более свежими версиями, такими как jenkins 2)
Нет безопасности / нет аутентификации
Это самая простая часть: получить и повторно опубликовать конфигурацию
1
2
|
$ curl http: //localhost :8080 /jenkins/job/pof/config .xml -o config.xml $ curl -X POST http: //localhost :8080 /jenkins/job/pof/config .xml --data-binary @config.xml |
Простая безопасность: используя имя пользователя и пароль
Теперь я предполагаю, что в вашей настройке Jenkins настроена защита ( http: // localhost: 8080 / jenkins / configureSecurity / -> enable security)
Это означает, что теперь нам нужно аутентифицировать оба наших запроса:
1
2
|
curl -X GET http: //anthony :anthony@localhost:8080 /jenkins/job/pof/config .xml -o config.xml curl -X POST http: //anthony :anthony@localhost:8080 /jenkins/job/pof/config .xml --data-binary "@config.xml" |
Простая безопасность: с включенной CSRF (крошка)
Вы также хотели бы защитить свой экземпляр jenkins от CSRF-атак ( http: // localhost: 8080 / jenkins / configureSecurity / -> enable csrf crumb)
Теперь это также означает, что ваши запросы должны отправить значение крошки, либо в качестве параметра, либо через заголовок
Если вы этого не сделаете:
1
|
curl -X POST http: //anthony :anthony@localhost:8080 /jenkins/job/pof/config .xml --data-binary "@config.xml" |
Вы получите такие ошибки:
1
2
3
|
<body><h2>HTTP ERROR 403< /h2 > <p>Problem accessing /jenkins/job/pof/config .xml. Reason: <pre> No valid crumb was included in the request< /pre >< /p ><hr /><i><small>Powered by Jetty: // < /small >< /i ><br/> |
или даже :
01
02
03
04
05
06
07
08
09
10
11
|
< body >< h1 >HTTP Status 500 - </ h1 >< HR size = "1" noshade = "noshade" >< p >< b >type</ b > Exception report</ p >< p >< b >message</ b > < u ></ u ></ p >< p >< b >description</ b > < u >The server encountered an internal error () that prevented it from fulfilling this request.</ u ></ p >< p >< b >exception</ b > < pre >java.io.IOException: Failed to persist config.xml hudson.model.AbstractItem.updateByXml(AbstractItem.java:677) hudson.model.AbstractItem.doConfigDotXml(AbstractItem.java:617) ….. </ pre ></ p >< p >< b >root cause</ b > < pre >javax.xml.transform.TransformerException: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file. com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:755) com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:357) jenkins.util.xml.XMLUtils._transform(XMLUtils.java:96) jenkins.util.xml.XMLUtils.safeTransform(XMLUtils.java:63) hudson.model.AbstractItem.updateByXml(AbstractItem.java:674) hudson.model.AbstractItem.doConfigDotXml(AbstractItem.java:617) |
Получите значение крошки:
Вы можете использовать значение crumb, используя страницу настройки задания:
1
|
curl http: //anthony :anthony@localhost:8080 /jenkins/job/pof/configure | sed -n 's/.*\.crumb", "\(.*\)").*/\1/p' > crumb.txt |
Но есть также сервис, посвященный этому:
1
|
curl http: //anthony :anthony@localhost:8080 /jenkins/crumbIssuer/api/xml | sed -n 's/.*\(.*\)<\/crumb>.*/\1/p' > crumb.txt |
Используйте значение крошки
1
|
curl -X POST http: //anthony :anthony@localhost:8080 /jenkins/job/pof/config .xml --data-binary "@config.xml" -data ".crumb=6bbabc426436b72ec35e5ad4a4344687" |
Упс, это не сработало
1
2
3
4
|
Caused by: java.lang.IllegalStateException: STREAMED at org.eclipse.jetty.server.Request.getReader(Request.java:803) at javax.servlet.ServletRequestWrapper.getReader(ServletRequestWrapper.java:256) at hudson.model.AbstractItem.doConfigDotXml(AbstractItem.java:610) |
Я предлагаю вам отправить крошку, используя заголовки:
1
|
curl - v -X POST http: //anthony :anthony@localhost:8080 /jenkins/job/pof/config .xml --data-binary "@config.xml" -H ".crumb: 6bbabc426436b72ec35e5ad4a4344687" |
Безопасность, основанная на куки (нет пользователя / пароля)
В некоторых установках, таких как cloubees, вы не можете передавать имя пользователя и пароль в своих запросах; Я предлагаю вам использовать куки вместо этого.
Чтобы получить их, проверьте файлы cookie, отправленные вашим аутентифицированным браузером, например, в chrome:
А затем вставьте этот URL в вашу оболочку:
1
|
curl 'http://localhost:8080/jenkins/job/pof/config.xml' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,fr;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://localhost:8080/jenkins/login?from=%2Fjenkins%2Fjob%2Fpof%2Fconfig.xml' -H 'Cookie: screenResolution=1440x900; JSESSIONID=XXXXX; JSESSIONID.XX=XXXX; screenResolution=1440x900' -H 'Connection: keep-alive' -H 'Cache-Control: no-cache' --compressed |
Конечно, вам все равно нужно получить значение крошки:
1
|
curl 'http://localhost:8080/jenkins/crumbIssuer/api/xml' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,fr;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://localhost:8080/jenkins/login?from=%2Fjenkins%2Fjob%2Fpof%2Fconfig.xml' -H 'Cookie: screenResolution=1440x900; JSESSIONID=XXXXX; JSESSIONID.XX=XXXXX; screenResolution=1440x900' -H 'Connection: keep-alive' -H 'Cache-Control: no-cache' --compressed | sed -n 's/.*<crumb>\(.*\)<\/crumb>.*/\1/p' > crumb.txt |
И теперь вы готовы опубликовать обновленный файл config.xml:
1
|
curl -X POST 'http://localhost:8080/jenkins/job/pof/config.xml' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,fr;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://localhost:8080/jenkins/login?from=%2Fjenkins%2Fjob%2Fpof%2Fconfig.xml' -H 'Cookie: screenResolution=1440x900; JSESSIONID=XXXX; JSESSIONID.XX=XXXX; screenResolution=1440x900' -H 'Connection: keep-alive' -H 'Cache-Control: no-cache' --compressed --data-binary "@config.xml" -H ".crumb: 6bbabc426436b72ec35e5ad4a4344687" |
связи
- https://benkiew.wordpress.com/2012/01/12/automating-hudsonjenkins-via-rest-and-curl-a-very-small-cookbook/
- https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API
Ссылка: | Как обновить публикацию вакансии в Jenkins config.xml от нашего партнера JCG |