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

Uda*_*ant 6 php git deployment automation

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

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

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

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

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

Von*_*onC 7

  1. 是.您可以在" 重置git push "中查看其他注意事项.
  2. 您可以在接收提交时测试分支的名称.
    branch=$(git rev-parse --symbolic --abbrev-ref $refname) 另请参阅" 编写git post-receive挂钩以处理特定分支 "
  3. 通常建议对实时服务器使用rsync(不需要git):它只会更新已更改的内容.
    如果您在实时服务器上有git,那么" Git for Websites/post-receive/Separation of Test and Production Sites " 中描述了各种方法.

关于部署,如" 部署rsync(或svn,git,cvs)并忽略部署期间的不一致状态? ",在一个单独的目录中部署(甚至所有内容)并将prod实例符号链接到该目录是一种很好的避免方法部署期间的不一致,以及在出现问题时便于回滚(符号链接回到上一个实时目录).


归档时间:

查看次数:

2864 次

最近记录:

13 年,1 月 前