2011-04-20 23 views
15

我負責啓動Web項目,目前從客戶端簽署到最終啓動需要很長時間。它位於我有權訪問的服務器上,但它運行Plesk,以便老闆可以設置VirtualHosts,這意味着有許多網站正在運行。使用Git進行PHP部署。我怎樣才能讓它更自動化?

每個項目都有自己的git存儲庫,所以目前我有以下設置。

在我的登臺服務器上有一個repo的克隆,我有兩個裸存儲庫。一個在僞造(由Indefero驅動),另一個在活動服務器上。

項目的每個版本都標有今天的日期,例如。 git tag -a deployed-2011-04-20

因此,在登臺服務器上,我執行類似於git push --tags live master的操作,該操作以live服務器上的裸回購爲目標。

然後通過實時服務器上的SSH,我執行一個簡短的bash腳本,它基本上將存儲庫從實時裸回購庫複製到Apache將提供的文件夾中。

所以,如果這一切都有道理,你會能夠推薦一個工具或任何東西,使我的生活更輕鬆,遵循工作流程或可以適應?

它看起來是這樣的:

Forge (authoritative source) 
^
    | 
    v 
Staging/development server 
    | 
    v 
Live server bare repo 
    | 
    v 
Releases folder (symlinked to htdocs) 

回答

2

想到的一個解決方案是在實時服務器裸回購中添加一些post-receive掛鉤,以檢測來自暫存回購的任何已部署的2011-xx-yy標籤,並從觸發ssh腳本那裏。

另一個解決辦法是有一個調度器(像哈德森提pderaaijanswer,以便:

  • 監控說明回購,並在右邊的標記,觸發直播服務器上的推
  • 監控現場裸露的回購協議,並引發了SSH腳本。

第二個解決方案的優點,以保持所有發佈實例的痕跡在哈德森的工作報告,每次說的工作檢測正確的標籤和執行發佈過程。

+0

「在裸機服務器上添加一些post-receive hook回購,以便檢測來自分段回購的任何已部署的2011-xx-yy標籤,並從那裏觸發ssh腳本。「 - VonC - 請你分享一下上面的例子嗎? – MEM 2012-03-22 13:15:39

1

如果您使用哈德森作爲continious集成服務器,您可以使用構建流水線插件。

您有正常的構建過程,但添加了一個額外的作業,其中包含用於部署應用程序的命令。該插件爲您提供了一個很好的按鈕來執行該構建。

哈德森工作可以執行所有需要的命令,也可以在Maven for PHP採取偷看並使用可用的插件調用遠程腳本

也許是有點超出範圍考慮到你所選擇的路徑已經,但它是值得研究。

2

看看Capistrano,它很高興地在這裏描述的符號鏈接舞蹈。

+0

您能否詳細說明其維護此git工作流程的能力? Symlinking是整個過程中最簡單的部分! :-) – Treffynnon 2011-04-21 07:47:46

+0

雖然它是一種常規部署工具,但內置的配方(以及來自[capitate](http://capitate.rubyforge.org/recipes/deploy.html)的配方)可以輕鬆完成git push和然後在一個或多個環境中運行相當於您的腳本(在您的案例中進行分段和製作)。 – 2011-04-21 18:20:42

1

我們得到了幾個我們爲之開發的drupal站點,我們是由4名開發人員和大約20多名非技術內容經理組成的團隊。

每個開發人員都有自己的開發環境,我們都有一個測試代碼集成和性能的測試環境,一個臨時環境,內容管理員在推向實時環境之前測試功能,我們用來訓練的培訓環境人員和特定於可用性測試的環境。

所有在每個環境都是分支的中央服務器上僅設置1個裸回購即可。我們使用帶無密碼ssh證書的post-receive hook根據以下情況聲明自動提取適當的回購:

BRANCH=`echo $line | sed 's/.*\///g'` 
LOG="`date` - updating $BRANCH instance" 
case $BRANCH in 
    "beta") 
    ssh [email protected] "cd /var/www/beta.example.com; git pull" 
    ;;