我有一个包含100多个构建的Jenkins作业。我需要查找该作业所有构建的控制台输出中包含特定字符串的构建。是否有适用于此功能的插件?如何实现?
我有一个包含100多个构建的Jenkins作业。我需要查找该作业所有构建的控制台输出中包含特定字符串的构建。是否有适用于此功能的插件?如何实现?
我经常使用Jenkins脚本控制台来完成这样的任务。 Groovy插件提供了脚本控制台,但如果您想要将脚本控制台用于定期维护,则还需要Scriptler插件,它允许您管理运行的脚本。
从管理Jenkins -> 脚本控制台,您可以编写一个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|'
find $JENKINS_HOME/jobs -type f -name log | grep -v "$JOB_BASE_NAME" | xargs grep "$NEEDLE" | grep -v 'Commit message:'
- Generic Ratzlaugh要搜索所有作业的日志:
我增强了 @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}"
}
}
}
这里有一个日志解析插件,它可以:
在日志中突出显示感兴趣的行(错误、警告、信息)
将日志分成部分,并显示日志及其各个部分中错误、警告和信息行数的摘要。
将错误和警告的摘要与完整日志的上下文链接起来,使查找感兴趣的行变得容易。
在构建页面上显示错误和警告的摘要。
如果是旧日志,则假设您使用的是Linux,@jil 有答案。
我想再推荐一个插件,这篇博客文章向我介绍了TextFinder 插件,它允许你在工作区文件或控制台输出中搜索文本,并在找到文本时覆盖构建状态为成功/失败。
原帖作者没有说明找到文本后应该发生什么,但正是寻找此功能将我带到了这里。
def regex="any text or regular expression"
for (job in Jenkins.instance.items) {
for (build in job.builds) {
try {
def log = build.log
def match = log =~ "\n(.*${regex}.*)\n"
if (match) {
println "Job [${job.name}] - Build [${build.id}]: ${match[0][0]}"
}
}
catch (Exception e) {
println e
}
}
}
regex = "(TLS|Build).*timeout"
在我的构建中进行搜索,我找到了以下内容:
任务[OSP-AWS] - 构建[83]:构建超时:拨号tcp [::1]:6443:连接被拒绝
任务[OSP-GCP] - 构建[21]:无法连接到服务器:net/http:TLS握手超时
只需在Jenkins的标准搜索框(右上角)中使用关键词“console”即可:
console:"whatever you are looking for"
def job = Jenkins.instance.items.find {true}
。 - Alexander KlimetschekallItems
而不是items
。 - sm4rk0Jenkins.instance.allItems.find { job -> job.name == JOB_NAME }.builds.findAll { build -> build.log.find(FIND_REGEX) }
。 - sm4rk0