我正在尝试使用Capistrano部署PHP网站。该网站由4个组件(前端代码和3个Web服务)组成,每个组件都存储在自己的git存储库中。我想将所有4个组件部署到单个树结构中(见下文),以便在网站版本之间切换就像移动“当前”链接一样简单。
我看到默认情况下,Capistrano部署旨在部署单个存储库。如果我理解正确,即使使用Caphub这样的东西也无济于事,因为4个组件将被部署到4个不同的树中,使得回滚到特定时间点是一个繁琐的过程。
有没有办法使用Capistrano获得以下配置?这种情况的最佳做法是什么?
root/
| current/
| releases/
| | <timestamp/>
| | | frontend/
| | | webservice-1/
| | | webservice-2/
| | | webservice-3/
| | <timestamp/>
| | | frontend/
| | | webservice-1/
| | | webservice-2/
| | | webservice-3/
| shared/
更新
按照接受的答案建议使用子模块解决方案。我创建了一个包含4个子模块的网站存储库和一个网站部署存储库,我保存了capistrano部署文件。我写了一个简单的shell脚本,以免在每次部署时更新子模块的麻烦(这是一个非常麻烦的过程!)。要部署我运行脚本(下面的源代码),然后运行“cap deploy”。
#!/bin/sh
git clone gitserver:path_to_git_repositories/website.git cloned
cd cloned
git submodule init
git submodule update
git submodule foreach git pull origin master # updating all modules to the current code in the master branch
git submodule foreach git add .
git commit -a -m "Updating submodules"
git push origin master
cd ..
rm -rf cloned
答案 0 :(得分:2)
当我部署rails应用程序和一个Web服务时,我遇到了类似的问题。我决定使用git子模块,它应该解决你所有的问题。
您只需要创建一个主要的git存储库,它将前端和所有Web服务添加为子模块。然后在capistrano中,您只需指向此主存储库并将git_enable_submodules设置为1.
然后,您可以单独开发所有4个组件,当您要部署时,只需更新子模块以更正点并提交主存储库。这种方法应该准确地给出这个目录布局,并且应该可以很容易地回滚。
答案 1 :(得分:1)
我尝试使用Capistrano v3.6 执行包含3个独立Git存储库的Web应用程序的原子部署时遇到了同样的问题。
我使用的Submodules方法正如您所讨论的那样,但是以更自动化的方式和v3(查看帖子的日期,可能是v2)。
<强>步骤强>
set :repository, 'submodules-repo-url'
set :git_strategy, SubmoduleStrategy
cap deploy
并享受。我写了一篇关于它的博客文章,可以找到更多信息here。