php - 使用 git hooks 在多台服务器上自动部署 php

标签 php git deployment automation

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

我们有一个中央测试服务器,我们在其中托管所有用于测试和/或演示目的的应用程序/网站,一旦开发和测试完成,我们就会将应用程序移至它们各自的实时服务器。

无论我用 GIT 设置什么,如下
1. 在测试服务器上创建一个裸仓库
2. 为每个参与的开发人员获取本地克隆,开发人员将推送到远程(测试服务器)开发分支
3、有人会把dev分支的所有变更 merge 到master分支,并推送到远程
4. 测试服务器(裸仓库)有一个接收后 Hook ,它将主分支 check out 到 public_html 文件夹(使用 GIT_WORKING_DIR 和 checkout -f)。

截至目前,一切正常,我能够在托管页面(当然在测试服务器上)的主分支上看到 merge 。现在我的问题是......
1. 我这样做对吗?
2. 我想我设置的接收后 Hook 也会在推送到开发分支时执行。如何避免这种情况?
3. 如何将这些内容发送到我的实时服务器?因为我有一些代码库很大的项目,检查测试服务器上的所有内容然后将其发布到现场看起来不够好。

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

最佳答案

  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”中描述了各种方法

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

关于php - 使用 git hooks 在多台服务器上自动部署 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217258/

相关文章:

visual-studio-2010 - 从命令行构建 Web 部署包

php - MySQL - 根据关系表的值在最终输出中添加额外的列

PHP代码在网站上可见

git - VS 代码 Git : spawn EBADF

php - 在 IIS 上通过 PHP 设置 git 部署时遇到问题

git - 从 Git 中的多个提交中导出修改后的文件

ruby - Mina 部署 : invoke task once `current` symlink is updated

java - WebSphere 服务器未接受 EAR 中的新更改

php - MSSQL 日期到 php

php - 是否可以键入不止一种类型的提示?