Java 在测试和产品环境中使用Maven和Jenkins部署到tomcat

Java 在测试和产品环境中使用Maven和Jenkins部署到tomcat,java,tomcat,maven,deployment,jenkins,Java,Tomcat,Maven,Deployment,Jenkins,我正在为我的应用程序编写构建脚本,我想知道部署/发布到测试/产品环境的最佳实践是什么 目前我写的是 使用ssh停止tomcat服务器 使用Maven构建战争 使用ssh从tomcat webapps目录中删除war 使用ssh将构建的文件传输到tomcat上的webapps目录 启动服务器 我知道这不是部署应用程序的最佳方式,希望得到您的反馈。理想情况下,我想做的是 为prod env执行maven发布。如果可能的话,最多为修订号 标记代码 将发布的战争上传到S3文件夹,其中包含所有战争及其历史

我正在为我的应用程序编写构建脚本,我想知道部署/发布到测试/产品环境的最佳实践是什么

目前我写的是

  • 使用ssh停止tomcat服务器
  • 使用Maven构建战争
  • 使用ssh从tomcat webapps目录中删除war
  • 使用ssh将构建的文件传输到tomcat上的webapps目录
  • 启动服务器
  • 我知道这不是部署应用程序的最佳方式,希望得到您的反馈。理想情况下,我想做的是

  • 为prod env执行maven发布。如果可能的话,最多为修订号
  • 标记代码
  • 将发布的战争上传到S3文件夹,其中包含所有战争及其历史
  • 在服务器/Jenkins上编写一个脚本,从S3下载文件(如果提供的是最新版本,则为版本号)并部署到tomcat
    我不知道第4步是在Jenkins中还是在服务器上。我使用EC2实例来托管web应用程序,因此我的映像需要脚本。

    首先,您要混合构建和部署。我建议通过Maven进行建筑。部署是另一回事

    我的意思是通过Maven release plugin生成发布的工件,因为您将工件交付给测试和/或产品,这些工件必须是可复制的

    这些是在您的存储库管理器(Artifactory、Archiva、Nexus)中拥有工件之后生成工件的东西,下一步是将它们部署到适当的区域,如测试或生产。这可以通过Maven或其他插件实现。
    但我建议通过不同的方式,如木偶、厨师等,或者通过自制的啤酒科学/工具来实现这一点。脚本可以通过Jenkins运行,没有问题(应该没有问题)。部署本身不应该是建筑的一部分,而应该单独进行。如果您正在编写自己的工具,您可以看看如何简化对Maven存储库的访问。

    就组织而言,您正在混合构建和部署、复制

    • 应该使用jenkins来检查源代码。有各种插件可以从scm中签出某个版本(即使默认情况下CI总是针对最新版本运行):
    • maven应该用于预处理、过滤资源、编译和打包war
    • jenkins的后期处理任务可用于复制/归档生成的war
    • jenkins插件(例如基于cargo)可用于部署归档
    maven是一个用于构建归档的工具,而jenkins是一个集成工具

    你应该:

    • 在编译和集成之间保持清晰的边界
    • 将这些工具用于它们的设计
    嗨 M