Mercurial自动化部署

10

我正在寻找一种简化我们其中一个 PHP Web 应用程序部署过程的方法(如果它在这个应用程序上起作用,我将在其他应用程序中推出它)。

我很喜欢这个网站:http://www.springloops.com/,但它是 SVN 而我们使用 Mercurial。

不幸的是,我们没有当前服务器的 shell 访问权限,因此如果有人有任何想法,最好是通过 FTP 进行处理。

3个回答

10

您需要在钩子中使用Mercurial的hg archive命令。该命令将获取您指定的修订版本(通过标签等方式),然后进行导出。

在您的“生产”存储库的hgrc文件中,您可以添加以下内容:

[hooks]
changegroup = ./doDeploy.sh

然后 ./doDeploy.sh 中将包含这些内容:

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

你最终将不得不解决各种小问题,例如文件权限、从代码库中删除但在服务器上仍存在的文件等等。但总体而言,这为一个系统提供了良好的框架,一旦发布管理器推送更改,它会自动将快照上传到生产系统。


我假设在Windows系统上,这只是一个批处理文件,对吗? - richzilla
当然可以,或者你可以在Python中进行进程处理。有关详细信息,请参阅免费Mercurial书的第10章。 - Ry4an Brase
存档,因为它导出整个仓库,在持续部署方面不是最佳方式(传输大小)。 - Lazy Badger

2

这是我的意见: 答案中的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

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接