【问题标题】:Show console output of a downstream job in upstream job在上游作业中显示下游作业的控制台输出
【发布时间】:2012-07-07 10:54:21
【问题描述】:

我正在使用 Jenkins。

Jenkins 有一份上游工作:A
詹金斯有一份下游工作:B

A 的控制台日志输出为:

1
2
3

B的控制台日志输出为:

A
B
C

我想要得到的是:

有什么办法,我可以在作业 A 的控制台日志中获取作业 B 的控制台输出,然后决定作业“A”是否成功(使用日志解析/grep 关键字来表示失败/错误等)。

【问题讨论】:

标签: logging jenkins console


【解决方案1】:

不确定您要实现什么,但它看起来相当做作。看看以下方法是否符合您的需求:作为构建步骤,从 Job A 通过 Parameterized Trigger Plugin 启动 Job B。 A 可以选择等待 B,然后根据 B 调整 A 的构建结果.

【讨论】:

  • 如果我选择该选项让 A 等待,并且如果 B 失败,那么我是否需要进行任何日志检查以找到错误,或者如果 B 失败,它会自动标记作业 A 失败(通过任何方式)。
  • 如果选择合适的选项,它会自动将A标记为失败。
【解决方案2】:

一种快速简便的方法是只使用 curl

即

curl http://myJenkinsServer:9090/job/ProjectNamel/$childJobLastBuildNumber/consoleFull  | sed "s#<span class="timestamp"><b>##g;s#</b> </span># #g" 

... 其中 $childJobLastBuildNumber 是子/下游作业的最新/最后构建#。

使用 curl 和 sed - 现在我可以在父作业中显示子作业/下游作业的输出,如果我运行上述 curl | 执行 Shell 中的 sed .. 命令。

【讨论】:

  • 为$childJobLastBuildNUmber分配正确值的最简单方法是什么
  • Job A --> 调用 Job B。Job B 将在 Job A 的工作区(您可以将其作为参数传递给 Job B)中创建一个文件(例如:properties.txt)并插入一个其中的键=值对(例如:JOB_B_BUILD_NUMBER=$BUILD_NUMBER),即现在作业 A 的工作区将具有包含上述变量=值的 properties.txt 文件。当作业 B 完成并且控制权返回到作业 A 时,您可以使用 $JOB_B_BUILD_NUMBER 代替 $childJobLastBuildNumber 或将此变量设置为 JOB_B_BUILD_NUMBER 的值并使用 curl。还有其他简单的方法,比如 Job A 的构建部分中的 cat path/jobBFullConsoleOutput。
【解决方案3】:

获取作业 B 的控制台输出。

我没有找到比使用cat 显示作业日志文件更好的方法。您必须将“作业 B 触发器”步骤设置为 block。因此,在工作 B 完成之前,工作 A 不会完成。然后在“job B trigger”步骤之后,添加一个执行shell脚本的步骤。

cat "$JENKINS_HOME/jobs/<PATH_TO_YOUR_JOB>/builds/$TRIGGERED_BUILD_NUMBER_<FOLDER_AND_JOB_NAME>/log"

注意$TRIGGERED_BUILD_NUMBER_&lt;FOLDER_AND_JOB_NAME&gt;是Jenkins动态注入的环境变量。

根据作业B判断作业A是否失败。

您不必解析下游作业的控制台输出。在上游作业的配置中,当触发作业 B 时,您可以选择。喜欢:

  • 如果触发的构建更差或等于
  • ,则此构建步骤失败
  • 如果触发的构建更差或等于,则将此构建标记为失败
  • 如果触发的构建更差或等于,则将此构建标记为不稳定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2019-04-06
    相关资源
    最近更新 更多