我们正在寻求自动化我们的 Web 应用程序部署,特别是在从本地开发到远程服务器时。
我们当前的堆栈是远程的 LAMP,本地的 MAMP,但我很感兴趣的是,不管他们的环境如何,人们都在使用什么来完成这项任务?
我不仅仅是在谈论移动文件,我还意味着考虑其他任务,例如:
- 设置数据库模式
- 管理配置
- 部署所需的其他任务(创建日志文件等)
我们正在寻求自动化我们的 Web 应用程序部署,特别是在从本地开发到远程服务器时。
我们当前的堆栈是远程的 LAMP,本地的 MAMP,但我很感兴趣的是,不管他们的环境如何,人们都在使用什么来完成这项任务?
我不仅仅是在谈论移动文件,我还意味着考虑其他任务,例如:
在可能的情况下,我更喜欢使用 Ant 等自动化部署,甚至 FTP 部署也可以相当容易地处理。自动化部署,很像自动化构建,将猜测工作和错误排除在流程之外,并且根据定义,至少为新程序员理解流程提供了最少必要的文档(即构建脚本)。
以前的公司使用的东西之一是——信不信由你——RPM 文件。当我们构建我们的软件时,它的所有不同部分都将被打包成 RPM 文件,然后部署到服务器上。
RPM 是一个可怕的 hack,但由于我们的客户都在运行 Red Hat Linux(根据我们的要求),它非常有意义。如果我有选择,我会选择像 Debian 或 Ubuntu 这样的系统,并设置一个系统都可以从中提取的存储库。尽管如此,它仍然适用于数百个客户端,总共有数千个服务器。挺整洁的。
当它需要上线时,我们使用“svn export”。将我们的代码保持在版本控制之下,并让我们在测试盒或本地计算机上积极开发它。
我还没有尝试过,但我正在考虑将来使用Fabric :
Fabric 是一个简单的 Pythonic 远程部署工具。
它旨在将文件上传到并行或串行的多个服务器并在其上运行 shell 命令。这些命令在任务(常规 python 函数)中分组并在“fabfile”中指定。
它有点像一个愚蠢的 Capistrano,除了它是用 Python 编写的,不要指望你要部署 Rails 应用程序,并且“put”命令可以工作。
与 Capistrano 不同,Fabric 希望保持小巧、轻便、易于更改且不受任何特定框架的约束。
Capistrano非常适合这种事情。它来自 Ruby on Rails 生态系统,最初与部署 Rails 应用程序密切相关。由于很多人注意到它对于远程服务器控制很方便,因此它变得更加通用。
无需额外设置,Capistrano:
所有这一切都具有回滚功能。
另一个不错的选择是使用操作系统的打包系统(RPM、deb/apt 等)。这往往需要对您的操作系统及其策略非常熟悉,但如果您知道自己在做什么,则非常适合其他工具。
rsync->很棒的工具
但是,答案取决于您的环境。你用什么来控制源代码?你用什么构建系统?等等。
Web 服务器的部署只不过是一个“cp”命令,具体取决于更改了哪些文件。您需要构建一个流程来跟踪更改的文件,从源代码管理中提取这些文件,然后推送这些更改。在处理 PHP 文件时,如何知道要推送哪些文件?那就是问题所在。你解决它,你会没事的。cp 文件和“部署”它们的工具是简单的部分。
我是 .NET 人,所以对我们来说是 CruiseControl + nant
不过,我听说过关于Jet Brains TeamCity的好消息。