2011-11-21 63 views
3

我一直在研究这一整天,似乎无法找到答案,所以我张贴在这里。我们正在使用capistrano multistage来部署我们的Rails应用程序,一切都很好,直到我们开始自动部署。capistrano ssh连接 - 从cron或teamcity运行时不工作

现在,只要这是交互式运行没有问题,部署完成就好了。我们现在正在考虑在每次成功构建之后使用ci(Teamcity)部署到我们的临时环境。

在CI服务器上,运行“ssh server1”或“ssh deploy @ server1”的工作没有问题。

我的CI阶段是这样的,再从命令行工作正常

set :branch, "development" 
set :rails_env, "staging" 
set :user, "deploy" 

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require 'rvm/capistrano' 
set :rvm_ruby_string, 'ruby-1.9.2-p290' 
set :rvm_bin_path, "/usr/local/rvm/bin/" 

default_run_options[:pty] = true 
ssh_options[:verbose] = :debug 
default_run_options[:pty] = true 

role :app, "server1" 
role :web, "server1" 
role :utility, "server2" 
role :db, "server1", :primary => true 

我deploy.rb是非常大的,但这些都是相关的设置

# Repo Settings 
set :repository, "[email protected]:myrepo/myrepo.git" 
set :scm, "git" 
set :checkout, 'export' 
set :copy_exclude, ".git/*" 
set :deploy_via, :remote_cache 

# General Settings 
default_run_options[:pty] = true 
set :ssh_options, { :forward_agent => true } 
set :keep_releases, 20 
set :use_sudo, false 

在团队市最后的构建步骤我添加了一个命令行任务,它只是简单的“cap ci deploy:setup” - 作为比完整部署更容易的测试

cap日志显示了我:

[03:27:38]: [Step 4/10] D, [2011-11-21T03:27:38.103284 #22035] DEBUG -- net.ssh.authentication.session[70ca88]: allowed methods: publickey,password 
[03:27:38]: [Step 4/10] E, [2011-11-21T03:27:38.103328 #22035] ERROR -- net.ssh.authentication.session[70ca88]: all authorization methods failed (tried publickey) 

同样的事情,似乎从一个cronjob发生 - 但没有记录有

对我来说这似乎是一个环境问题,因为TeamCity的和可能的cron加载的arent我的全部环境。我试过直接在cap文件中指定我的ssh密钥,除此之外,它似乎没有任何作用。

另一个奇怪的是,在我试图部署到的远程服务器上,auth.log显示没有尝试连接,因此从服务器端进行故障排除似乎不是一种选择。

所以我的问题是,我怎么得到这个工作?任何想法,以确定问题的地方,或我需要设置的环境变量赞赏。

任何将我带到解决方案的答案都将被接受。

谢谢。

+0

为什么你将'forward_agent'选项设置为yes?不会有crontab中的SSH代理。 – Zoredache

+0

我想使用转发代理,而不是将私钥放在远程服务器上。从我读到的代理不可用net.ssh会尝试建立连接。 – pablo

+0

cron是否将脚本作为所需用户运行?如果脚本以root身份运行,它也会尝试使用来自root用户的publickey,这可能不会被服务器识别。 (公共密钥是用户绑定的) – HectorMalot

回答