我想在本地计算机(LOCAL_MACHINE)上运行cap deploy
,在虚拟机上进行部署(vagrant)(DEPLOY_SERVER)。来源位于第三个远程机器上的git存储库(GIT_SERVER)。
当我在LOCAL_MACHINE上运行cap staging deploy:update
时,它连接到DEPLOY_SERVER,执行一些操作并尝试执行命令
git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git
结束于:
executing locally: " git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git staging"
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
*** [deploy:update_code] rolling back
* executing "rm -rf /var/www/sites/my_site_staging/releases/20140117154348; true"
servers: ["localhost"]
[localhost:2222] executing command
command finished in 71ms
Command git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git staging returned status code pid 4956 exit 128
但是当我在LOCAL_MACHINE上运行capistrano shell cap shell
时,它成功连接到DEPLOYMENT_SERVER。
然后我运行(在cap-shell中)命令
git ls-remote ssh://git@GIT_SERVER:7999/path/to/repo.git staging
我得到了正确答案:
** [out :: localhost:2222] adec1c91e5486a946be30845878cdd5b8420dcfe refs/heads/staging
我不想在我的LOCAL_MACHINE(ssh_options[:forward_agent] = false
)上使用密钥,我已经在DEPLOYMENT_SERVER上准备了部署用户,并且他/他已经(在登录后)只使用DEPLOYMENT_SERVER上的密钥访问GIT_SERVER。
我很困惑cap shell command
有效但cap deploy
没有。
BTW:我正在尝试在Vagrant虚拟机上测试登台部署(DEPLOYMENT_SERVER ssh:localhost:2222)。但是在真正的临时服务器上会出现同样的问题。
我发现deploy:update_code
上的Capistrano 2.15.4正在从LOCAL_MACHINE进行git ls-remote __repo_url__
,而不是来自DEPLOY_SERVER。
可以覆盖。
原件:
_cset(:real_revision) { source.local.query_revision(revision) { |cmd| with_env("LC_ALL", "C") { run_locally(cmd) } } }
在deploy.rb中覆盖为:
set(:real_revision) { source.query_revision(revision) { |cmd| with_env("LC_ALL", "C") { run(cmd) } } }
将在DEPLOY_SERVER上成功运行命令,但不知何故不能得到结果。代替:
"7a8164e340e724b1c96c28ed925f6e41194daed7\trefs/heads/master\n004d1efd07b432cab6d7924df1ef7c3cd0c8bedb\trefs/remotes/origin/master\n"
你有
nil