在 Drupal 环境中:是否有比我当前部署更好的 git 部署?
In a Drupal environment: is there a better git deployment than my current one?
我们是 运行 一个使用 Drupal 的中大型网站,并使用 git 维护代码。最近,我们也开始使用git部署live(以前我们只是使用git来更好地维护和备份代码)。
很遗憾,我们的git文件夹结构如下:
- all < 实际部署所需的文件夹
- sql < sql 用于本地测试的转储,部署不需要
- public < 放置所有网站图像的文件夹,部署不需要
不幸的是,这些文件夹不在实时环境中的一层上(而 sql 和 public 甚至不应该被推送到网上)。
所以我们所做的是创建另一个名为 workspace 的文件夹,其中 git 在收到推送后签出并仅将相关的 all 文件夹复制到实时项目中文件夹,位于 hooks/post-receive
:
#!/bin/sh
GIT_WORK_TREE=~/workspace/live git checkout -f master
# remove the current all folder to actually delete deleted files
rm -rf ~/www.website.com/sites/all
cp -r ~/workspace/live/all ~/www.website.com/sites/.
我们只是想知道这是否有任何缺点,或者是否有更好的方法?
效果很好,但你永远不知道:)
一个可能的缺点是:
- transition(最好在转换站点的时候优雅地停止服务器,这里用cp完成)
- rollback:如果站点出现问题需要快速回退到之前的版本,需要重新推送,等待新的
cp
完成。
最好是:
- 像你一样签出,但在一个以你签出的修订命名的专用文件夹中,
- 优雅地停止网络服务器
- 将 link 从 ~/www.website.com/sites/all 更改为新文件夹
- 重启服务器
link部分是瞬时的。
回滚只是将 symlink 更改回其原始值。
我们是 运行 一个使用 Drupal 的中大型网站,并使用 git 维护代码。最近,我们也开始使用git部署live(以前我们只是使用git来更好地维护和备份代码)。
很遗憾,我们的git文件夹结构如下:
- all < 实际部署所需的文件夹
- sql < sql 用于本地测试的转储,部署不需要
- public < 放置所有网站图像的文件夹,部署不需要
不幸的是,这些文件夹不在实时环境中的一层上(而 sql 和 public 甚至不应该被推送到网上)。
所以我们所做的是创建另一个名为 workspace 的文件夹,其中 git 在收到推送后签出并仅将相关的 all 文件夹复制到实时项目中文件夹,位于 hooks/post-receive
:
#!/bin/sh
GIT_WORK_TREE=~/workspace/live git checkout -f master
# remove the current all folder to actually delete deleted files
rm -rf ~/www.website.com/sites/all
cp -r ~/workspace/live/all ~/www.website.com/sites/.
我们只是想知道这是否有任何缺点,或者是否有更好的方法?
效果很好,但你永远不知道:)
一个可能的缺点是:
- transition(最好在转换站点的时候优雅地停止服务器,这里用cp完成)
- rollback:如果站点出现问题需要快速回退到之前的版本,需要重新推送,等待新的
cp
完成。
最好是:
- 像你一样签出,但在一个以你签出的修订命名的专用文件夹中,
- 优雅地停止网络服务器
- 将 link 从 ~/www.website.com/sites/all 更改为新文件夹
- 重启服务器
link部分是瞬时的。
回滚只是将 symlink 更改回其原始值。