搜索Jenkins作业的控制台输出

use*_*159 12 console-output jenkins jenkins-plugins

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

Dav*_*her 13

我经常使用Jenkins脚本控制台执行此类任务.在Groovy插件提供了脚本控制台,但如果你要使用脚本控制台定期维护,你还需要在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}"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @dave bacher 我得到:groovy.lang.MissingPropertyException:没有这样的属性:为类构建:java.lang.Boolean 知道吗? (2认同)
  • 如果您的工作在子文件夹中,我认为这会失败(我收到与@DenCowboy 相同的错误)。 (2认同)

jil*_*jil 8

如果没有其他要求,我会在shell中进行,例如:

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

  • 虽然这是一个很好的答案,如果我的一个开发人员要求访问我们的Jenkins服务器以便他们可以对作业目录运行shell命令,我会非常害怕.:) (2认同)

RS1*_*980 6

要搜索所有作业的日志:

我增强了 @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}"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)