在 Drupal 环境中:是否有比我当前部署更好的 git 部署?

In a Drupal environment: is there a better git deployment than my current one?

我们是 运行 一个使用 Drupal 的中大型网站,并使用 git 维护代码。最近,我们也开始使用git部署live(以前我们只是使用git来更好地维护和备份代码)。

很遗憾,我们的git文件夹结构如下:

不幸的是,这些文件夹不在实时环境中的一层上(而 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 更改回其原始值。