我们正在构建一个 Web 应用程序,几乎准备好开始部署到生产服务器。我们使用 Subversion 进行版本控制,我现在想知道部署到临时环境并随后部署到生产环境的最佳方式是什么。
目前,我们在自己的机器上与 2 个人一起进行本地开发和测试,并提交到我们的暂存服务器,即我们的 SVN 服务器。
我知道有一个 post-commit.tmpl 钩子可以运行脚本?有谁知道这类脚本的优质资源吗?
欢迎提供任何建议!我们正在寻找一种简单的方法来部署我们的代码,并可能将其恢复到以前的版本。
答案1
Subversion 是一个版本控制系统,而不是部署系统。不要使用它。由于您现在正在手动执行所有操作(构建和测试),因此我也会手动部署,这也意味着您编写一些脚本,从 subversion 中检出正确的版本并将其部署到您想要的任何环境中。
如果您想要实现更多自动化,我建议您使用 CI 服务器或某种部署解决方案。我们开始使用 Hudson 进行测试和部署(至少对于沙盒环境而言)。我们不打算将其用于生产。因为我们尚未检查促销插件。在研究 CI 服务器时,我注意到商业系统通常为发布管理提供更好的支持。
答案2
有多种方法可以实现此目的:
使用构建服务器
我听说过有团队使用 CCNET.net 或 FinalBuilder Server 来实现这一点。基本上,每次有人签入时,构建脚本都会有代码来推送最新版本。但我不建议在生产环境中这样做。不过,这应该适用于暂存环境。
我不太熟悉 Linux 上的构建服务器,但我知道有几个。还有 Ant,甚至 Make 脚本也可以用于此。
将工作副本放在临时服务器上
只需签出,并将正确的文件夹映射到 Web 应用程序的根目录即可。团队中的某个人必须手动更新此工作副本,但这可让您在必要时灵活地恢复到以前的版本。
注意事项
当您将网站指向工作副本时,您需要确保排除.svn 文件夹。
我不建议为此使用 Subversion 钩子脚本。您几乎可以使用 Linux 中可用的任何脚本引擎来执行提交后脚本。我在 Google 中输入了“提交后钩子脚本 Linux”,得到了一些不错的结果。
答案3
这个问题实际上是一个关于发布程序(和工具)的问题,而不是系统管理的问题,但这是我最好的答案:
Subversion 的任何最新版本都能很好地满足您的配置管理需求,但正如 Peter 所说,它不是部署工具。一种选择是将部署构建到您的常规构建基础结构中(例如“make deploy”),并在管理代码的同时管理部署规则。
从配置管理的角度来看,您需要跟踪应用程序运行所需的所有内容,包括代码、外部库(特定版本)、Web 服务器、操作系统版本等。'make deploy' 应该在尝试部署新版本之前确保所有这些东西都存在。
像 Hudson 这样的工具也可以为您处理部署,但您仍然需要告诉它要做什么,我只是希望我的配置管理过程尽可能简单。一个例子是让 Hudson 调用“make deploy”,但不在 Hudson 中存储您需要恢复以在其他机器上重新创建的其他信息。
您多久会发布一次需要部署的版本?我会考虑将您的 webapp 标记为 tags/,并采用提交后机制,该机制知道 tags/webapp-1.0.4 需要导出到您的 webroot。如果您的 webapp 很大,请考虑让钩子在 /tmp 中放置一个特殊文件,cronjob 每分钟检查一次该文件并采取适当的操作。
如果您想要更详细的答案,请详细说明您的发布时间表、代码库大小、语言选择、操作系统环境和依赖项。
答案4
我可以通过创建一个新的提交后文件中包含以下两行:
#!/bin/bash
ssh -i /path/to/key-file -pSSH-PORT user@hostname svn update /path/to/project/folder/