2011-11-21 64 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

回答