多个服务器角色的最佳开发设置?

Ken*_*Ken 3 security svn

在我工作的公司,我们有一个非常复杂的开发环境。我们的系统运行在多台服务器上,每台服务器扮演不同的角色并拥有自己的代码库。每个角色可能有多个实际服务器(例如,我们可能有 2 个消息服务器、3 个存储服务器、1 个 Web 服务器、1 个 DB 等)

到目前为止,服务器端开发人员一直在做 SVN,而其他开发人员一直在自己跟踪自己的代码。每个人都通过 FTP 手动上传到正确的服务器。这意味着,例如,如果有人更改了消息服务器的代码,他将需要手动将更改上传到 2 个或更多服务器。

重要提示:并非所有服务器都在同一个 LAN 上。

我一直在考虑改变每个人的工作流程,我想咨询一下最好的设置是什么。

我想拥有一个单一的 SVN 服务器(基本上向所有人开放服务器端 svn),并为每个“服务器角色”拥有不同的存储库。并将每个存储库的提交后提交到该类型的服务器,这将在每个服务器上的工作副本上运行“svn update”。(我宁愿将所有服务器角色的代码都放在单个存储库中 - 但我将如何处理提交后脚本?)

我的问题是:a) 这是最好的设置吗?b) 您将如何实现提交后脚本?它如何知道将更新发送到哪个服务器?c) 确保这一点的最佳方法是什么(与多个开发人员)?

预先感谢您的任何答复。非常感谢任何帮助和建议!

肯。

nat*_*ado 5

阅读您的问题后,我认为您正在寻找的更多是部署工具集而不是开发设置。无论您选择朝哪个方向发展,我认为您需要做的第一件事就是将所有代码置于源代码控制之下。如果不能对每个子服务进行版本控制,就不能合理地拥有任何可靠的部署系统。把所有的项目放在一个SVN服务器下就可以了;您需要一个大型项目来超越单服务器方法,它使您能够轻松地跨所有子项目轻松分支/标记发布。

我建议查看专门构建的部署工具,例如CapistranoFabricControlTier。每个项目都有其优点和缺点(Capistrano 与 Rails 配合良好,ControlTier 与 Java 配合良好,等等),您可能会发现最好的工具取决于您的子项目所用的语言。更喜欢部署系统的一些原因一个简单的提交后钩子:

  • 编写一些在少数服务器上的给定目录上运行“svn up”的脚本并不难,但部署系统将处理诸如暂存与生产环境、失败部署回滚等问题。
  • 部署应该与签入代码分开。通常,我更喜欢在一天中的某个时间进行部署(例如,最有可能获得工程支持的上午,或者网站流量接近最低点的半夜),并且开发人员应该可以自由地签入不一定会导致部署的代码。如果您有持续集成系统,您希望在部署之前测试/验证您的代码。这可以通过让 post-commit 钩子检查提交的文件的路径来完成,并且只有在对发布分支进行更改时才部署。
  • 部署过程本身应该记录在案、可重复和受版本控制。有正当理由想要重新部署同一个版本(例如,向您的设置中添加更多服务器),而无需为了启动另一个构建而对源代码控制进行虚假提交。此外,我喜欢让开发人员可以使用和可见部署所需的步骤。Capistrano 非常适合这一点,因为您实际上是将文件签入到描述如何运行部署的源代码控制中。如果您只是使用提交后挂钩,请确保它与您的 SVN 存储库数据本身一起备份!

安全性很大程度上取决于业务需求。在较小的商店中,我认为将“城堡的钥匙”交给开发人员甚至在团队中轮换部署职责并没有错。如果您在开发人员无法访问生产数据的环境中工作,您需要设计一个系统,他们可以在其中触发部署(通过签入或其他一些过程)但不能访问部署系统的身份验证本身。如果您在 UNIX 平台上运行,这可以像生成用于部署的SSH 密钥一样简单,并且只将密钥提供给负责部署的人员。