Jenkins Api 接口
Jenkins API简介
- Jenkins对外暴露的动作交互入口
- 为外部程序提供入口,可以控制Jenkins
- 支持协议-Http
- API接口支持用户名、密码认证
- Jenkins API支持的典型功能:运行Job,查看任务状态,返回任务编号,……,等
调用Jenkins API环境准备
- 创建一个有任务运行和状态查询的权限的用户
- 准备一个打算通过API远程控制的任务
- 关闭跨站脚本伪造请求保护
系统管理 -> 全局安全配置
注意:对于高版本的Jenkins是无法在“全局安全配置”中关闭“跨站请求伪造保护”,因此需要经过以下操作进行跨站请求伪造保护关闭。
由于是docker启动的Jenkins,因此我们在启动的命令上,添加取消保护的参数配置后启动Jenkins,即可关闭CSRF,配置内容如下:
1 | -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true |
docker完整命令如下:
1 | docker run --name jenkins -d -p 8086:8080 -p 5000:5000 -v ${PWD}/jenkins:/var/jenkins_home -v /usr/local/jdk:/usr/local/jdk -v /usr/local/maven:/usr/local/maven -e JAVA_OPTS=-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true fb583aea232a |
完成后,再次到系统管理 -> 全局安全配置 中查看:
常用接口使用方法
站点API
- 站点支持的API:
http://<Jenkins-Server-Address>/api
- 查询到站点中所有的job信息(JSON格式):
http://<Jenkins-Server-Address>/api/json?pretty=true
- 查询到站点中所有的job信息(XML格式):
http://<Jenkins-Server-Address>/api/xml
- 通过tree进行过滤:
http://<Jenkins-Server-Address>/api/json?pretty=true&tree=jobs[name[*]]
- 重启站点:
http://<Jenkins-Server-Address>/restart
- 安全重启站点:
http://<Jenkins-Server-Address>/safeRestart
获取Job相关信息
- 当前的api说明:
http://<Jenkins-Server-Address>/job/<Job-Name>/api/
- JSON格式:
http://<Jenkins-Server-Address>/job/<Job-Name>/api/json?pretty=true
- XML格式:
http://<Jenkins-Server-Address>/job/<Job-Name>/api/xml
获取Job的指定信息(JSON格式)
- 获取Job的builds节点信息:
http://<Jenkins-Server-Address>/job/<Job-Name>/api/json?pretty=true&tree=builds[*]
- 获取Job的builds节点下displayName节点信息:
http://<Jenkins-Server-Address>/job/<Job-Name>/api/json?pretty=true&tree=builds[displayName]
- 获取Job的builds节点下指定displayName节点信息:
http://<Jenkins-Server-Address>/job/<Job-Name>/api/json?pretty=true&tree=builds[displayName]{x,y}
- 获取两个相关的节点信息,例如:
http://<Jenkins-Server-Address>/job/<Job-Name>/api/json?pretty=true&tree=builds[displayName]{3,5},url[*]
获取指定Build相关信息
- JSON格式:
http://<Jenkins-Server-Address>/job/<Job-Name>/<Build-Number>/api/json?pretty=true
- XML格式:
http://<Jenkins-Server-Address>/job/<Job-Name>/<Build-Number>/api/xml
- 获取指定信息:
http://<Jenkins-Server-Address>/job/<Job-Name>/<Build-Number>/api/json?pretty=true&&tree=<filter>
通过curl工具
- 获取最近的buildNumber:
curl --silent http://<Jenkins-Server-Address>/job/<Job-Name>/lastBuild/buildNumber
- 获取最近稳定的buildNumber:
curl --silent http://<Jenkins-Server-Address>/job/<Job-Name>/lastStableBuild/buildNumber
- 获取最近成功的buildNumber:
curl --silent http://<Jenkins-Server-Address>/job/<Job-Name>/lastSuccessfulBuild/buildNumber
- 获取最近失败的buildNumber:
curl --silent http://<Jenkins-Server-Address>/job/<Job-Name>/lastFailedBuild/buildNumber
对Job的一些操作
- 获取(get方法)和更新(post方法)Job的description信息:
http://<Jenkins-Server-Address>/job/<Job-Name>/description
- 获取(get方法)和更新(post方法)Job的详细配置信息:
http://<Jenkins-Server-Address>/job/<Job-Name>/config.xml
- 不带参数直接执行(post方法):
http://<Jenkins-Server-Address>/job/<Job-Name>/build
- 带参数执行(post方法),例如:
http://<Jenkins-Server-Address>/job/<Job-Name>/buildWithParameters?token=testuser\&AAA='test123'\&BBB='test789'
- 禁用(post方法)指定的job:
http://<Jenkins-Server-Address>/job/<Job-Name>/disable
- 启用(post方法)指定的job:
http://<Jenkins-Server-Address>/job/<Job-Name>/enable
- 删除(post方法)指定的job:
http://<Jenkins-Server-Address>/job/<Job-Name>/doDelete
实例
创建Jenkins自由风格的Job,名称为:TestBuild ,内容很简单,shell中输出一句话echo "This is build jenkins api"
1. 远程调用Jenkins API启动任务
- 任务名:TestBuild
- 远程API服务地址:
http://ip:port/job/TestBuild/build
- 请求方法:POST
- 用户名、密码添加方法:username:password@hostname:port…
- 运行期望结果:
- 任务启动
- 服务返回http status code:201
接口工具直接请求:http://usernmae:password@ip:port/job/TestBuild/build,以下是Postman调用结果:
2.远程调用 Jenkins API返回最新任务编号
- 任务名:TestBuild
- 远程API服务地址:
http://ip:port/job/TestBuild/lastBuild/buildNumber
- 请求方法:GET
- 用户名、密码添加方法:username:password@hostname:port…
- 运行期望结果:
- 任务BuildNumber
- 服务返回http status code:200
接口工具直接请求:http://usernmae:password@ip:port/job/TestBuild/lastBuild/buildNumber,以下是Postman调用结果
3. 远程调用Jenkins API查询任务状态
- 任务名:TestBuild
- 远程API服务地址:
http://ip:port/job/TestBuild/<build number>/api/json
- 请求方法:GET
- 用户名、密码添加方法:username:password@hostname:port…
- 运行期望结果:
- 任务详情JSON
- 服务返回http status code:200
接口工具直接请求:http://usernmae:password@ip:port/job/TestBuild/1/api/json,以下是Postman调用结果
Java调用Jenkins API
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jing's Blog!