2016-05-23 132 views
10

我想在创建此输出的同一作业中访问和grep Jenkins控制台输出作为后期构建步骤。使用>> log.txt重定向日志不是一种解决方案,因为我的构建步骤不支持此功能。Jenkins文件系统中的“控制台输出”日志位置

体形:

echo "This is log" 

后生成步骤:

grep "is" path/to/console_output 

哪里特定日志文件在文件系统中产生的?

回答

16

@Bruno Lavit有一个伟大的答案,但如果你想你可以访问日志和作业的URL下载的txt文件到您的工作空间:

${BUILD_URL}/consoleText 

然后,它只是下载此页到您的${Workspace}

  • 您可以使用“Invoke ANT”,并使用GET目标的问题
  • 在Linux上,你可以使用wget将其下载到您的工作空间

祝你好运!

编辑: 文件系统上的实际日志文件不在从站上,但保存在主机中。你可以在下面找到它:$JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log

如果你正在寻找另一个版本,只需用你正在寻找的版本替换lastSuccessfulBuild

+0

在过去,我尝试了@ Dvir669提出的解决方案,并且wget命令没有获得完整的控制台日志。这就是为什么我使用了我的解决方案中描述的方法。所以如果你想在构建日志步骤中使用你的构建日志,我的解决方案会更好(我认为)。 –

+0

由于该文件夹仅被称为'lastSuccessful',因此我的Jenkins失败。但是当一个构建正在运行时,'lastSuccessful'是一些以前的成功构建,而不是当前的构建。如果成功完成,当前版本只能成为最后一个成功版本。 –

+0

如果构建作业位于文件夹内,这也会失败。 JOB_NAME不包含文件夹中存在的“/ jobs /”中间文件夹。 –

6

您可以安装此Jenkins Console log插件,以便在工作区中将日志写入后期构建步骤。

你必须build the plugin yourselfinstall the plugin manually

接下来,您可以添加后生成步骤类似:

enter image description here

有了一个额外的后生成步骤(shell脚本),你就可以到grep日志。

我希望它帮助:)

+0

然而,它看起来像一个小插件,我仍然认为它可能没有任何额外的安装。必须有这种插件获取控制台输出的方式。但如何以及从哪里? – Sayid

+0

我试着安装这个插件,将zip改为hpi,并尝试从管理插件的高级选项上传,但它给出错误'处理请求时发生了一个问题。请检查我们的错误跟踪器,看看是否已经报告过类似的问题。如果已经报告,请投票并对其发表评论,以便让我们评估问题的影响。如果您认为这是一个新问题,请提交新问题。当你提交问题时,确保添加整个堆栈跟踪以及Jenkins和相关插件的版本。' –

+0

@Sweety您是否在从高级部分上传之前构建插件?你必须从Github获得源代码,构建这个插件并上传hpi文件。有一个关于如何在原始文章中构建Jenkins插件的链接。 –

5

Jenkins将控制台日志存储在主服务器上。如果您希望对日志进行编程访问,并且您正在主服务器上运行,则可以访问Jenkins已有的日志,而无需将其复制到工件或必须获取http作业URL。

http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Run.html#getLogFile(),这将返回控制台输出的File对象(在jenkins文件系统中,这是构建输出目录中的“log”文件)。

就我而言,我们使用链接(子)作业来解析和分析父作业的版本。

当使用在Jenkins中运行的groovy脚本时,您会得到一个名为“build”的对象用于运行。我们使用它来获取上游作业的http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Build.html,然后调用该作业的.getLogFile()。

新增奖金;因为它只是一个File对象,所以我们调用.getParent()来获取Jenkins存储的文件夹(如test xmls,环境变量以及其他可能不会通过构件显式公开的文件),我们也可以解析它们。

双额外奖金;我们也使用矩阵作业。这有时会导致推断系统上的文件路径很痛苦。 .getLogFile()。getParent()带走了所有的痛苦。

1

,我发现我的工作在浏览器控制台输出在以下位置:

http://[Jenkins URL]/job/[Job Name]/default/[Build Number]/console

2

这是专为使用,当你有一个shell脚本生成步骤。只使用前两行来获取文件名。

你可以得到控制台日志文件(使用bash魔法)对当前构建从一个shell脚本,这样一来,检查是否有某些错误字符串,失败的工作,如果发现:

logFilename=${JENKINS_HOME}/${JOB_URL:${#JENKINS_URL}} 
logFilename=${logFilename//job\//jobs\/}builds/${BUILD_NUMBER}/log 

grep "**Failure**" ${logFilename} ; exitCode=$? 
[[ $exitCode -ne 1 ]] && exit 1 

你必须通过采用JOB_URL构建文件名,剥离主引导程序名部分,添加JENKINS_HOME路径,将“/ job /”替换为“/ jobs /”以处理所有嵌套文件夹,添加当前内部版本号和文件名称。

如果找到字符串,grep将返回0,如果存在文件错误,则返回2。所以1意味着它找到了错误指示字符串。这使得构建失败。

相关问题