首页 文章

Hudson的另类构建经理

提问于
浏览
3

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

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

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

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

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

Edit:

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

4 回答

  • 7

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

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

  • 2

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

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

  • 5

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

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

  • 1

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

    例如,我们有一个后期构建步骤来通知我们,这将回调JSON API,在我们的IRC Channels 中构建一个很好的主题,说“所有构建正常”或“X,Y失败”等 .

相关问题