如何在Hudson/Jenkins中使所有构建步骤都执行?

4
我正在使用Jenkins构建一些客户端库到我的系统中,每个库针对不同的语言。我的配置包含多个独立的构建步骤,每个语言一个,用于构建和/或测试该库。
目前,系统中的重大更改将导致第一个构建步骤失败,并且不会运行任何其他构建步骤,这非常不方便。我需要运行所有构建步骤,以便查看所有的错误。
一种替代方法是创建一个配置文件,告诉Jenkins如果早期的构建步骤失败,不要中止后面的构建步骤。我没有找到这样的功能,但也许有。
另一种选择是将每种语言作为单独的构建触发,但这样我就必须将它们全部绑定到我的后置构建步骤上,我不确定如何做到这一点。
当然,还可能有我没想到的东西。
以上任何一种都可以解决我的问题。那么我应该怎么做,如何处理呢?
2个回答

2

您需要的是Multijob插件。我经常使用这个插件。看一下他们的截图 - 您可以指定三个选项来标记一个阶段(一个阶段可以有多个工作)为成功:

  • 当阶段任务构建成功时
  • 即使阶段任务构建不稳定
  • 即使阶段任务构建失败 - 这是您需要的

在您的情况下,您可以创建一个Multijob Job,其中每个“客户端库”都有一个阶段。并将相应的“客户端库”工作添加到它们的阶段中。因此,如果您有10个“客户端库”工作,则最终将在此MutliJob中拥有10个阶段(每个阶段一个)。并且不要忘记将“将阶段标记为成功时,阶段工作状态为”设置为“完成(始终继续)”。

我通常不喜欢使用 Downstream Jobs 来实现这个目的,因为 Jenkins 中没有一个好的用户界面可以在单个页面中查看整个构建流程。当然,有 Build Pipeline 插件 可以显示每个构建流程的状态。你可以根据自己的需要选择适合的插件。

但如果它们被标记成功,这是否意味着后构建操作将被执行并且构建本身将被标记为成功? - Daniel C. Sobral
不,你只是将阶段标记为成功,你的构建仍然会显示为失败的构建(红色球)。而那个特定的阶段将显示为成功(蓝色球)。这样,你就要求你的多任务继续执行其他阶段。 - Vikram
顺便说一下,有一个很好的用户界面可以查看整个构建流程——构建管道插件。 - Daniel C. Sobral
好的,又有一个问题...我现在明白这意味着有多个工作,然后将它们集成到“multijob”工作中。但是,这意味着每个工作都在自己的工作区中运行,这并不符合我的目的。我可以硬编码工作区,但如果multijob在一个服务器上运行,它的任何子进程在另一个服务器上运行,那就行不通了。你处理过这样的问题吗? - Daniel C. Sobral
嗨,丹尼尔 - 首先很抱歉回复晚了。那完全有道理。在我的情况下,我有一个简单的设置,没有任何从属关系,它们都在同一台机器上。 - Vikram

1
为了让这项工作在一个作业中完成,我认为您需要使构建步骤不失败(返回非零退出代码)。然后,您需要一个后构建步骤来分析测试结果,并在必要时标记构建失败或不稳定。
您可能需要编写一个包装脚本来进行构建,例如简单的 .BAT 或 shell 脚本,在运行构建/测试操作后,其最后一行为 exit 0
这种测试结果处理的后构建操作示例是“发布 JUnit 测试结果报告”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接