【问题标题】:Jenkins job not seeing console output詹金斯工作没有看到控制台输出
【发布时间】:2016-04-11 19:04:36
【问题描述】:

首先,我不是管理员,所以可能存在一些不正确的配置,导致了这个问题。我可以配置我有权配置的一项作业,仅此而已。

我正在执行 Windows 构建,使用 shell 脚本(使用 git-bash.exe)和 Windows 批处理文件的组合。唯一的 jenkins 构建脚本是一个 shell 脚本,仅包含:

#!c:\Program Files\Git\git-bash.exe
$WORKSPACE/builds/step1.sh |& tee $WORKSPACE/build_output.log

(我的 git-bash.exe 版本是 '4.3.42(5)-release',|& 速记似乎和2>&1 | 一样有效。)

该脚本 (step1.sh) 做了一些准备工作,然后通过依次调用批处理文件和 shell 脚本来启动构建过程。

构建成功,我得到了一个不错的 MSI 文件。 build_output.log 文件包含整个构建过程的完整日志,这也显示在从站的控制台中。

问题是,jenkins 无法捕获该控制台输出(即 build_output.log 的内容)。我看到的控制台输出是:

Started by user Jon
[EnvInject] - Loading node environment variables.
Building remotely on Win2k12r2_x64-build (Build VM (xx.xx.xx.xx) Windows Client) in workspace /f/git/project
[project] $ c:\Program Files\Git\git-bash.exe C:\Users\ADMINI~1\AppData\Local\Temp\1\hudson386179994146389782.sh
Notifying upstream projects of job completion
Finished: SUCCESS

我需要做什么才能在 jenkins 中捕获构建日志?我特别不想将我的 step1.sh 脚本放入 jenkins,因为我希望能够准确地重现构建团队(管理 jenkins 服务器)在构建失败时看到的内容。我们希望构建脚本在源代码控制下,所有人都可以使用并且所有人都可以运行(在他们自己的沙箱中)。我确实尝试过简单地从 jenkins 两行 shell 脚本中捕获构建日志,看看是否捕获了它......它没有。

【问题讨论】:

    标签: shell jenkins build


    【解决方案1】:

    我在 Jenkins 中使用了类似的命令来记录日志:

    ./foo.sh 2>&1 | tee output.txt
    

    (我使用的Jenkins服务器上git-bash.exe的版本不支持|&,所以我不得不使用长格式重定向stderr。)

    在您的情况下,如果控制台日志或 build_output.log 均不包含任何文本,我猜它是以下之一:

    1. step1.sh 实际上并没有输出任何东西

      疑难解答:在没有任何重定向或tee 的情况下在 Jenkins 中运行该脚本,并验证它是否在控制台上打印了一些内容。不要只依赖本地运行,以防您的 Jenkins 环境中的某些东西(例如 Jenkins 插件)导致问题。

    2. |& 静默失败

      疑难解答:将您的作业配置为运行echo foo>&2 |& cat,并确认您在控制台中看到“foo”。如果失败,请尝试长格式:echo foo>&2 2>&1 | cat

    3. tee 静默失败

      疑难解答:将您的作业配置为运行echo foo>&2 |& tee out.txt,并确认您在控制台和out.txt 中都看到了“foo”。如果失败,请尝试长格式:echo foo>&2 2>&1 | tee out.txt

    【讨论】:

    • 奇怪的是,echo foo>&2... 不起作用(tee 没有得到输出)但删除 '>&2' 允许它(您要求我尝试的测试)继续进行。我在从属服务器的控制台窗口和日志中看到“foo”,但在詹金斯服务器的控制台输出中没有看到。在从站上运行一个简单的脚本“bob.sh”也没有,只包含#!/bin/sh.exe^Mecho foo - 我在从站的控制台窗口中看到输出,该窗口短暂弹出并在输出日志文件中,但在詹金斯服务器上没有。我的原始构建脚本输出到从属服务器和日志文件,但在 jenkins 中没有捕获任何内容。
    • 您说您看到“控制台窗口短暂弹出”。您是否在 sh 脚本中生成新的控制台窗口?如果是这样,那可能是你的问题。您可以发布您的脚本示例吗?
    • 不,step1.sh 将在运行 step1.sh 的控制台窗口的上下文中“调用”批处理文件或执行 shell 脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2020-07-04
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    相关资源
    最近更新 更多