我负责启动web项目,目前从客户签字到最终启动需要很长时间。它在一个服务器上,我有root访问权限,但它运行Plesk,这样老板就可以设置VirtualHosts,这意味着有很多网站在上面运行。
每个项目都有自己的git存储库,所以目前我有以下设置:
在我的登台服务器上有一个repo的克隆,我有两个裸存储库。一个在forge上(由Indefero提供支持),另一个在live服务器上。
项目的每个版本都标有今天的日期。git tag -a deployed-2011-04-20
.
因此,在暂存服务器上,我执行类似于git push --tags live master
的操作,它的目标是实时服务器上的裸repo。
然后在活动服务器上通过SSH执行一个简短的bash脚本,基本上将存储库从活动裸repo克隆到Apache将服务的文件夹。
所以,如果这一切都有意义,你能推荐一个工具或任何东西,使我的生活更容易,遵循这个工作流程或可以适应?
它看起来像这样:
Forge (authoritative source)
^
|
v
Staging/development server
|
v
Live server bare repo
|
v
Releases folder (symlinked to htdocs)
我想到的一个解决方案是在活动服务器裸repo上添加一些post-receive钩子,以便检测来自staging repo的任何已部署的-2011-xx-yy标记,并从那里触发ssh脚本。
另一个解决方案是使用一个调度器(如pderaaij的回答中提到的Hudson),以便:
- 监视状态repo,并在右标签上触发活动服务器上的推送
- 监控裸repo,并触发ssh脚本
第二个解决方案的优点是在Hudson作业报告中跟踪所有发布实例,每次该作业检测到正确的标记并执行发布过程。
看看Capistrano,它愉快地跳着您在这里描述的符号链接舞蹈。
如果你使用Hudson作为持续集成服务器,你可以使用构建管道插件。
您有正常的构建过程,但添加了一个额外的作业,其中包含部署应用程序的命令。这个插件给了你一个漂亮的按钮来执行构建。
hudson作业可以执行所有需要的命令,或者您可以查看PHP的Maven并使用可用的插件来调用远程脚本
考虑到你已经选择的道路,这可能有点超出范围,但值得研究。
我们有几个drupal站点,我们是一个由4名开发人员和20多名非技术内容管理人员组成的团队。
每个开发人员都有自己的开发环境,我们都有一个测试代码集成和性能的beta环境,一个内容管理器在推送到实际环境之前测试功能的登台环境,一个用于培训人员的培训环境和一个专门用于可用性测试的环境。
所有这些都是在一个中央服务器上设置的,每个环境都是一个分支。我们使用带有无密码ssh证书的post-receive钩子,根据下面的case语句自动提取相应的repo:
BRANCH=`echo $line | sed 's/.*'///g'`
LOG="`date` - updating $BRANCH instance"
case $BRANCH in
"beta" )
ssh www-data@beta "cd /var/www/beta.example.com; git pull"
;;