使用git钩子在多个服务器上自动部署php

时间:2012-11-04 08:52:48

标签: php git deployment automation

最近,我们开始探索GIT,目标是让我们的开发人员可以在任何地方工作,其次是自动化整个部署过程。

我们有一个中央测试服务器,我们托管所有应用程序/站点以进行测试和/或演示,一旦开发和测试完成,我们将应用程序移动到各自的实时服务器。

无论我使用GIT设置了什么,如下所示 1.在测试服务器上创建一个裸仓库 2.为每个涉及的开发人员获取本地克隆,开发人员将推送到远程(测试服务器)dev分支
3.有人会合并从dev分支到master分支的所有更改并将其推送到远程
4.测试服务器(裸仓库)有一个post-receive钩子,它将master分支检出到public_html文件夹(使用GIT_WORKING_DIR和checkout -f)。

截至目前,一切运行良好,我能够在托管页面上的主分支上看到合并(当然,在测试服务器上)。现在我的问题是...
我这样做对吗? 2.我想我已经设置了post-receive hook,也可以在push to dev分支上执行。怎么避免这个?
3.我如何将这些内容发送到我的实时服务器?由于我有一些具有大量代码库的项目,检查测试服务器上的所有内容然后将其发送到现场看起来不够好。

我听说过CI服务器,但据我所知,他们在本地检查并使用'rsync'上传所有内容(不知道是否只是同步更改或上传所有内容) )或此类工具。我只是想避免所有部分并保持选项打开以进行回滚,如果出现任何问题。我很擅长在实时服务器上设置git。

1 个答案:

答案 0 :(得分:7)

  1. 是。您可以在“reset hard on git push”上看到其他注意事项。
  2. 您可以在收到提交时测试分支的名称 branch=$(git rev-parse --symbolic --abbrev-ref $refname) 另请参阅“Writing a git post-receive hook to deal with a specific branch
  3. 通常建议将rsync用于实时服务器(不需要git):它只会更新已更改的内容。
    如果你在实时服务器上有git,那么“Git for Websites / post-receive / Separation of Test and Production Sites
  4. 中描述了各种方法

    关于部署,如“Deploy with rsync(or svn, git, cvs) and ignore inconsistent state during deployment?”所示,在单独的目录中部署(甚至所有内容)并将prod实例符号链接到该目录是避免部署期间不一致的好方法,以及在出现问题时便于回滚(符号链接回到上一个实时目录)。