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

8zzbczxx  于 2023-03-17  发布在  Jenkins
关注(0)|答案(9)|浏览(648)

我希望在创建此输出的同一作业中访问Jenkins控制台输出并将其作为生成后步骤进行grep。使用>> log.txt重定向日志不是解决方案,因为我的生成步骤不支持此操作。
构建版本:

echo "This is log"

构建后步骤:

grep "is" path/to/console_output

在文件系统中的什么位置创建特定的日志文件?

enyaitl3

enyaitl31#

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

${BUILD_URL}/consoleText

那么,只需将此页面下载到${Workspace}

  • 您可以使用“Invoke ANT“和GET目标
  • 在Linux上,您可以使用wget将其下载到您的工作区
  • 等等。

祝你好运!
编辑:文件系统上的实际日志文件不在从属计算机上,而是保存在主计算机上。您可以在以下位置找到它:$JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log
如果您正在寻找另一个构建版本,只需将lastSuccessfulBuild替换为您正在寻找的构建版本。

gcxthw6b

gcxthw6b2#

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存储构建附属品(比如测试xml、环境变量和其他可能没有通过工件显式公开的东西)的文件夹,我们也可以解析这些附属品。
双倍附加奖金;我们也使用矩阵作业。2这有时候会使系统上的文件路径推断变得很痛苦。3.getLogFile()。4.getParent()消除了所有的痛苦。

jslywgbw

jslywgbw3#

您可以安装这个Jenkins Console log插件,作为构建后的一个步骤在您的工作区中写入日志。
你必须build the plugin yourselfinstall the plugin manually
接下来,您可以添加如下所示的生成后步骤:

通过一个额外的构建后步骤(shell脚本),您将能够grep您的日志。
我希望这有帮助:)

m0rkklqb

m0rkklqb4#

日志位置:

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

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

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

qojgxg4l5#

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

https://${URL}/jenkins/job/${jobName}/${buildNumber}/

在左列中,您可以看到:View as plain text。用鼠标右键点击它,然后选择save links as。现在你可以将你的大日志保存为.txt文件。用记事本++打开它,你可以很容易地浏览你的日志,在滚动过程中没有网络延迟。

7nbnzgx9

7nbnzgx96#

我在浏览器的以下位置找到了作业的控制台输出:
http://[Jenkins URL]/job/[Job Name]/default/[Build Number]/console

6ovsh4lw

6ovsh4lw7#

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

rsaldnfx

rsaldnfx8#

简单的解决办法是:

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

或上一次成功生成的时间...

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

mw3dktmi9#

如果你有jenkins master的访问权限,可以直接访问或只访问使用任何持久卷的文件夹。下面是获取日志文件的示例路径。
可以看到数据文件夹中的部分,这是你的Jenkins文件夹。

相关问题