2010-04-21 137 views
9

我在尋找一種方式來精簡我們的PHP Web應用程序的一個(如果它的工作原理在此我將這項服務推廣到其他應用程序)的部署過程。水銀自動化部署

我很喜歡這樣的外觀:http://www.springloops.com/,但它是SVN,我們正在使用水銀。

不幸的是我們沒有對我們當前的服務器shell訪問,使一些作品通過FTP將是最好的,如果任何人有任何想法?

回答

9

你會想用鉤子使用水銀的hg archive命令。它會顯示您指示的修訂(通過標記等)的快照,然後將其導出。

在你的「生產」存儲庫的hgrc你可以有這樣的事情:

[hooks] 
changegroup = ./doDeploy.sh 

,然後./doDeploy.sh將不得不在它:

hg archive -r tip /tmp/deployme 
ftp /tmp/deployme ftp://remoteserver 

你最終不得不各地的所有工作諸如文件權限之類的小故障,從repo中刪除但仍然存在於服務器上的文件等等,但總的來說,這爲系統提供了一個很好的框架,當發佈管理器將更改推送到系統時,它會自動上傳如napshot到活的系統。

+0

我假設在Windows系統上,這只是bat文件而已? – richzilla 2010-04-21 15:16:37

+0

這當然是可能的,或者你可以在Python中進行處理。詳細信息請參閱免費水銀書第10章。 – 2010-04-21 22:29:14

+0

存檔,因爲它導出整個存儲庫,不是恕我直言連續部署的最佳方式(傳輸大小) – 2013-01-13 01:27:09

2

這就是我的5美分: 如果你想保持全部同步,這個答案的ftp部分只適用於沒有子目錄的項目(FTP不支持它們),這裏是我的sh腳本(它使用LFTP, -e選項刪除文件,遠程不再存在局部):

#!/bin/sh 
rm -rf /home/user/tmp/deploy/* 
hg archive -r tip /home/user/tmp/deploy/ 
lftp -u username,password your.ftpsite.com << END_SCRIPT 
set ftp:ssl-allow no 
cd httpdocs/yoursite/ 
mirror -R -e --only-newer --log=/home/user/lftp.log /home/user/tmp/deploy . 
END_SCRIPT 
echo "#--- $(date)" >> /home/user/lftp.log 
exit 0