在单个服务器上暂存多个 Git 分支

在单个服务器上暂存多个 Git 分支

使用单个暂存服务器来暂存多个 git 分支是一个坏主意吗?

例如,如果持续集成服务器在所有测试完成后自动运行 Ansible、Chef、Puppet 等配置套件,并将应用程序部署到 StagingApplicationServer.com/< 此处为分支名称 >

这将允许 master、develop 和其他功能分支进入暂存状态。

如果这不是一个坏主意,那么有没有办法能够将单个系统上的不同分支分开?例如,分支 1 的 Nginx/Redis/MongoDB 服务可以与分支 2 不同,并且可以轻松拆除。

短时间内启动 Amazon EC2 实例是理想的选择,但不幸的是这不是一个选项。此外,对于此特定应用程序,使用子域不是一种选择。

编辑:

具体细节是,该应用程序是一个使用 Redis、MongoDB 的 Python Flask 应用程序。服务器使用 Ansible 进行配置。

编辑2:

需要澄清的是,我担心这不是一个好主意,因为您到处都读到您的开发、准备和生产环境应该尽可能地接近彼此。这意味着,如果您的部署策略适用于准备,那么您应该能够毫无问题地将其复制到生产环境中。也就是说,如果您的 Ansible 剧本在准备工作中有效,那么它们也将适用于生产。

为了适应暂存中的多个分支,您需要自定义 Nginx 等配置。您可能还需要更改数据库的配置方式,或者您可能需要运行额外的步骤来配置虚拟机以包含您的数据库等。所有这些最终都会使您的暂存环境与生产环境不同。

答案1

我认为这不是坏主意。暂存意味着非生产服务,因此您可以将所有暂存都放在一台服务器上,而不必担心冗余、性能等。分离应用程序和应用程序实例的另一个原因是出于安全性考虑,但对于非生产服务来说,这又不是一个问题,除非您在暂存服务器上托管生产数据的副本(这是另一种需要考虑的分离类型)。如果存在安全问题,并且您不能使用子域,您仍然可以使用 nginx 中的代理将实例划分到多个虚拟机上。但是,在最简单的形式中,您只需在同一个实例上运行它们,并使用“位置”指令来确定每个路径运行的应用程序。

nginx 并不关心您如何划分应用程序,但您需要根据目录为每个应用程序服务器配置不同的代理配置(根据应用程序服务器,配置不同的端口或配置文件的不同位置)。具体如何操作取决于您的应用程序服务器,而您尚未指定。

例如,使用 Ruby 的 Passenger 应用服务器,您可以遵循以下说明:https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#deploying_rails_to_sub_uri

请注意,Passenger 隐藏了一些实现细节,因此您无需考虑端口,只需考虑目录。而在以下示例中,您需要指定代理端口,并且每个应用程序实例的端口都需要不同。

使用 Perl Mojolicious,您可以按照以下示例操作:http://search.cpan.org/~sri/Mojolicious-5.27/lib/Mojolicious/Guides/Cookbook.pod#Nginx

请注意,location任一示例中的部分都可以复制到任意数量的路径,只要您需要应用程序的独立实例即可。这与运行多个应用程序相同;您只需为每个应用程序提供自己的目录和配置文件即可。

我怀疑您到目前为止没有得到任何答案的原因是您没有提供任何有关部署的具体信息。当您指定要使用“Ansible、Chef、Puppet 等”和“Redis/MongoDB”时,我很难提供建议……您是否使用了所有这些东西,尽管它们做的工作非常相似?大多数人选择一种部署工具(从 Ansible、Chef、Puppet 等中选择)和一个​​键/值存储(Redis/MongoDB)。所有这些的配置示例以及需要注意的事项将因人而异。

无论如何,对你的问题的简短回答是:是的,你可以这样做,并且没有技术原因使你不应该这样做。

相关内容