我正在通过http POST请求从jenkins外部触发参数化的Jenkins:
我在作业配置中启用了可以从外部触发作业的功能,并且可以通过向詹金斯发送包含以下内容的请求来真正触发该作业:
POST
http://myJenkins.com/myJob/buildWithParameters?token=MYTOKEN参数:SCREEN_SIZE:27
触发作业创建将返回成功的201 CREATED http响应。
我的问题是我不知道所创建的构建作业的ID。我想监视工作状态。为了做到这一点,我需要知道的ID。否则,如果我只是接受这份工作的最新版本,那我可能会接受错误的工作。
是否有可靠的方法来获取所创建作业的ID?
更新:
在其他的答案矿后〜8月加入。我当时不知道响应中的位置标头。在某些情况下,这确实是一个不错的选择。就是说,根据答案和评论中的警告(尤其是关于参数化构建),该答案似乎在某些情况下仍具有一定的实用性。
原始答案:
不幸的是,他们并没有使事情变得如此简单。也就是说,例如,返回带有ID之类的信息的JSON响应。
但是,我相信一个可靠的解决方法(虽然肯定是不平凡的)是利用您用于触发构建的URL中的cause参数,并在该原因中添加唯一的文本,您可以稍后对其进行分析以确定您从您的自动化触发了它。
为了进一步使特定作业具有唯一性,即使是在自动化的情况下,多个作业同时运行,也要在cause参数内包括某种类型的唯一ID(可能只是RDBMS或类似的序列ID )。
然后,您可以使用JSON API获取有关您要远程触发的作业的信息。再说一次,它是间接的,但是可行的:
命中以下形式的URL:
http://<server>:<port>/job/<jobname>/lastBuild/api/json
您可以?pretty=true
在浏览器中添加漂亮的打印效果,以提高人类可读性。
这将为您提供上一版本的JSON。它将包含的原因的内部属性的行为属性,并在那里(在另一个嵌套命名属性SHORTDESCRIPTION),你会发现事业参数你补充说,如果这是你触发的构建之一。
您可以同时解析特殊的静态文本和生成的ID,以查看它们是否匹配。如果这样做的话,那么您也可以从JSON中获取Jenkins id(搜索buildNumber,它是嵌套的)。
如果该构建不是完全由自动化触发的,或者根本不是由您的自动化触发的,但是ID不匹配,则可以对N-1构建重复该过程,直到找到所需的内容。
JSON将采用以下形式:
http://<server>:<port>/job/<jobname>/<buildNumber>/api/json
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句