gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:19:43 26 4
gpt4 key购买 nike

最近我们开始探索 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com