Jenkins API简介

  • Jenkins对外暴露的动作交互入口
  • 为外部程序提供入口,可以控制Jenkins
  • 支持协议-Http
  • API接口支持用户名、密码认证
  • Jenkins API支持的典型功能:运行Job,查看任务状态,返回任务编号,……,等

image-20210208164714852

调用Jenkins API环境准备

  • 创建一个有任务运行和状态查询的权限的用户
  • 准备一个打算通过API远程控制的任务
  • 关闭跨站脚本伪造请求保护

系统管理 -> 全局安全配置

image-20210208145337756

注意:对于高版本的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

完成后,再次到系统管理 -> 全局安全配置 中查看:

image-20210208154053275

常用接口使用方法

站点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"

image-20210208154419912

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调用结果:

image-20210208154557868

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调用结果

image-20210208154823712

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调用结果

image-20210208155349270

Java调用Jenkins API

代码示例:https://github.com/jinglv/java-jenkins-api