软件部署过程



我正在研究Java/Spring Web应用程序,对软件构建过程有疑问,特别是关于阶段和生产环境。

现在,在当前的项目中,我们有一个以下过程 - 我们将 Git dev 代码分支合并到暂存,然后使用 Maven 和 Jenkins 构建和部署项目到暂存环境。一旦阶段得到验证,我们将阶段合并到主 Git 分支,并再次使用 Maven 和 Jenkins 构建和部署项目到生产环境。

这是一个正确的过程吗?我们是否需要为阶段和生产环境构建单独的 war 文件(就像我们目前所做的那样),还是需要构建单个 war 文件,将其部署到阶段环境并提供阶段参数,对其进行测试和验证,然后将相同的 war 文件部署到生产环境但带有 prod 参数?

在第二种方法的情况下,如何正确参数化必须在Tomcat上运行的单个应用程序,具有不同的阶段和生产参数?此外,我们正在使用Maven过滤功能。在这种情况下也如何处理它?

将版本从暂存提升到生产环境时,通常需要将完全相同的二进制版本部署到生产环境,以确保在暂存中测试的版本在生产环境中的行为相同。

当您为生产环境制作新版本时,无法保证它的行为与您为过渡所做的构建相同。据您所知,构建服务器上的 Java 版本或其他工具可能会在两者之间发生更改。

有多种方法可以解决配置挑战。您应该首先从应用程序中剥离所有特定于环境的配置(在您的例子中是 WAR),以便您可以在所有环境中使用相同的二进制文件。接下来,您可以:

  1. 手动
    管理目标环境本身的配置或
  2. 使用 Puppet 或 Chef 等配置系统自动推出配置更改
    或者(下面的选项有我的偏好:)
  3. 为每个环境构建具有配置的包(只是纯 zip 文件)。
    示例构建结果:

    • 应用.战争
    • config-tst.zip
    • config-stg.zip
    • 配置-prd.zip

因此,当您部署到测试环境时,您需要部署 war 并解压缩 config-tst.zip。部署到暂存时,将部署相同的 war 和 config-stg.zip 等。

希望这有帮助,祝你好运!

相关内容

最新更新