我在一家软件公司工作,我们的主要开发语言是Java。当然,我们使用Hudson进行连续构建,它的工作非常出色。然而,哈德森对我们要求它做的其他一些事情并不擅长。我们还使用Hudson作业来部署二进制文件,刷新数据库,运行负载测试,运行回归等。当存在构建依赖性时(即负载测试需要数据库刷新),我们确实遇到了麻烦。
这是Hudson没有做到的一件我们真正需要的事情:
构建依赖关系:它支持Ant构建的构建依赖关系,但不支持Hudson作业。我们使用URL调用功能导致Hudson作业调用另一个Hudson作业。问题是Hudson总是返回200并且在作业完成之前不会阻塞。这意味着调用作业不知道a)构建是否失败,b)如果没有失败,则需要多长时间。
不必使用shell脚本来指定构建的行为会很好,但这并非完全必要。
任何方向都会很好。也许我们没有以正确的方式使用Hudson(即所有构建都应该是Ant构建吗?)或者我们可能需要另一个产品来进行一键式部署,负载测试,迁移,数据库刷新等。
修改
为了澄清,我们的构建中的参数可能会根据参数导致不同的依赖关系。即有时我们希望使用数据库刷新进行负载测试,有时不需要数据库刷新。不幸的是,为每个参数组合创建Hudson作业(如加入插件所需)将无法工作,因为有时不同的组合可能会导致数十个作业。
答案 0 :(得分:7)
我认为我不了解您的“构建依赖”要求。可以将任何Hudson作业配置为触发另一个(下游)作业,或者由另一个(上游)作业触发。
Downstream-Ext plugin和Join plugin允许更复杂的构建依赖关系定义。
答案 1 :(得分:5)
Hudson有一个CLI,允许您向Hudson实例发出命令。使用“帮助”获取精确的详细信息。我相信有一个允许你调用构建并等待它完成。
答案 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失败”等。