项目上需要获取Jenkins历史编包记录,记录下Jenkins API的使用,因为是用在JavaScript中,这边记录下Jenkins API JSON编包数据的获取。
一、Jenkins API入口
Jenkins API简介入口在Jenkins工程编译页面底部右下角
进入之后可以看到XML、JSON和Python三种方式获取数据的说明,用Python方式获取到的也是JSON格式的数据,直接点击“JSON API”之后可以看到Jenkins工程的所有数据,包括编包配置,历史编译的版本信息等等。
要查看更多的Jenkins API接口信息,可以点击”the documentation”,访问需要翻墙,地址是:
https://wiki.jenkins.io/display/JENKINS/Remote+access+API
二、Jenkins API 获取历史构建版本数据
1. 获取默认最新50条数据
后续的工程地址直接用“xxxxxxx“来表示,使用的时候替换成自己工程的地址。
pretty=true参数的作用是在浏览器里面格式化显示数据,用在实际工程数据请求的时候不需要此参数。
获取默认最新50条数据参数字段用builds,builds中括号里面的参数可以填需要过滤的字段信息,*号就是不进行字段的过滤,返回所有的字段信息。
http://xxxxxxx/api/json?pretty=true&tree=builds[*]
如果只需要获取特定的几个字段,可以填上字段参数,用逗号分隔,比如我只需要id(历史版本ID)、timestamp(历史版本编译完成时间戳)、duration(历史版本编译时长)、url(历史版本URL地址)。
http://xxxxxxx/api/json?pretty=true&tree=builds[id,timestamp,result,duration,url]
请求结果示例:
{ "_class" : "hudson.model.FreeStyleProject", "builds" : [ { "_class" : "hudson.model.FreeStyleBuild", "duration" : 144622, "id" : "8399", "result" : "SUCCESS", "timestamp" : 1589093864021, "url" : "http://xxxxxxx/8399/" }, { "_class" : "hudson.model.FreeStyleBuild", "duration" : 128466, "id" : "8398", "result" : "SUCCESS", "timestamp" : 1589039972324, "url" : "http://xxxxxxx/8398/" }, { "_class" : "hudson.model.FreeStyleBuild", "duration" : 136576, "id" : "8397", "result" : "SUCCESS", "timestamp" : 1589017717728, "url" : "http://xxxxxxx/8397/" }, ... ] }
2. 获取所有构建版本数据
如果要获取所有历史记录数据,参数要替换成allBuilds。
http://xxxxxxx/api/json?pretty=true&tree=allBuilds[number,id,timestamp,result,duration,url]
3. 获取单条构建版本数据
比如构建的历史版本id为8279,那么获取单条构建记录的方式就是:
http://xxxxxxx/8279/api/json?pretty=true
这边就不能再用tree参数去过滤想要的字段,而是把所有相关编译数据都返回。
三、Jenkins 构建版本详细信息的解析
一般需要获取的构建版本详细信息包括:触发人、版本下载URL地址、版本号、APK大小等等,而通过Jenkins API并不能获取到这些详细字段信息,需要拿到单条版本URL地址之后,做二次请求解析。
比如Jenkins上触发人信息和构建版本结果信息是分开的,那么做二次解析的时候需要先把所有构建历史版本URL字段保存到数据库之后,再逐个请求解析触发人信息,在批量解析完毕之后,再做构建版本信息的批量解析,两部分解析要分开,而且在做批量请求的时候,哪条请求会先返回是不确定的,不能根据请求的先后顺序的ID来判定是否解析完毕,要根据返回的请求结果次数是否等于发起请求的次数来判定是否解析完毕。
在JavaScript中是单线程处理的,没有多线程的概念,不像Android可以多线程并行处理。
四、其他资料参考
利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解
扩展阅读:
转载请注明出处:陈文管的博客 – Jenkins API使用
扫码或搜索:文呓
微信公众号 扫一扫关注