我有 100 多个构建的 Jenkins 工作。我需要搜索该作业的所有构建,以找到在控制台输出中具有特定字符串的构建。有什么插件吗?我怎么做?
8 回答
我经常使用Jenkins 脚本控制台来完成这样的任务。Groovy 插件提供了Script Console,但如果您打算使用 Script Console 进行定期维护,您还需要Scriptler 插件,它允许您管理您运行的脚本。
从Manage Jenkins -> Script Console,您可以编写一个 groovy 脚本,该脚本遍历作业的构建以查找匹配的字符串:
JOB_NAME = "My Job"
BUILD_STRING = "Hello, world"
def job = Jenkins.instance.items.find { it.name == JOB_NAME }
for (build in job.builds) {
def log = build.log
if (log.contains(BUILD_STRING)) {
println "${job.name}: ${build.id}"
}
}
如果没有其他要求,我会简单地在 shell 中完成,例如:
find $JENKINS_HOME/jobs/haystack -name log -exec grep -l needle {} \; \
| sed 's|.*/\(.*\)/log|\1|'
要在所有作业的日志中搜索:
我增强了 @DaveBacher 的代码以在 Jenkins 脚本控制台中运行。帮助我找到多个工作中发生的零星错误。
NEEDLE = "string_i_am_looking_for"
for (job in Jenkins.instance.getAllItems(Job.class)) {
for (build in job.builds) {
def log = build.log
if (log.contains(NEEDLE)) {
println "${job.name}: ${build.id}"
}
}
}
感谢大家提供宝贵的解决方案。经过一些额外的研究,我发现 Jenkins 中有一个插件可以做到这一点。
https://wiki.jenkins-ci.org/display/JENKINS/Lucene-Search
这将保存控制台输出结果,用户可以在搜索框中进行搜索。
只是为了抛出另一个插件,这篇博客文章向我指出了TextFinder 插件,它允许您在工作区文件或控制台输出中搜索文本,并在找到文本时将构建状态覆盖为成功/失败。
原始海报没有说明找到文本时会发生什么,但它是在搜索这个功能,才把我带到这里。
突出显示日志中感兴趣的行(错误、警告、信息)
将日志划分为多个部分,显示日志及其部分中的错误、警告和信息行数的摘要。
将错误和警告的摘要链接到完整日志的上下文中,便于在日志中找到感兴趣的行
在构建页面上显示错误和警告的摘要
如果它是旧日志,那么假设您在 Linux 上,@jil 会给出答案。
要在所有Jenkins 作业中搜索正则表达式模式,并打印第一个匹配行:
for (job in Jenkins.instance.items) {
for (build in job.builds) {
try {
def log = build.log
def match = log =~ "\n(.*${PATTERN}.*)\n"
if (match) {
println "Job [${job.name}] - Build [${build.id}]: ${match[0][0]}"
}
}
catch (Exception e) {
println e
}
}
}
例如,在我的构建中搜索PATTERN = "(TLS|Build).*timeout"
我发现:
作业 [OSP-AWS] - 构建 [83]:构建超时:拨打 tcp [::1]:6443:连接:连接被拒绝
作业 [OSP-GCP] - 构建 [21]:无法连接到服务器:net/http:TLS 握手超时
只需使用带有关键字“控制台”的 Jenkins 标准搜索(右上角):
console:"whatever you are looking for"