Jenkins REST API 使用指北

0X00 写在前面

作为持续交付开源工具中最出名的一个,Jenkins 在业界使用范围很广。但笔者了解到绝大多数使用者都在考虑将 Jenkins 作为其持续交付系统的一个组件来使用,而恰好 Jenkins 也提供了强大的 REST API。因此,了解清楚 Jenkins REST API 的来龙去脉并使用好它,是一件至关重要的事情。

0X01Jenkins REST API 是怎么弄出来的?

Jenkins Plugin 基础开发入门 中,笔者详细介绍了在设计上的三大主要概念,它们分别是:Stapler,持久化和插件。

其中,Stapler 技术的引入使得 Jenkins 可以自动为应用程序对象绑定 URL,并创建直观的 URL 层次结构。

所以,通过该项技术的引入,我们可以快速访问对应的Job及其相应资源。而这些资源包含的内容有哪些呢?可以说 Jenkins 中几乎所有的对象,包含 Jenkins,Job,Build,Computer 等等,都是可以通过具体的 URL 进行访问和控制的。

0X02 如何获取 Jenkins REST API?

大家先来看看 Jenkins 自带的这句文档:

Many objects of Jenkins provide the remote access API. They are available at /jenkins/.../api/ where "..." portion is the object for which you'd like to access.

在 Jenkins 设计之时就已经支持了让我们通过 REST API 的方式拿到所有的对象的接口。

此外,再来看这一段:

XML API
Access data exposed in HTML as XML for machine consumption. Schema is also available.
You can also specify optional XPath to control the fragment you'd like to obtain (but see below). For example, ../api/xml?xpath=//[0].

For XPath that matches multiple nodes, you need to also specify the "wrapper" query parameter to specify the name of the root XML element to be create so that the resulting XML becomes well-formed.

Similarly exclude query parameter can be used to exclude nodes that match the given XPath from the result. This is useful for trimming down the amount of data you fetch (but again see below). This query parameter can be specified multiple times.
XPath filtering is powerful, and you can have it only return a very small data, but note that the server still has to build a full DOM of the raw data, which could cause a large memory spike. To avoid overloading the server, consider using the tree parameter, or use the xpath parameter in conjunction with the tree parameter. When used together, the result of the tree parameter filtering is built into DOM, then the XPath is applied to compute the final return value. In this way, you can often substantially reduce the size of DOM built in memory.

JSON API
Access the same data as JSON for JavaScript-based access. tree may be used.

Python API
Access the same data as Python for Python clients. This can be parsed into Python object as eval(urllib.urlopen("...").read()) and the resulting object tree is identical to that of JSON. However, when you do this, beware of the security implication. If you are connecting to a non-trusted Jenkins, the server can send you malicious Python programs.

In Python 2.6 or later you can safely parse this output using :
ast.literal_eval(urllib.urlopen("...").read())

所以,对象的数据也可以通过固定的 URL 进行访问或者查询,且均支持三种形式:

  1. XML: /jenkins/.../api/xml
  2. JSON: /jenkins/.../api/json
  3. PYTHON:/jenkins/.../api/python

为了加深大家的主观认知,大家可以看看 Jenkins 官方搭建的 Jenkins 的 以下三个 URL:

Jenkins on Jenkins

API in root URL

Data in root URL

0X03 常用 Jenkins REST API 列表

Job - CRUD

Create a Job with config.xml

curl -X POST "http://user:password@<Jenkins_URL>/createItem?name=<Job_Name>" --data-binary "@newconfig.xml" -H "Content-Type: text/xml"

Retrieve/Fetch a Job's config.xml

curl -X GET http://user:password@<Jenkins_URL>/job/<Job_Name>/config.xml

Update a Job's config.xml

curl -X POST http://user:password@<Jenkins_URL>/job/<Job_Name>/config.xml --data-binary "@mymodifiedlocalconfig.xml"

Delete a job

curl -X POST http://user:password@<Jenkins_URL>/job/<Job_Name>/doDelete

Build - CONTROL

Perform a Build

curl -X POST http://user:password@<Jenkins_URL>/job/<Job_Name>/build

如果该 build 使用参数化构建,则需用如下方式进行构建:

curl -X POST http://user:password@<Jenkins_URL>/job/JOB_NAME/build --data --data-urlencode json=<Parameters>

Retrieve a Build

curl -X GET http://user:password@<Jenkins_URL>/queue/api/json?<Filter_Condition>

例如,可以按照如下的方式查找名字为 name 的 task :

curl -X GET http://user:password@<Jenkins_URL>/queue/api/json?tree=items[id,task[name]]

或者可以直接按如下方式访问 Job 最近一次构建的详情:

curl -X GET http://user:password@<Jenkins_URL>/lastBuild/api/json

Stop a Build

curl -X POST http://user:password@<Jenkins_URL>/job/<Job_Name>/<Build_Number>/stop

或者

curl -X POST http://user:password@<Jenkins_URL>/queue/cancelItem?id=<Queue_Item>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容