我有一些批处理过程在Linux/PHP网站的幕后运行.它们的数量和复杂性开始增长,因此我想对它们进行少量处理.
我的源代码树有一堆cpp文件和脚本,按开发组织但不考虑部署.编译完所有可执行文件后,我需要在一组机器上放置各种脚本和二进制文件.不同的计算机需要为其批处理过程使用不同的可执行文件,脚本和配置文件.我也有一些我写的属于每台机器的工具.目前,此部署过程是手动且容易出错的.
我猜我最终会得到一个在源代码树根目录下运行的脚本,并构建一个包含任何机器所需的所有内容的小树.然后,我将把它同步到适当的机器上.但我很好奇其他人是如何处理这类问题的.有任何想法吗?
这里有几类工具.有些人使用这些类别的工具组合.我有时会使用Puppet和Capistrano.请参阅Puppet或Capistrano - 使用适合作业的工具进行讨论.
旨在部署应用程序的脚本工具:
使用工具这一类的一般模式是,你创建一个脚本和/或配置文件,经常带套类似的Makefile的命令,该工具将ssh到您的生产中,做一个源代码签出,并运行无论其他步骤是否必要.
此区域中的工具通常具有回滚到先前版本的工具.所以他们会检查你的源到发布/目录,并创建一个从"当前"到"发布/"的符号链接,如果一切顺利的话.如果出现问题,您可以通过运行将删除"current"并将其链接到先前版本/目录的命令恢复到以前的版本.
Capistrano来自Rails社区,但是是通用的.Capistrano的用户可能对降级感兴趣,这是Capistrano的一组部署配方.
Vlad the Deployer是另一个来自Rails社区的Capistrano的替代品.
编写自己的shell脚本或Makefile.
获取文件到生产框的选项:
从源头直接结账.如果您的生产箱缺乏开发工具,特别是源代码管理工具,则并非总是可行.
在本地结帐源,然后tar/zip up.使用scp或rsync复制tarball.对于类似Amazon EC2部署的情况,这有时是首选,其中压缩的tarball可以节省时间/带宽.
在本地签出源,然后将其rsync到生产框.
包装工具
使用操作系统的打包系统生成包含应用程序文件的包.创建一个主包,其中包含您需要的其他包作为依赖项.所述RubyWorks系统是这样的一个例子,用于部署一个Rails堆栈和示例应用程序.然后是使用apt,yum/rpm,Windows msi或其他任何部署给定版本的问题.回滚涉及卸载并重新安装旧版本.
旨在安装应用程序/配置和维护一组系统的常规工具
这些工具并不专门针对部署Web应用程序的问题,而是针对一组服务器或整个公司的工作站部署/维护Apps/Configs的更普遍的问题.它们更多地针对系统管理员,而不是Web开发人员,尽管他们都发现它们很有用.
Cfengine是此类别中的工具.
Puppet的目标是改进Cfengine.它有一个学习曲线,但许多人发现值得花时间弄清楚如何进行配置.一旦你完成它,每个盒子定期检查中央服务器并确保一切都是最新的.如果有人编辑文件或更改权限,则会检测并更正此信息.因此,与上面的部署工具不同,Puppet不仅可以将文件放在正确的位置,还可以确保它们保持这种状态.
厨师比Puppet更年轻,采用类似的方法.
Smartfrog是此类别中的另一个工具.
Ansible使用普通的YAML文件,不需要在它管理的服务器上运行代理
有关此类别和此类别中的更多工具的比较,请参阅Wikipedia文章" 开源配置管理软件的比较".