Jenkins“控制台输出”日志文件系统中的位置

时间:2016-05-23 08:51:44

标签: jenkins

我希望在创建此输出的同一作业中访问和grep Jenkins控制台输出作为后期构建步骤。使用>> log.txt重定向日志不是解决方案,因为我的构建步骤不支持此。

构建

echo "This is log"

构建后步骤:

grep "is" path/to/console_output

在文件系统中创建的特定日志文件在哪里?

8 个答案:

答案 0 :(得分:38)

@Bruno Lavit有一个很好的答案,但如果你想要,你只需访问日志并将其作为txt文件从作业的URL下载到你的工作区:

${BUILD_URL}/consoleText

然后,只需将此页面下载到${Workspace}

即可
  • 您可以使用" Invoke ANT"并使用GET目标
  • 在Linux上,您可以使用wget将其下载到工作区
祝你好运!

编辑: 文件系统上的实际日志文件不在从属服务器上,而是保存在主服务器中。您可以在$JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log

下找到它

如果您正在寻找其他版本,请将lastSuccessfulBuild替换为您正在寻找的版本。

答案 1 :(得分:10)

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

您必须build the plugin yourselfinstall the plugin manually

接下来,您可以添加类似的帖子构建步骤:

enter image description here

使用额外的构建后步骤(shell脚本),您将能够grep您的日志。

我希望它有所帮助:)。

答案 2 :(得分:10)

Jenkins将控制台日志存储在master上。如果您希望以编程方式访问日志,并且您在master上运行,则可以访问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存储构建文件的文件夹(比如测试xmls,环境变量,以及其他可能没有通过工件明确公开的东西),我们也可以解析它。 / p>

双倍加成奖金;我们也使用矩阵作业。这有时会使系统上的文件路径变得很麻烦。 .getLogFile()。getParent()消除了所有的痛苦。

答案 3 :(得分:5)

对于非常大的输出日志,可能难以打开(网络延迟,滚动)。这是我用来检查大日志文件的解决方案:

https://URL/jenkins/job/name/
在左列中的

,您会看到:View as plain text。单击右侧鼠标并选择save links as。现在,您可以将大日志保存为.txt文件。使用notepad ++打开它,您可以轻松浏览日志,而不会在滚动期间出现网络延迟。

答案 4 :(得分:3)

这是为了在有shell脚本构建步骤时使用。仅使用前两行来获取文件名。

您可以通过这种方式从shell脚本获取当前构建的控制台日志文件(使用bash magic)并检查它是否有错误字符串,如果找到则失败:

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意味着它找到了错误指示字符串。这使得构建失败。

答案 5 :(得分:2)

我在浏览器的以下位置找到了我的作业的控制台输出:

Person | Value Alan | 1 Dave | 4 Fred | 5 Perry | 6 Ted | 2

答案 6 :(得分:2)

日志位置:

${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/log

以文本形式获取日志并保存到工作区:

cat ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/log >> log.txt

答案 7 :(得分:1)

简单的解决方法是:

curl  http://jenkinsUrl/job/<Build_Name>/<Build_Number>/consoleText -OutFile <FilePathToLocalDisk>

或最后一次成功构建...

curl  http://jenkinsUrl/job/<Build_Name>/lastSuccessfulBuild/consoleText -OutFile <FilePathToLocalDisk>