如何在远程触发构建后获取Jenkins的“控制台输出”?

30

我正在使用Perl脚本通过LWP模块触发Jenkins中的构建。虽然这个方法可行,但在执行作业后,我想解析控制台输出。

有没有办法获取它?

3个回答

75

登录 Jenkins 并在网页底部靠近右侧查看,然后单击 REST API 链接。这会为您提供有关 Jenkins RESTful API 的信息,一旦了解如何构造 URL,它是从 Jenkins 拉取信息的好方法。

以下是获取控制台文本的方法:

$ curl "${JENKINS_URL}/job/${JOB_NAME}/lastBuild/consoleText"

您可以使用Perl的各种LWP模块与Jenkins进行通信。


啊...当我看到这个时,我非常兴奋,但是日志消息中没有包含时间戳!!!至少在版本1.595上是这样的。 - Clintm
1
我认为时间戳不是日志的一部分。这是 Jenkins 在查看日志时插入时间戳的选项。如果您将 consoleText 替换为 consoleFull,则可以在 HTML 中获取日志。当然,您需要解析它以提取内容。在 Windows 上,您可以免费使用 Powershell 进行操作。 $resp = Invoke-Webrequest "$(JENKINS_URL)/job/$(JOB_NAME)/lastBuild/consoleFull"
$resp.ParsedHtml.body.innerText > someFile.log (Powershell Core 也可在 Linux 上使用,但由于需要 MS DLL,因此在对象中不包括 ParsedHtml)
- Ingemar
2
现在我找到了真正的解决方案:D ${JENKINS_URL}/job/${JOB_NAME}/lastBuild/timestamps?appendLog&elapsed=HH:mm:ss.S - Ingemar
1
@Ingemar 我相信 timestamps API 方法是由 Timestamper 插件 提供的。它还提供了诸如 startLineendLinelocale 等参数。 - cod3monk3y
有没有办法同时包含待处理的构建?当我触发一个构建时,它需要2到3秒钟来初始化,在此期间latestBuild确实返回上一个构建。我不想添加睡眠或其他东西。 - nehem
即使在上述URL中将?token={tokenname}作为请求参数传递,我仍然遇到了身份验证失败的问题。我做错了什么吗? - Vishal A

0
使用Jenkins的Log Parser Plugin。阅读这里的第24页以获取配置和其他详细信息。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接