2

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

目前我所写的是

  1. 使用 ssh 停止 tomcat 服务器。
  2. 使用 Maven 构建战争
  3. 使用 ssh 从 tomcat webapps 目录中删除战争
  4. 使用 ssh 将构建的文件传输到 tomcat 上的 webapps 目录
  5. 启动服务器

我知道这不是部署应用程序的最佳方式,并希望得到您的反馈。我最想做的是

  1. 为 prod env 执行 maven 版本。如果可能,最多提供修订号。
  2. 标记代码。
  3. 将发布的战争上传到包含所有战争及其历史记录的 S3 文件夹。
  4. 在服务器/Jenkins 上编写一个脚本,该脚本将从 S3 下载文件(如果提供了最新版本,则为版本号)并部署到 tomcat。

我很困惑这第 4 步应该在 Jenkins 中还是在服务器上。我正在使用 EC2 实例来托管 Web 应用程序,因此我的图像需要有脚本。

4

2 回答 2

5

在组织方面,您正在混合构建和部署,复制,......

当 jenkins 是一个集成工具时,maven 是一个用于构建存档的工具。

你应该 :

  • 在编译和集成之间保持清晰的界限
  • 使用他们设计的工具。

嗨,M。

于 2012-07-23T13:56:34.067 回答
5

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

我建议以这种方式更改您的构建,以便在 Jenkins 中进行一次运行或在可以部署在测试和生产中的命令行工件上进行生产。

我的意思是通过 Maven 发布插件制作发布的工件,因为您正在交付工件来测试和/或生产必须是可重现的。

这些是在您将它们放在存储库管理器(Artifactory、Archiva、Nexus)中之后产生工件的东西,下一步是将它们部署到适当的区域,如测试或生产。这可以通过Maven通过maven cargo插件tomcat插件等或其他插件来实现。但我建议通过木偶、厨师等不同的东西来做到这一点,或者可能是通过自制的 scipts/工具。这些脚本可以通过 Jenkins 毫无问题地运行(不应该是问题)。部署本身不应该是建筑物的一部分,它应该单独进行。如果您正在编写自己的工具,您可以查看Aether 库,以简化对 Maven 存储库的访问。

于 2012-07-23T13:32:50.163 回答