解决方法:聚合下游测试结果

时间:2012-06-15 13:06:24

标签: jenkins

据我所知,“聚合下游测试结果”功能无法按预期工作(并且很难找到有用的文档)。我想实现非常相似的功能:

作业构建并行触发作业 T1 T2 (其中 T1 执行FindBugs, T2 做PMD)。

场景1: 一旦 T1 T2 完成(我可以使用“Join”插件实现)我想收集工件( T1 / findbugs.xml和 T2 /pmd.xml)。然后分析这些并生成好的统计数据。

场景2(我更喜欢这个): 与方案1类似,但分析是作为 T1 T2 (并行!)的一部分完成的。一旦 T1 T2 完成,分析结果就会合并到很好的统计数据中。

我的问题: 对于方案1,我不知道如何引用下游项目 T1 T2 。我可以使用上一次成功的构建,但在考虑许多并行作业时,这似乎很奇怪。

对于方案2,我不知道如何导入FindBugs / PMD / Checkstyle / SLOCcount / ...插件所需的数据,以便相应的图形(也是?)出现在 T1之外 / * T2 *。

谢谢, 卡斯滕

3 个答案:

答案 0 :(得分:10)

以下是一个稍微简单的方案的大纲,但我认为您可以轻松地将其概括为多个下游作业的情况。诀窍是在下游工作中使用“标记”参数。

P 成为父作业, D 作为下游作业。

  1. P 的实例(构建)通过Parameterized Trigger Plugin通过构建步骤调用 D 作为构建后步骤)并等待 D 完成。与其他参数一起, P 传递给 D 一个参数 - 让我们称之为 PARENT_ID - 基于 P build的 BUILD_ID
  2. D 执行测试并将其存档为工件(以及jUnit报告 - 如果适用)。
  3. P 然后执行外部Python(或内部Groovy)脚本,通过 PARENT_ID 找到 D 的相应构建(您迭代构建 D 并检查 PARENT_ID 参数的值)。然后,该脚本将工件从 D 复制到 P P 将其发布。
  4. 如果使用Python(这就是我所做的) - 利用Python JenkinsAPI wrapper。如果使用Groovy - 使用Groovy Plugin并将脚本作为系统脚本运行。然后,您可以通过其Java API访问Jenkins。

答案 1 :(得分:8)

malenkiy_scot的帖子增加了两个:

  1. 您实际上并不需要说明中步骤3的脚本:“从另一个项目复制工件”构建步骤允许指定包含参数的源作业。

    例如,使用父级表示法,它可以使用D作为“项目名称”来复制正确执行作业D/PARENT_ID=EXPECTED_VALUE的工件。

  2. 您可以使用预定义的$JOB_NAME(基本上相同),而不是手动连接$BUILD_ID$BUILD_TAG。有关标准环境变量的完整列表,请参阅https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables

答案 2 :(得分:-3)

Jenkins插件https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin应该有助于满足这些要求。