如何在用户不注意的情况下对生产中的网站进行代码更改?
How code changes to a website in production are done without its users noticing it?
假设有一个网站正在制作中,即托管在一些网络托管公司的服务器上,并可通过网络公开访问。
现在开发人员想要更改一些代码。下面的流程是真实的网络公司在走的吗?
- 开发人员在自己的本地 Git 存储库中进行更改。
- 代码审查。
- 开发人员将代码推送到远程 Git 存储库。
- 开发人员访问网络服务器,"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
或类似的
假设有一个网站正在制作中,即托管在一些网络托管公司的服务器上,并可通过网络公开访问。
现在开发人员想要更改一些代码。下面的流程是真实的网络公司在走的吗?
- 开发人员在自己的本地 Git 存储库中进行更改。
- 代码审查。
- 开发人员将代码推送到远程 Git 存储库。
- 开发人员访问网络服务器,"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
或类似的