我在一家公司工作,在某些情况下必须通过 FTP 部署 php web 应用程序。我正在自动化部署过程,需要编写一个脚本来将文件通过 FTP 传输到暂存和生产环境。
要求:
- 只应将新的或更改的文件传输到远程服务器
限制:
- 远程环境中没有任何类型的 shell 访问
- 无法使用 rsync
- 仅 FTP 可用
我的问题是:是否有任何基于 FTP 的实用程序可以满足这些要求,而不必自己编写?
答案1
只要您控制客户端,您就可以在客户端上使用 FTPFS,然后将本地目录 rsync 到显然是本地但实际上是通过 FTPFS 安装的目录。
我了解 FTPFS 现在是卢夫斯。
编辑:我很想链接到教程,但我通常只是从项目 wiki 开始,而 sourceforge 现在似乎出了点问题。CurlFTPFS 似乎基于 cURL 和 FUSE,可以在这里找到,并且那里的安装/卸载看起来很简单:
$ mkdir sunet
$ curlftpfs ftp://ftp.sunet.se/ sunet/
$ cd sunet/
$ ls -l
total 0
Dr-xr-xr-x 3 root root 96 Feb 23 2004 bin
dr-xr-xr-x 2 root root 72 Mar 2 2004 dev
dr-xr-xr-x 2 root root 48 Feb 23 2004 etc
dr-xr-xr-x 2 root root 120 Feb 23 2004 lib
-rw-r--r-- 1 root root 622187310 Mar 11 06:13 ls-lR
-rw-r--r-- 1 root root 76389037 Mar 11 06:15 ls-lR.gz
drwxrwxr-x 37 root root 1272 Feb 27 14:17 pub
dr-xr-xr-x 3 root root 72 Feb 23 2004 usr
$ cd ..
$ fusermount -u sunet/
答案2
我们使用 ant 进行脚本编写和自动化。ant FTP 任务有一个“depends”参数,它只传输新的或更改的文件http://ant.apache.org/manual/Tasks/ftp.html
答案3
也许可以使用类似 ncftp 的方法来将目录同步到服务器。您甚至可以将其放入 capistrano(在签出要部署的版本后,覆盖 :deploy 并运行 ncftp 命令)。