Hudson的另类构建经理

时间:2010-11-30 19:50:43

标签: java continuous-integration hudson

我在一家软件公司工作,我们的主要开发语言是Java。当然,我们使用Hudson进行连续构建,它的工作非常出色。然而,哈德森对我们要求它做的其他一些事情并不擅长。我们还使用Hudson作业来部署二进制文件,刷新数据库,运行负载测试,运行回归等。当存在构建依赖性时(即负载测试需要数据库刷新),我们确实遇到了麻烦。

这是Hudson没有做到的一件我们真正需要的事情:

构建依赖关系:它支持Ant构建的构建依赖关系,但不支持Hudson作业。我们使用URL调用功能导致Hudson作业调用另一个Hudson作业。问题是Hudson总是返回200并且在作业完成之前不会阻塞。这意味着调用作业不知道a)构建是否失败,b)如果没有失败,则需要多长时间。

不必使用shell脚本来指定构建的行为会很好,但这并非完全必要。

任何方向都会很好。也许我们没有以正确的方式使用Hudson(即所有构建都应该是Ant构建吗?)或者我们可能需要另一个产品来进行一键式部署,负载测试,迁移,数据库刷新等。

修改

为了澄清,我们的构建中的参数可能会根据参数导致不同的依赖关系。即有时我们希望使用数据库刷新进行负载测试,有时不需要数据库刷新。不幸的是,为每个参数组合创建Hudson作业(如加入插件所需)将无法工作,因为有时不同的组合可能会导致数十个作业。

4 个答案:

答案 0 :(得分:7)

我认为我不了解您的“构建依赖”要求。可以将任何Hudson作业配置为触发另一个(下游)作业,或者由另一个(上游)作业触发。

Downstream-Ext pluginJoin plugin允许更复杂的构建依赖关系定义。

答案 1 :(得分:5)

Hudson有一个CLI,允许您向Hudson实例发出命令。使用“帮助”获取精确的详细信息。我相信有一个允许你调用构建并等待它完成。

http://wiki.hudson-ci.org/display/HUDSON/Hudson+CLI

答案 2 :(得分:2)

你的“依赖”需要额外的工作吗?

你的依赖对我来说就像一个额外的构建步骤。刷新数据库的脚本可以存储在您的scm中,每个需要此步骤的构建都会将其检出。如果参数“db refresh”为true,则可以调用该脚本。这可以通过多个模块完成。有什么好处?您的脚本逻辑在您的scm中(拥有更改历史记录总是很好)。您仍然可以为所有测试作业更新一次脚本(因为他们都会检查相同的脚本)。此外,您不需要查看几个脚本来确定测试是否成功。特别是如果您有一个作业是多个执行行的一部分,则很难找出触发哪个作业的作业。另一个优点是你的Hudson工作量较少,因此维护起来更容易。

答案 3 :(得分:1)

我认为您正在寻找的是http://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin此插件允许您根据以前作业的状态执行其他作业。您甚至可以从下游项目调用shell脚本来确定任何其他条件。它可以反过来调用API以获取更多信息。

例如,我们有一个后期构建步骤来通知我们,这会调用JSON API在我们的IRC频道中构建一个很好的主题,上面写着“所有构建正常”或“X,Y失败”等。