如何访问 Hudson 的“控制台输出”?

发布于 2024-11-10 14:44:09 字数 189 浏览 7 评论 0原文

我有一个在 Hudson 构建系统下运行的构建 bash 脚本,它会写入自己的日志文件。但是,Hudson 捕获它执行的构建脚本的所有 stdout 和 stderr,并将其显示为构建的“控制台输出”。此外,此输出保存在构建历史记录中。

如何从脚本本身访问此“控制台输出”?我想 1)将其与工件一起保存为日志; 2) 将其附加到通知电子邮件中。谢谢

I have a build bash script running under Hudson build system, which writes its own log file. However, Hudson captures all the stdout and stderr of the build script it executes and displays it as the "console output" of the build. Furthermore, this output is saved in the build history.

How can I access this "console output" from within the script itself? I'd like to 1) save it as log together with the artifacts; 2) attach it to the notification email. Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡看悲欢离合 2024-11-17 14:44:09
  1. 它与工件一起保存(构建目录顶层的 log 文件,即 jobs/jobname/builds/buildid/log)。
  2. 它会自动添加到 hudson 发送的电子邮件中,尽管从头开始被截断。

如果您需要在其他地方获取它,有两种选择:

  1. 您可以将脚本包装在一个块中,并通过 tee 传输它的输出。所以你会转换:

    <前><代码>#!/bin/sh
    做这个
    做到这一点

    至:

    <前><代码>#!/bin/bash
    {
    做这个
    做到这一点
    } 2>&1 |三通输出
    # 现在输出位于文件“output”中,而 Hudson 确实看到了它。

    不幸的是,我不确定如何在 tee 中强制行缓冲,以便实时日志打印在 Hudson 中工作(至少我的 cygwin 版本没有提到 -u 选项)。

  2. 您可以使用 Groovy 插件 和/或 Groovy Postbuild 插件 用于访问内部 API。构建步骤中的“系统”groovy 脚本和构建后的 groovy 脚本都可以访问 hudson.model.AbstractBuild ,您可以使用 hudson.model.AbstractBuild 获取控制台的内容。 org/hudson/model/Run.html#getLog(int)" rel="nofollow">hudson.model.Run#getLog(int) 方法。

  1. It is saved along with the artifacts (the log file in top-level of build's directory, i.e. jobs/jobname/builds/buildid/log).
  2. It is automatically added to the email hudson sends, though truncated from begining.

If you need to get it anywhere else, there are two options:

  1. You can have to wrap the script in a block and pipe it's output through tee. So you'd convert:

    #!/bin/sh
    make this
    make that
    

    to:

    #!/bin/bash
    {
        make this
        make that
    } 2>&1 | tee output
    # Now the output is in file 'output' while Hudson did see it.
    

    Unfortunately I am not sure how to force line-buffering in tee so the real-time log printing works in Hudson (at least my cygwin version does not mention -u option).

  2. You could use the Groovy plugin and/or Groovy Postbuild plugin to access the internal API. The "system" groovy script in build step and the post-build groovy script both have access to the build object (though in slightly different way) of type hudson.model.AbstractBuild and from that you can get the content of the console using the hudson.model.Run#getLog(int) method.

浸婚纱 2024-11-17 14:44:09

要在 tee 中强制行缓冲,只需使用 unbuffer {command} 启动程序,它是 expect 包的一部分。 unbuffer 的另一种替代方法是使用 stdbuf -eL -oL {command}

To force line-buffering in tee, just start the program with unbuffer {command} which is part of the expect package. Another alternative to unbuffer is to use stdbuf -eL -oL {command}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文