最近,我想更新Cloudbees中的一些作业(未使用DSL定义),为每个作业添加一些属性。

好吧,我在使其工作时遇到了一些麻烦,这是我的注意事项(我使用的是Jenkins 1.651.2.1,但有可能它应与较早和较新的版本一起使用,例如jenkins 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 / –>启用安全性)

这意味着我们现在需要验证我们的两个请求:

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)


现在,这也意味着您的请求需要发送一个屑状值,无论是作为参数还是通过标头

如果您不这样做:

curl -X POST http://anthony:anthony@localhost:8080/jenkins/job/pof/config.xml --data-binary "@config.xml"

您会得到这样的错误:

<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/>

甚至 :

<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)

获得面包屑值:

您可以使用configure job页面来分配值:

curl http://anthony:anthony@localhost:8080/jenkins/job/pof/configure | sed -n 's/.*\.crumb", "\(.*\)").*/\1/p' > crumb.txt

但是,还有专门用于此的服务:

curl http://anthony:anthony@localhost:8080/jenkins/crumbIssuer/api/xml | sed -n 's/.*\(.*\)<\/crumb>.*/\1/p' > crumb.txt

使用面包屑值

curl -X POST http://anthony:anthony@localhost:8080/jenkins/job/pof/config.xml --data-binary "@config.xml" -data ".crumb=6bbabc426436b72ec35e5ad4a4344687"

哎呀,那没用

Caused by: java.lang.IllegalStateException: STREAMEDat 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)

我建议您使用标题发送面包屑:

curl -v -X POST http://anthony:anthony@localhost:8080/jenkins/job/pof/config.xml --data-binary "@config.xml" -H ".crumb: 6bbabc426436b72ec35e5ad4a4344687"

基于cookie的安全性(无用户名/密码)

在某些安装中(例如cloubees),您不能在请求中传递用户名和密码。 我建议您改用cookie。

要检索它们,请检查通过身份验证的浏览器发送的cookie,例如chrome:


然后将此URL粘贴到您的shell中:

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

当然,您仍然需要获取面包屑值:

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了:

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

翻译自: https://www.javacodegeeks.com/2016/05/update-jenkins-job-posting-config-xml.html

如何更新Jenkins作业发布config.xml相关推荐

  1. 6.Jenkins-代码更新Jenkins自动发布项目

    代码更新Jenkins自动发布项目 目的:实现开发一提交,jenkins就自动发布,无需人工干预 1.找到对应的项目,然后找到构建触发器 勾选 Build when a change is pushe ...

  2. python处理Jenkins Job配置文件config.xml

    文章目录 一.准备config.xml文件 二.增加字符串参数 代码 confix.xml文件会增加如下内容: 创建的jenkins项目test1 三.删除字符串参数的某个属性 四.替换字符串参数的某 ...

  3. 研发协同平台持续集成Jenkins作业设计演进

    源宝导读:Jenkins作为一个开源的持续集成工具,被大家广泛使用.本文将分享,Jenkins在明源云研发协同平台中的运用,以及在其作业设计方面的演进历程. 一.作业设计1.0 起初,为了尽快推出研发 ...

  4. 管理Jenkins作业配置

    在JBoss工具和Developer Studio中,我们在Jenkins中管理许多构建作业. 实际上,对于3.2.x / 4.x和3.3.x / 5.x流,有195个以上的作业. 当我们开始建立明年 ...

  5. Ionic APP 热更新 之 产品发布状态下的热更新搭建,去local-dev-addon插件

    上一篇,我们介绍了在本地开发环境下的ionic项目热更新测试, 本文,我们将详细说明如何在去掉cordova-hot-code-push-local-dev-addon插件的情况下,实现热更新. 使用 ...

  6. mybatis中config.xml文件的解析

    config.xml文件的解析是主要是XMLConfigBuilder完成的,通过调用parseConfiguration来实现整个解析过程 public Configuration parse() ...

  7. jenkins是什么_使用 Jenkins 自动发布服务到 Kubernetes

    使用 Jenkins 自动发布服务到 Kubernetes Jenkins 是什么 一个比较流行的开源 CI/CD 工具 CI/CD : 持续集成/持续部署 Kubernetes 是什么 容器化工具 ...

  8. clickhouse配置项config.xml详解——服务器配置参数

    调研学习clickhouse,上一章介绍了clickhouse的配置项users.xml,这一章介绍另一大项config.xml 从clickhouse的官网看,clickhouse的配置参数主要分了 ...

  9. 升级jenkins 导致jenkins启动失败_升级Jenkins:发布和代理 VUE 项目

    (海上生明月,_ _ _ _ _) 书接上回,在之前的几篇文章中,我们主要通过几篇文章来讲解了如何通过一个镜像,快速的创建Jenkins容器实例,然后搭建我们的持续集成和持续部署的平台,相关的文章呢如 ...

最新文章

  1. 1045 Favorite Color Stripe(LCS解法) 需再理解
  2. 【项目展示】自己用C语言编写的汉诺塔小游戏
  3. Redis数据库(三)——(主从复制、哨兵模式、集群)
  4. python 高维数据_Python数据分析入门|利用NumPy高效处理高维数据
  5. 【转】Dynamics CRM 365零基础入门学习(四)Dynamics 使用profiler插件调试流程
  6. Vue第一部分(4):表单的双向数据绑定:v-model指令
  7. 格密码教程(六):高斯二维格规约,解决SVP问题
  8. 医疗影像技术简介(X射线,CT,MRI等)
  9. PHP5异常处理,PHP5异常处理分析实例
  10. 通过PHP自带的$_SERVER判断 手机访问网站自动跳转到手机版
  11. Python: 字符串
  12. [转载]EXT核心API详解Ext.data(八)- Connection/Ajax/Record javascript
  13. 决定员工发展命运的34条重要行为规范
  14. 记录自己的鬼压床——长发
  15. 10个有趣且易上手的AI项目(附Python源代码)
  16. session是什么
  17. 夫妻给一周岁女儿喂农药后双双自杀
  18. 智慧树期末考试可以切换页面吗_智慧树考试可以切换界面吗?中途可以退出吗...
  19. 淘宝推广方法大全,教你如何做淘宝(转)
  20. 关于crawl DZDP的城市商场名称和地址的参考

热门文章

  1. 并发编程 – Concurrent 用户指南
  2. Git 12 岁了,送给你 12 个 Git 使用技巧
  3. Shell入门(七)之关系运算
  4. ssm使用全注解实现增删改查案例——EmpServiceImpl
  5. CV中多的空格导致报错
  6. 多线程----join插队
  7. JAVA基础学习大全(笔记)
  8. JAVA List集合转Page(分页对象) java 分页 PageModel 测试类TestPagerModel
  9. linux中usb设备名,Linux 中识别 USB 设备名字的 4 种方法
  10. html让时间只展示年月日_如何用html写代码,使得在网页上显示当前的时间和日期...