我正在尝试使用Capistrano部署一个PHP网站。该网站由4个组件(前端代码和3个web服务)组成,每个组件都存储在自己的git存储库中。我想把所有4个组件部署到一个单一的树状结构中(见下文),这样在网站版本之间的切换就像移动“当前”链接一样简单。
我看到默认情况下,Capistrano部署被设计为部署单个存储库。如果我正确理解它,即使使用类似集线器的东西也不会对我有帮助,因为这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脚本,以避免在每次部署中更新子模块的麻烦(非常麻烦的过程!)要进行部署,我运行脚本(下面是源代码),然后运行“”。
#!/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 发布于 2012-03-30 11:30:20
在部署rails应用程序和一个webservice时,我遇到了非常类似的问题。我决定使用git子模块,它应该可以解决所有的问题。
您只需要创建一个主要的git存储库,它将添加前端和所有and服务作为子模块。然后,在capistrano中,您只需指向这个主存储库并将git_enable_submodules设置为1。
然后,您可以单独开发所有4个组件,当您想要部署时,只需更新子模块来更正点并提交主存储库。这种方法应该给出您所介绍的目录布局,并且应该可以轻松地回滚。
发布于 2016-11-05 16:57:43
我在使用Capistrano v3.6执行由3个单独Git存储库组成的web应用程序的原子部署时遇到了同样的问题。
正如您所讨论的,我使用了子模块方法,但是对于v3 (查看post的日期,可能是v2),使用了更自动化的方式。
步骤
set :repository, 'submodules-repo-url'set :git_strategy, SubmoduleStrategy
上面的策略负责更新子模块,所以它就像一个简单的Git。
它将子模块作为当前发行版下的单独文件夹获取,就像在大纲中一样。cap deploy和享受。我写了一篇关于它的博文,更多的信息可以找到这里。
https://stackoverflow.com/questions/9860593
复制相似问题