Jenkins提供了远程访问应用编程接口(Remote Access API)的方式来对于Job等进行控制。这篇文章整理一下常见的使用方式。
应用场景
为什么需要使用API方式进行Job的创建?自然是有很多原因的,比如:
- 需要创建的Jenkins的Job非常之多,大多又呈现有规律的方式,所以Job的创建成为了一个繁琐而又需要频繁操作的任务。这种场景下,使用API结合脚本进行自动化可以提高效率,降低手工错误的几率。
- 如果需要动态的生成Jenkins的Job,比如需要根据一定的中间结果在某个触发点进行自动生成,再比如生成的Job需要使用的参数也是动态运行阶段才能取到的值的场景下,事前手工创建Jenkins就不太可行了。
- 产品或者相关的功能,不希望用户直接使用Jenkins,而将Jenkins作为背后的执行引擎的场景,这种情况下自然也是使用API进行Job的创建更为妥切。
- …
API使用方式
Jenkins在设计的时候就考虑到了Restful的API的实现,可以通过如下三种方式对Jenkins中的对象进行访问控制以达到相关的目的
xml方式
可以使用xml方式进行API的使用,这种方式的优势在于可以使用强大的xpath特性进行相关的访问控制。
JSON方式
使用JSON方式进行操作,因为json基本上已经是应用之间数据交换的准标准格式之一,这种方式比较方便Javascript或者和其他应用的集成。
python方式
可以通过python-jenkins库对Jenkins进行控制操作。此库对Jenkins的API进行了进一步的包装,使用起来更加方便,但是一般需要安装python-jenkins,并通过python脚本的执行来达到集成的方式。可以较为方便的实现如下功能:
- 创建新Job
- 拷贝既存Job
- 删除Job
- 更新Job
- 获得Job的构建信息
- 获取执行中的构建信息
- 删除构建
- 清除Job的工作目录
- 设定构建序号(实际是通过Next Build Number 插件来实现)
所以可以看到常见对于Job和构建操作的需求大多已被包含,除此之外,还能做到如下的一些对于Jenkins的操作,所以对于权限的控制显得非常重要。
- 获得Master的版本信息
- 获得插件信息
- 创建节点
- 启用/禁用节点
- 获取节点信息
- 创建/删除/重新配置视图
- 设定Jenkins的静默关闭模式
…
更加具体的功能可以参看如下链接的说明:
这种方式功能较为强大,依赖也非常明显。
- 首先它是python库,需要python的运行环境支持(当然普通的linux一般都内嵌此环境)。
- 其次它需要手动安装,比如需要通过执行pip install python-jenkins进行安装,所以pip也需要进行安装。
- 再者,实际非python的应用中,完成此功能也需要通过执行python的脚本来完成相应的功能。
API功能
从上述对于python-jenkins的介绍中可以看到,通过API可以实现如下功能:
- 创建或者复制job
- 进行job的构建
- 获取Job相关信息
- 进行Job的删除
- 停止正在构建的Job
- …
在实际的实践中,对于Jenkins Job的增删改查操作以及执行构建或取消构建等常见操作均可实现,至于需要使用哪种方式,开发者则需要根据自己的情况进行选择。
使用方式与示例
常见操作的URI
| 操作 | HTTP动作 | URI | 使用示例 |
|---|---|---|---|
| 创建Job | POST | /createItem | /createItem?name=Job名称 |
| 拷贝Job | POST | /createItem | /createItem?name=Job名称&mode=copy&from=源Job名称 |
| 起用Job | POST | /job/job名称/enable | /job/job名称/enable |
| 禁用Job | POST | /job/job名称/disable | /job/job名称/disable |
| 删除Job | POST | /job/job名称/doDelete | /job/job名称/doDelete |
| 获取Job描述信息 | GET | /job/job名称/description | /job/job名称/description |
| 更新Job描述信息 | POST | /job/job名称/description | /job/job名称/description |
| 执行Job | POST | /job/job名称/build | /job/job名称/build |
| 获取Job的API信息 | GET | /job/job名称/api | /job/job名称/api |
| 停止执行中的Job | POS | /job/Job名称/构建序号/stop | /job/Job名称/构建序号/stop |
| 停止尚未执行的Job | POS | /queue/cancelItem?id=队列等待序号/queue/cancelItem?id=队列等待序号 |
返回信息格式
返回信息可以指定为xml/json/python方式,以/api为例,使用方式如下所示。
xml格式返回api信息示例:/api/xml
json格式返回api信息示例:/api/json
python格式返回api信息示例:/api/python
认证方式
如果相关的操作,比如创建Job需要相应的用户权限才能执行的情况下,通过API执行此操作自然也需要进行设定。Jenkins的API支持如下两种方式进行认证:
用户名 + 用户密码
以curl客户端访问为例,通过如下方式进行相关的用户认证
curl -u 用户名:用户密码 http://Jenkins服务的URL/具体操作的URI
用户名 + Token信息
以curl客户端访问为例,通过如下方式进行相关的用户认证
curl -u 用户名:用户Token http://Jenkins服务的URL/具体操作的URI
注:此处使用的Token为在Jenkins中可以查询到的(用户的配置页面可以查询到的API Token即为此处认证所使用的信息,而Token的修改也可以在此页面通过点击Change API Token按钮来进行)
参考内容
https://wiki.jenkins.io/display/JENKINS/Remote+access+API