使用Hudson的经验 - 构建矩阵项目

23

有人尝试过那个功能并有一些反馈吗?还是有人知道一些有用的示例供参考吗?

2个回答

27

我几个月前尝试过这个功能,但现在不再使用它(仅因为我不需要它,而不是因为它不是一个好的功能)。

基本上,您定义 n 个轴,每个轴都是具有多个值的属性。

让我们举个例子:您定义“JDK”轴,其可能值为“1.4”、“1.5”、“1.6”,并定义另一个属性“database”,其中可能的值为“oracle”、“mysql”。

因此,Hudson 将启动您的构建 6 次:

  • 使用 JDK 1.4,使用属性 database=oracle(即使用 -Ddatabase=oracle 启动 JVM)
  • 使用 JDK 1.5,使用属性 database=oracle
  • 使用 JDK 1.6,使用属性 database=oracle
  • 使用 JDK 1.4,使用属性 database=mysql
  • 使用 JDK 1.5,使用属性 database=mysql
  • 使用 JDK 1.6,使用属性 database=mysql

然后,一旦所有内容都完成,您就可以查看每个迭代的结果。

当您需要在几个环境中测试应用程序时,此功能可能非常有用(例如,在不同版本的 JDK 或数据库中)。

请注意,除了 JDK 轴之外,您必须自己管理 Hudson 提供的输入属性。在我的示例中,应用程序必须考虑“database”属性本身。如果您的项目已经使用了 Maven2,则一个好主意是使用此属性来启用 Maven2 配置文件中的特定设置(有关更多详细信息,请参见 这里)。

希望我的解释足够清晰 :)


2
你如何在非Java项目中访问这些属性?作为环境变量吗? - Sridhar Ratnakumar
2
通常情况下,这些属性是由Hudson设置为当前构建的环境变量。@Sridhar - Romain Linsolas
2
好的,这个问题已经过期了,但我在设置矩阵项目方面遇到了困难 - 有没有关于如何配置它的指针? :) - Sam Post
我需要使用Jenkins Groovy库来确定轴。有没有办法做到这一点?我想能够使用withCredentialssh等来提取值。 - xbmono

6

矩阵构建存在许多问题:

  • 广泛不兼容插件 - 它们正在变得更好,但是您需要始终保持最新。
  • 构件 - 更难以摆脱 - URL稍微麻烦一些,找到它们在文件系统上的位置(无论如何应该避免)现在是一场噩梦。

这真是太可惜了,因为这个概念非常好,而且在适当的情况下非常方便。


编辑

  • 无法启动单个点。

我们通常采用参数化构建并发运行的方式来解决这个问题 - 这会带来自己的问题,但可以避免我们有许多代码相同但常量不同的作业。


你有更好的建议吗?我正在考虑使用矩阵构建来将我们的单元测试套件切分成许多相同的作业,每个作业运行套件的不同子集(以将我们当前的40分钟测试周期加速到<5分钟)。 - PerilousApricot
我们实际上在构建步骤中使用代码来启动参数化作业 - 因此父级“kicker”或“scheduler”作业会启动下游作业。我们使用原因参数将它们链接起来,并使用guid参数查找队列中的作业,以便父作业可以显示它启动的所有子作业。这是 - 单个作业是参数化的,可以使用父级+其他视图创建工具来查看它们。我们还使用允许并发运行功能。 - Danny Staple

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