Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在CI工具(如Jenkins)和构建脚本(Ant或Maven)之间分割任务?_Maven_Ant_Continuous Integration_Build Process_Build Automation - Fatal编程技术网

如何在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任务集)。

    让我们看看您想要执行的任务

    • 更新目录(svn更新)
    嗯,詹金斯无论如何都会这么做的

    • 编撰
    而且,那也是

    • 运行测试
    为什么不呢?Jenkins可以在构建页面上显示JUnit测试结果。如果测试需要很长时间才能完成,您可以设置第二个作业来执行测试。让Jenkins将工作文件从旧作业复制到新作业,然后运行第二个作业。有一个插件可以帮助你做到这一点

    • 做报道
    詹金斯也能做到。而且,就像JUnit测试一样,Jenkins可以在构建页面上显示结果

    • 运行静态分析器并生成报告
    詹金斯也能做到

    • 包(生成war文件)
    詹金斯能做到。你甚至可以把战争档案保存在詹金斯身上。人们将能够复制它并将其部署到他们的系统上。或者,您可以让Jenkins将其存储在Maven存储库中。见鬼,你两者都可以

    • 部署到web服务器
    Jenkins可以这样做,但我更喜欢手动操作——除非在构建过程中有一些测试我想做。说到部署,我宁愿自己做事情

    • 发送电子邮件通知(带有链接报告和生成状态)
    标准的Jenkins是对坏的和不稳定的构建(构建了,但测试失败的构建)发送通知,然后在构建再次良好时发送电子邮件。你真的希望每一次构建都发送一封电子邮件吗?如果是这样,请使用ext mail插件

    • 运行数据库更新工具
    同样,这是我更喜欢手工做的事情——除非这是我测试的一部分

    • 将生成结果(war文件和报告)放在特殊位置
    没必要那样做。Jenkins个人构建网页本身可以存储war文件、测试结果、谁开始构建以及更改了什么。更改可以链接到Fisheye、Sventon或另一个源存储库web浏览器,该浏览器允许用户单击文件并准确查看更改的行

    Jenkins还有一个到上一个好版本、上一个坏版本和上一个版本的永久链接。我使用iframes(Bad David!使用过时的HTML代码)将这些页面嵌入到公司的官方网页中

    简言之,詹金斯可以为你做所有这些事情,为什么不让它做呢?

    好问题

    我确实认为,您希望在构建服务器之外常规执行的任何操作都应该在脚本中,但不一定在“构建”脚本中

    例如,我将把您的部署和数据库升级步骤放在一个单独的脚本中(是的,我不同意David W的观点,我认为您绝对应该将这些步骤自动化)。我们在过去使用过Ant进行部署任务,并且做得很好。但我也听说Ant是一种糟糕的构建脚本语言,因为它不适合过程部署任务。这是倒退。使用Ant进行构建,如果它不适合部署,请使用其他脚本编写它

    构建服务器的核心角色是一致地、自动地运行这些过程并报告结果。对于单元测试等,这可能意味着调用运行测试的脚本,但要有智能以有意义的方式解析结果,以便进行趋势分析和分析


    以上所有建议均以“合理”为框架。如果您偶尔在构建服务器之外做一些事情,那么编写脚本是很困难的,并且构建服务器级别的集成也很容易,请务必节省您自己的工作,并在那里完成

    也许这个问题更适合你。