2010-04-21 107 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