Net::SSH实现远程转发。我查看了 Capistrano 的所有源代码,在当前版本中看不到任何对它的引用。尽管如此,这不会阻止您在使用 Capistrano 部署之前建立远程转发。
您要做的是单独设置:local_repository
和:repository
路径。:local_repository
在本地引用以确定在启动连接之前将用于部署的提交。这留给:repository
远程服务器在连接启动后拉取。您可以在此处指定防火墙后面的存储库的路径。
# deploy.rb
set :local_repository, "ssh://git@serverbehindfirewall/path/to/project.git"
set :repository, "ssh://git@localhost:9000/path/to/project.git"
在部署之前,请务必建立远程转发。您需要为部署到的每台服务器重复此操作。
$ ssh -R 9000:serverbehindfirewall:22 deploybot@deployserver.com
# CTRL + C + A (Screen) or ⌘ + T (Terminal.app) to open new tab
$ cap HOSTFILTER=deployserver.com deploy # HOSTFILTER reduces set to specified host. Only useful if you have multiple servers.
使用 Net::SSH,这可以很容易地变成一个任务,在部署到多个服务器时提供更大的灵活性。
最后,鉴于您一直在使用 scp,您可能希望设置deploy_via, :remote_cache
在远程服务器上保留存储库的副本。这大大减少了您的部署时间,减少了损坏的机会。