使用Git进行PHP部署.我怎样才能使它更自动化


PHP deployment using Git. How can I make it more automated?

我负责启动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"
    ;;