2012-03-25 32 views
1

我想部署一個PHP網站使用Capistrano。該網站由4個組件(前端代碼和3個Web服務)組成,每個組件都存儲在它自己的git存儲庫中。我想將所有4個組件部署到一個樹形結構中(見下文),因此網站版本之間的切換將與移動「當前」鏈接一樣簡單。將多個應用程序部署到與Capistrano和Git的單一樹

我看到,默認情況下,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腳本來爲我節省每次部署時更新子模塊的麻煩(一個非常繁瑣的過程!)。部署我運行腳本(源代碼下面),然後運行「帽部署」。

#!/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

有一種新的方法。請參閱此答案http://stackoverflow.com/a/40921589/2067375。 (免責聲明:我是寶石的擁有者) – 2016-12-01 22:38:47

回答

2

我在部署rails應用程序和一個webservice時遇到了非常類似的問題。我決定使用git submodules,它應該可以解決你所有的問題。

你只需要創建一個主要的git存儲庫,將前端和所有web服務添加爲子模塊。然後在capistrano中,您只需指向此主存儲庫並將git_enable_submodules設置爲1.

然後,您可以分別開發所有4個組件,並且當您要部署時只更新子模塊以更正點並提交主存儲庫。這種方法應該正好給出這個目錄佈局,並且應該使其易於回滾。

1

我試圖使用Capistrano v3.6對3個獨立的Git存儲庫進行網絡應用程序的原子部署時,遇到同樣的問題。

我使用子模塊的方法,因爲你討論,但在一個更自動化的方式和v3(看帖子的日期,它可能是v2)。

步驟

  1. 有1個回購的上限配置和另一1分組主項目回購的子模塊。
    set :repository, 'submodules-repo-url'
  2. 替換Cap的Git策略以支持子模塊(v2支持,在v3中放棄)。
    Find script here
    set :git_strategy, SubmoduleStrategy
    上述策略負責更新子模塊,因此它就像一個簡單的Git回購。
    它將當前版本下的子模塊作爲單獨的文件夾提取,就像在大綱中一樣。
  3. cap deploy並享受。

我寫了一篇關於它的博客文章,更多的信息可以發現here

相關問題