搜索Jenkins作业的控制台输出

6za6bjd0  于 2023-06-21  发布在  Jenkins
关注(0)|答案(8)|浏览(115)

我有一个Jenkins的工作,有100多个版本。我需要搜索该作业的所有构建,以找到在控制台输出中具有特定字符串的构建。有插件吗?我该怎么做?

lf5gs5x2

lf5gs5x21#

我经常使用Jenkins Script Console来完成这样的任务。Groovy plugin提供了脚本控制台,但如果您打算使用脚本控制台进行定期维护,您还需要Scriptler plugin,它允许您管理运行的脚本。
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}"
  }
}
nzk0hqpo

nzk0hqpo2#

如果没有额外的要求,我会简单地在shell中完成,例如:

find $JENKINS_HOME/jobs/haystack -name log -exec grep -l needle {} \; \
    | sed 's|.*/\(.*\)/log|\1|'
cuxqih21

cuxqih213#

搜索所有作业的日志:
我增强了@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}"
    }
  }
}
nkkqxpd9

nkkqxpd94#

感谢大家宝贵的解决方案。经过一些额外的研究,我发现Jenkins中有一个插件可以做到这一点。
https://wiki.jenkins-ci.org/display/JENKINS/Lucene-Search
这将保存控制台输出结果,用户可以在搜索框中进行搜索。

zmeyuzjn

zmeyuzjn5#

Log Parser Plugin
突出显示日志中感兴趣的行(错误、警告、信息)
将所述日志划分为区段,所述区段显示所述日志及其区段内的错误、警告和信息行的数目的概要。
将错误和警告的摘要链接到完整日志的上下文中,以便在日志中查找感兴趣的行
在生成页上显示错误和警告的摘要
如果是旧日志,那么@jil有答案,假设你在Linux上。

kwvwclae

kwvwclae6#

为了抛出另一个插件,this blog post向我指出了TextFinder plugin,它允许您在工作区文件或控制台输出中搜索文本,并在找到文本时将构建状态覆盖为成功/失败。
最初的海报并没有说当找到文本时会发生什么,但正是搜索这个功能把我带到了这里。

zqdjd7g9

zqdjd7g97#

要在所有Jenkins版本的控制台输出中搜索正则表达式文本,请在https://{jenkins url}/manage/script中运行以下脚本。它将打印作业和内部版本号+找到的第一个匹配行:

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:connect:连接被拒绝
作业[OSP-GCP] -构建[21]:无法连接到服务器:net/http:TLS握手超时

hfyxw5xn

hfyxw5xn8#

只需使用Jenkins std搜索(右上角)和关键字“console”:

console:"whatever you are looking for"

相关问题