Mercurial自动化部署

发布于 2024-08-29 08:36:21 字数 264 浏览 2 评论 0原文

我正在寻找一种方法来简化我们的一个 php Web 应用程序的部署(如果它有效,我会将其推广到其他应用程序)。

我非常喜欢这个样子: http://www.springloops.com/,但它是 SVN 并且我们正在使用水银。

不幸的是,我们没有对当前服务器的 shell 访问权限,因此通过 ftp 运行的东西将是最好的,如果有人有任何想法?

I'm in the process of looking for a way to streamline the deployment of one of our php web applications (if it works on this I'll roll it out to other apps).

I quite like the look of this: http://www.springloops.com/, but it's SVN and we're using mercurial.

Unfortunately we have no shell access to our current server, so something that works over ftp would be best, if anyone has any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

萌梦深 2024-09-05 08:36:21

您需要从挂钩使用 Mercurial 的 hg archive 命令。它会拍摄您指示的修订版本的快照(通过标签等),然后将其导出。

在你的“生产”存储库的 hgrc 中,你可以有这样的东西:

[hooks]
changegroup = ./doDeploy.sh

然后 ./doDeploy.sh 里面会有:

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

你最终将不得不解决各种小问题,比如文件权限、已从存储库中删除但仍存在于服务器上的文件等。但总的来说,它为系统提供了一个良好的框架,在发布管理器将更改推送到系统后,系统会自动将快照上传到活动系统。

You'll want to use mercurial's hg archive command from a hook. It takes a snapshot of the revision you indicate (via tag, etc.) and then exports it.

In your "production" repository's hgrc you could have something like this:

[hooks]
changegroup = ./doDeploy.sh

and then ./doDeploy.sh would have in it:

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

You'll end up having to work around all sorts of little glitches like file permissions, files that have been deleted from the repo but still exist on the server, etc. but in general that provides a good framework for a system that, upon having changes pushed to it by a release manager automatically uploads a snapshot to alive system.

云胡 2024-09-05 08:36:21

这就是我的 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

That's my 5 cents:
The ftp part of the answer only works for projects without subdirectories (FTP doesn't suports them) if you want to keep really all in sync here is my sh script (it uses LFTP, the -e option deletes files remotely that are no longer present locally):

#!/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
纸短情长 2024-09-05 08:36:21

FTPExtension 对我来说效果很好。

FTPExtension is working well for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文