如何在用户不注意的情况下对生产中的网站进行代码更改?

How code changes to a website in production are done without its users noticing it?

假设有一个网站正在制作中,即托管在一些网络托管公司的服务器上,并可通过网络公开访问。

现在开发人员想要更改一些代码。下面的流程是真实的网络公司在走的吗?

  1. 开发人员在自己的本地 Git 存储库中进行更改。
  2. 代码审查。
  3. 开发人员将代码推送到远程 Git 存储库。
  4. 开发人员访问网络服务器,"git fetch->rebase" 获取最新更新。

然后,一旦用户刷新页面,更改将反映在其浏览器上。

上面的过程是否正确(我知道它可能过于简化,但我只想知道这是否是一般流程)?

为生产做一个主分支,每次上传都会合并到这个主分支并推送,在生产服务器上做一个拉。简单的一块。

一种方法是使用 git hook。例如,您可以执行以下操作:

在您的生产服务器上,您创建了存储库的克隆,将其放置在 /var/git/<repository> 下,然后将 /var/git/<repositiory>/hooks/post-update.sample 重命名或复制到 /var/git/<repository>/hooks/post-update。然后编辑 /var/git/<repository>/hooks/post-update,将其更改为:

 !/bin/sh  
 # move into location of your production folder  
 cd /var/www/<repository> || exit  
 unset GIT_DIR  
 # pull the /var/git/<repository> into production  
 git pull hub master`

确保 /var/git/<repository>/hooks/post-update 是可执行的 运行:

 chmod +x /var/git/<repository>/hooks/post-update

然后您进入您的产品的 Web 根目录并克隆存储库。

 cd /var/www/<repository>/
 git clone /var/git/<repository>
 cd <repository>
 git remote rename origin hub

最后在您的本地环境中添加一个远程:

 git remote add production <user>@<server>:/var/git/<repository>

然后您可以将本地更改推送到生产服务器存储库,这反过来会触发 post-update 挂钩,这会将主服务器检出到生产文件夹。请注意,您还需要将更改推送到实际的主存储库:

 git push staging master

您应该注意到这处理任何数据库迁移。为了处理这个问题,我会使用 CI 之类的 Jenkins 或类似的