当前位置: 首页 > 面试题库 >

远程触发构建后检查Jenkins作业状态

端木明贤
2023-03-14
问题内容

我有一个脚本,可以使用令牌远程触发Jenkins上的作业。这是我的脚本

JENKINS_URL='http://jenkins.myserver.com/jenkins'
JOB_NAME='job/utilities/job/my_job'
JOB_TOKEN='my_token'

curl "${JENKINS_URL}/${JOB_NAME}/buildWithParameters?token=${JOB_TOKEN}"

运行它之后,我得到以下响应:

* Hostname was NOT found in DNS cache
*   Trying 10.5.187.225...
* Connected to jenkins.myserver.com (10.5.187.225) port 80 (#0)
> GET /jenkins/job/utilities/job/my_job/buildWithParameters?token=my_token HTTP/1.1
> User-Agent: curl/7.37.1
> Host: jenkins.myserver.com
> Accept: */*
> 
< HTTP/1.1 201 Created
* Server nginx/1.6.2 is not blacklisted
< Server: nginx/1.6.2
< Date: Tue, 03 Feb 2015 23:40:47 GMT
< Content-Length: 0
< Location: http://jenkins.myserver.com/jenkins/queue/item/91/
< Connection: keep-alive
< Cache-Control: private
< Expires: Wed, 31 Dec 1969 16:00:00 PST
< 
* Connection #0 to host jenkins.myserver.com left intact

我注意到它返回标题中的队列URL:http :
//jenkins.myserver.com/jenkins/queue/item/91。但我不知道该如何使用此返回URL。

1)我想知道是否有人知道如何检查我刚刚创建的工作的状态?

2)由于上述回应并未传回工作编号,因此我无法真正使用此api呼叫:

curl http://jenkins.myserver.com/jenkins/job/utilities/job/my_job/8/api/json

检查状态。因此,从上述响应中获取位置网址后,在哪里可以获取工作名称和工作编号?

谢谢


问题答案:

触发作业时,该作业将放入队列中。仅在开始运行时才创建实际的构建,并在那时获得该构建的编号。如果您的所有执行者都很忙,有时可能需要很长时间才能创建构建并开始运行。

触发作业时获取内部版本号的唯一方法是使用Jenkins CLI的“内部”命令。如果使用-w选项,则在构建开始之前该命令将不会返回,然后将显示“
Started build #N”。

您实际上不需要Java cli.jar,只需一个ssh客户端就足够了。参见https://wiki.jenkins-
ci.org/display/JENKINS/Jenkins+SSH

除此之外,没有已知的解决方案。您可能可以搜索整个构建,并找到在您完成工作时就触发的一个构建,但这是很多工作。



 类似资料:
  • 问题内容: 我正在通过http POST请求从jenkins外部触发参数化的Jenkins: 我在作业配置中启用了可以从外部触发作业的功能,并且我可以通过向詹金斯发送包含以下内容的请求来真正触发它: POST http://myJenkins.com/myJob/buildWithParameters?token=MYTOKEN 参数:SCREEN_SIZE:27 触发作业创建将返回成功的201

  • 我目前正在使用全局构建统计插件,显示我们的工作状态在一个良好的格式图表。

  • 问题内容: 我正在使用以下方法远程调用Jenkins作业: 这里job被调用,并且是我使用的安全令牌。 现在,我需要将一些参数传递给此作业的build.xml文件,即。 我还没有弄清楚如何传递变量。 问题答案: 请参阅Jenkins文档: 参数化构建 以下是您感兴趣的行:

  • 问题内容: 当我尝试使用以下命令触发构建时,出现以下错误: 卷曲http:// jenkins_server:port / jenkins / job / job_name / build?token = token_name 输出: 需要验证 <-您的身份验证为:您所在的匿名 组: 权限,你需要有(但没有):hudson.model.Hudson.Read …这是暗示:hudson.securi

  • 问题内容: 我正在使用Perl脚本使用LWP模块在Jenkins中触发构建。这行得通,但是执行完作业后,我想解析控制台输出。 有办法得到这个吗? 问题答案: 登录到Jenkins,并查看网页底部右侧附近的内容,然后单击链接。这将为您提供有关Jenkins RESTful API的信息 ,这是在您了解如何构造URL后从Jenkins提取信息的好方法。 并且,这是获取控制台文本的方法: 您可以使用Pe

  • 这是如何配置Git后提交挂钩的扩展或变体 我的问题是,我不希望每次提交一次构建。相反,我想要的是一次触发一个构建的单个实例。当单个实例正在运行时,新的请求可能会累积,但在当前构建完成后,应该将它们合并到单个新构建中。 显然,触发应该在有意义的相关git版本上,通常来自同一个分支,并且构建应该始终在最靠近HEAD的触发版本上执行(这有意义吗?)。 因此,为了解决这个问题,假设每个人都在努力掌握,我放