- maven/
- 如何在CI工具(如Jenkins)和构建脚本(Ant或Maven)之间分割任务?
如何在CI工具(如Jenkins)和构建脚本(Ant或Maven)之间分割任务?
如何在CI工具(如Jenkins)和构建脚本(Ant或Maven)之间分割任务?,maven,ant,continuous-integration,build-process,build-automation,Maven,Ant,Continuous Integration,Build Process,Build Automation,我们的团队对于哪些任务应该由CI工具处理,哪些应该在构建脚本中(我们使用Ant进行构建,使用FinalBuilder进行CI构建)存在一些争议
我的想法是,所有不仅在构建服务器上有用,而且在开发人员/QA机器上有用的任务都应该放在Ant构建脚本中(但我不确定实际的最佳实践是什么)
现在我们有下一个任务列表:
更新目录(svn更新)
编撰
运行测试
做报道
运行静态分析器并生成报告
包(生成war文件)
部署到web服务器
发送电子邮件通知(带有链接报告和生成状态)
运行数据库更新工具
将生成结果
我们的团队对于哪些任务应该由CI工具处理,哪些应该在构建脚本中(我们使用Ant进行构建,使用FinalBuilder进行CI构建)存在一些争议
我的想法是,所有不仅在构建服务器上有用,而且在开发人员/QA机器上有用的任务都应该放在Ant构建脚本中(但我不确定实际的最佳实践是什么)
现在我们有下一个任务列表:
更新目录(svn更新)
编撰
运行测试
做报道
运行静态分析器并生成报告
包(生成war文件)
部署到web服务器
发送电子邮件通知(带有链接报告和生成状态)
运行数据库更新工具
将生成结果(war文件和报告)放在特殊位置
(任何其他CI常见任务?)
您将通过CI工具执行哪些任务,以及将哪些任务放置到构建脚本中
我的方法是:
Ant任务:编译、测试、覆盖率报告、分析器、打包、部署、数据库更新。
CI工具:svn更新、电子邮件通知、将构建结果放到特殊位置
(ant任务集的部分灵感来自默认的maven任务集)。让我们看看您想要执行的任务
嗯,詹金斯无论如何都会这么做的
而且,那也是
为什么不呢?Jenkins可以在构建页面上显示JUnit测试结果。如果测试需要很长时间才能完成,您可以设置第二个作业来执行测试。让Jenkins将工作文件从旧作业复制到新作业,然后运行第二个作业。有一个插件可以帮助你做到这一点
詹金斯也能做到。而且,就像JUnit测试一样,Jenkins可以在构建页面上显示结果
詹金斯也能做到
詹金斯能做到。你甚至可以把战争档案保存在詹金斯身上。人们将能够复制它并将其部署到他们的系统上。或者,您可以让Jenkins将其存储在Maven存储库中。见鬼,你两者都可以
Jenkins可以这样做,但我更喜欢手动操作——除非在构建过程中有一些测试我想做。说到部署,我宁愿自己做事情
标准的Jenkins是对坏的和不稳定的构建(构建了,但测试失败的构建)发送通知,然后在构建再次良好时发送电子邮件。你真的希望每一次构建都发送一封电子邮件吗?如果是这样,请使用ext mail插件
同样,这是我更喜欢手工做的事情——除非这是我测试的一部分
没必要那样做。Jenkins个人构建网页本身可以存储war文件、测试结果、谁开始构建以及更改了什么。更改可以链接到Fisheye、Sventon或另一个源存储库web浏览器,该浏览器允许用户单击文件并准确查看更改的行
Jenkins还有一个到上一个好版本、上一个坏版本和上一个版本的永久链接。我使用iframes(Bad David!使用过时的HTML代码)将这些页面嵌入到公司的官方网页中
简言之,詹金斯可以为你做所有这些事情,为什么不让它做呢?好问题
我确实认为,您希望在构建服务器之外常规执行的任何操作都应该在脚本中,但不一定在“构建”脚本中
例如,我将把您的部署和数据库升级步骤放在一个单独的脚本中(是的,我不同意David W的观点,我认为您绝对应该将这些步骤自动化)。我们在过去使用过Ant进行部署任务,并且做得很好。但我也听说Ant是一种糟糕的构建脚本语言,因为它不适合过程部署任务。这是倒退。使用Ant进行构建,如果它不适合部署,请使用其他脚本编写它
构建服务器的核心角色是一致地、自动地运行这些过程并报告结果。对于单元测试等,这可能意味着调用运行测试的脚本,但要有智能以有意义的方式解析结果,以便进行趋势分析和分析
以上所有建议均以“合理”为框架。如果您偶尔在构建服务器之外做一些事情,那么编写脚本是很困难的,并且构建服务器级别的集成也很容易,请务必节省您自己的工作,并在那里完成 也许这个问题更适合你。