我需要获取一个jenkins作业的ID,我开始使用REST API(使用python)。 从Jenkins 1.529开始,似乎可以使用API abd触发构建,以获取指向队列中作业的URL。
詹金斯的文档:
执行构建
要以编程方式安排新版本,请发布到此URL。如果 build有参数,发布到此URL并提供参数 表格数据。无论哪种方式,成功的排队将导致201 状态代码 ,位置HTTP标头指向项目的URL 队列 。通过轮询队列项的api / xml子URL,您可以 跟踪排队任务的状态。通常,任务将进行 通过一些状态转换,然后最终它变成了 取消(查找“已取消”布尔属性)或获取 执行(查找通常指向的“可执行”属性 AbstractBuild对象。)
但我没有成功获得有用的网址。
我试过了:
import requests
requestKwargs ={'headers': {'Content-Type': 'application/x-www-form-urlencoded'}, 'data': {'json': '{"parameter": []}'}, 'verify': True}
url=server+'job/test/build/'
req=requests.post(url, **requestKwargs)
print 'status',req.status_code
location=req.headers['location']
print 'location is:',location
此代码的输出为:
状态201
location is: http://SERVER_PORT/job/test/build/
如何使用“位置”信息来跟踪队列任务的状态?
感谢。
答案 0 :(得分:4)
我通过为我希望以编程方式进行交互的作业提供“ident”参数来解决这个问题。
提交作业时,我生成一个uuid并将其作为ident /job/<job_name>/buildWithParameters
的身份参数提交。
然后我得到/queue/api/json
并遍历排队项目列表,在其中搜索具有该uuid项目的项目。获得队列ID。
然后我每隔N秒使用此队列ID轮询/queue/item/<queue_id>/api/json
,等待jenkins在响应中提供内部版本号(它将在构建开始后进行)。您可以使用此内部版本号构建所需的网址/job/<job_name>/<build_number>
。
您实际上需要在jenkins作业中添加ident作为参数。这是一种痛苦,但它可靠地运作。
答案 1 :(得分:3)