我通过http POST请求从jenkins外部触发参数化Jenkins:
我在作业配置中启用了可以从外部触发作业,我可以通过向jenkins发送带有如下内容的请求来触发它:
POST
http://myJenkins.com/myJob/buildWithParameters?token=MYTOKEN
参数:SCREEN_SIZE:27
触发作业创建会返回成功的201 CREATED http响应.
我的问题是我不知道创建的构建作业的ID.我想监视工作的状态.为了做到这一点,我需要知道id.否则,如果我只是采取最新的工作,我可能会采取错误的工作.
有没有可靠的方法来获取创建的工作的ID?
mor*_*wai 35
从Jenkins 1.519开始,Location将一个构建队列中的URL作为响应,指向构建队列中的一个项目:
$ nc localhost 8666
POST /jenkins/job/morgRemote/buildWithParameters?jenkins_status=1&jenkins_sleep=20&token=morgRemote HTTP/1.1
Host: localhost:8666
HTTP/1.1 201 Created
Location: http://localhost:8666/jenkins/queue/item/39/
Content-Length: 0
Server: Jetty(winstone-2.8)
Run Code Online (Sandbox Code Playgroud)
现在,如果您添加api/json(或api/xml依此类型)到它的末尾(所以在这个示例中它将是http://localhost:8666/jenkins/queue/item/39/api/json),那么您将获得一个文档,其中包含给定作业的构建ID.对JSON所检索的对象具有executable属性,这反过来又具有number和url属性.number是给定作业的构建ID(这里url是35),是jenkins构建页面的URL.
{
"actions" : [
{
"parameters" : [
{
"name" : "jenkins_status",
"value" : "1"
},
{
"name" : "jenkins_sleep",
"value" : "20"
}
]
},
{
"causes" : [
{
"shortDescription" : "Started by remote host 127.0.0.1",
"addr" : "127.0.0.1",
"note" : null
}
]
}
],
"blocked" : false,
"buildable" : false,
"id" : 39,
"inQueueSince" : 1423993879845,
"params" : "\njenkins_status=1\njenkins_sleep=20",
"stuck" : false,
"task" : {
"name" : "morgRemote",
"url" : "http://localhost:8666/jenkins/job/morgRemote/",
"color" : "red"
},
"url" : "queue/item/39/",
"why" : null,
"cancelled" : false,
"executable" : {
"number" : 35,
"url" : "http://localhost:8666/jenkins/job/morgRemote/35/"
}
}
Run Code Online (Sandbox Code Playgroud)
要注意两件事:
executable,canceled属性将丢失,并且why不会为空.您可以通过修改"安静期"设置或在jenkins全局配置中更改作业配置的"高级项目选项"中的此行为.:
...
"url" : "queue/item/39/",
"why" : "In the quiet period. Expires in 2.4 sec",
"timestamp" : 1423993879845
}
Run Code Online (Sandbox Code Playgroud)
kha*_*son 11
更新:
在其他的答案矿后〜8月加入.我当时没有意识到响应中的位置标题.对某些情况来说,这听起来不错.也就是说,基于答案中的警告和评论(特别是围绕参数化构建),似乎这个答案在某些情况下仍然具有一些实用性.
原始答案:
不幸的是,他们并没有尽可能简单明了.也就是说,通过像id这样的信息返回JSON响应.
但是,我相信一个可靠但非常重要的解决方法是利用您用来触发构建的URL中的cause参数,并在该原因中添加您可以在以后解析以确定您的唯一文本从您的自动化中触发它.
为了进一步使特定作业唯一化,如果多个同时运行,即使从您的自动化,也包括在cause参数内部的某种类型的唯一ID(它可能只是来自您的RDBMS或类似的序列ID ).
然后,您可以使用JSON API获取有关您远程触发的作业的信息.同样,它有点间接,但可行:
点击表单的网址:
http://<server>:<port>/job/<jobname>/lastBuild/api/json
Run Code Online (Sandbox Code Playgroud)
您可以添加?pretty=true到浏览器中的漂亮打印,以提高人类的可读性.
这将获得最后一次构建的JSON.它将包含actions属性中的cause属性,并且在那里(在另一个名为shortDescription的嵌套属性中)您将找到您添加的cause参数(如果这是您触发的构建之一).
您可以解析特殊静态文本和生成的ID,以查看它们是否匹配.如果他们这样做,那么你也可以从JSON中获取Jenkins id(搜索嵌套的buildNumber).
如果该构建要么根本不是由您的自动化触发,要么是,但是ID不匹配,您可以重复N-1构建的过程,直到找到您要查找的内容.
JSON的形式如下:
http://<server>:<port>/job/<jobname>/<buildNumber>/api/json
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18919 次 |
| 最近记录: |