2011-05-30 43 views
4

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

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

回答

7
  1. 它保存随着工件(该log文件中生成的目录的顶层,即jobs/作业名/builds/buildid/log)。
  2. 它自动添加到电子邮件哈德森发送,虽然从开始截断。

如果你需要得到它在其他地方,有两种选择:

  1. 你可以有包裹脚本块,并把它管道三通的输出。所以,你会转换:

    #!/bin/sh 
    make this 
    make that 
    

    到:

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

    不幸的是我不知道如何强制行缓冲中tee所以实时日志打印在哈德森工作(至少我的cygwin版本不提-u选项)。

  2. 您可以使用Groovy plugin和/或Groovy Postbuild plugin来访问内部API。构建步骤中的“system”groovy脚本和构建后的groovy脚本都可以访问hudson.model.AbstractBuild类型的构建对象(尽管方式稍有不同),并且可以使用hudson.model.Run#getLog(int)方法获取控制台的内容。

+0

谢谢!这正是我们现在所做的(使用'tee'),但我认为从框架本身获得它。额外的好处(简化)是Hudson的日志将包含脚本本身的错误。由于某些原因,我们没有使用Hudson的任何功能,比如电子邮件通知 - 这些都是通过脚本手动完成的 – davka 2011-05-30 14:49:37

+0

@davka:自从我编写了答案之后,我开始使用Groovy和Groovy后构建插件,因此我添加了描述如何从这些日志中获取日志。 – 2014-09-11 09:26:54

+0

环境变量:BUILD_URL \t可以找到此构建结果的URL(例如http:// buildserver/jenkins/job/MyJobName/666 /) – ldgorman 2014-11-21 14:46:05

0

要强制线缓冲在三通,只是开始unbuffer {command}程序这是expect包的一部分。 unbuffer的另一种替代方法是使用stdbuf -eL -oL {command}