这里有几类工具。有些人使用这些类别的工具组合。例如,我有时会同时使用 Puppet 和 Capistrano。请参阅Puppet 或 Capistrano - 为工作使用正确的工具进行讨论。
旨在部署应用程序的脚本工具:
此类工具的一般模式是您创建一个脚本和/或配置文件,通常使用类似于 Makefile 的命令集,该工具将 ssh 到您的生产框,检查您的源代码,然后运行任何其他必要的步骤。
这方面的工具通常具有回滚到以前版本的功能。所以他们会检查你的源到releases/目录,如果一切顺利的话,创建一个从“current”到“releases/”的符号链接。如果有问题,您可以通过运行将删除“当前”并将其链接到以前的版本/目录的命令来恢复到以前的版本。
将文件获取到生产箱的选项:
- 从源头直接结帐。如果您的产品缺少开发工具,特别是源代码管理工具,这并不总是可行的。
- 在本地签出源代码,然后将其 tar/zip 压缩。使用 scp 或 rsync 复制压缩包。这有时是 Amazon EC2 部署之类的首选,其中压缩的 tarball 可以节省时间/带宽。
- 在本地签出源,然后将其同步到生产箱。
包装工具
使用操作系统的打包系统生成包含应用程序文件的包。创建一个主包,该包具有您需要的其他包作为依赖项。RubyWorks系统就是一个例子,用于部署 Rails 堆栈和示例应用程序。然后是使用 apt、yum/rpm、Windows msi 或其他任何工具来部署给定版本的问题。回滚涉及卸载和重新安装旧版本。
旨在安装应用程序/配置和维护一组系统的通用工具
这些工具并不专门针对部署 Web 应用程序的问题,而是针对一组服务器或整个公司的工作站部署/维护应用程序/配置的更普遍的问题。它们更多地针对系统管理员而不是 Web 开发人员,尽管两者都可以发现它们很有用。
- Cfengine就是这个类别中的一个工具。
- Puppet旨在改进 Cfengine。它有一个学习曲线,但许多人发现值得花时间弄清楚如何进行配置。一旦你开始工作,每个盒子都会定期检查中央服务器并确保一切都是最新的。如果有人编辑文件或更改权限,则会检测到并更正。因此,与上面的部署工具不同,Puppet 不仅将文件放在适合您的位置,而且确保它们保持原样。
- Chef比 Puppet 小一些,采用了类似的方法。
- Smartfrog是该类别中的另一个工具。
- Ansible使用纯 YAML 文件,不需要在它管理的服务器上运行代理
有关此类工具和更多工具的比较,请参阅 Wikipedia 文章,开源配置管理软件的比较。