Capistrano SSH соединение - не работает при запуске из cron или teamcity

Я исследовал это весь день и не могу найти ответ, поэтому пишу здесь. Мы используем capistrano multistage для развертывания нашего приложения ruby ​​on rails, и все будет хорошо, пока мы не перейдем к автоматическому развертыванию.

Прямо сейчас, когда это выполняется в интерактивном режиме, проблем нет, развертывание завершается просто отлично. Сейчас мы рассматриваем использование 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,  "git@github.com: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

В качестве заключительного этапа сборки в Team City я добавил задачу командной строки, которая называется просто "cap ci deploy:setup" - как более простой тест, чем полное развертывание.

Журнал шапки показывает мне это:

[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 не загружают мою полную среду. Я, между прочим, попытался указать мой ключ ssh непосредственно в файле cap, и это, похоже, не имеет никакого эффекта.

Другая странность в том, что на удаленном сервере, на котором я пытаюсь выполнить развертывание, файл auth.log не показывает никаких попыток подключений, поэтому устранение неполадок со стороны сервера, по-видимому, не вариант.

Итак, мои вопросы, как мне заставить это работать? Любые идеи о тестах, чтобы определить, где проблема, или переменные среды, которые мне нужно установить, приветствуются.

Любой ответ, который приведет меня к решению, будет принят.

Благодарю.

1 ответ

Решение

Я исправил это, изменив соединение ssh в ssh / config, запустив ssh-agent с определенным pid, добавив переменные среды и добавив шаг сборки, чтобы добавить ключ к агенту ssh в работающей сборке.

http://petey5king.github.com/2011/12/09/deploying-with-capistrano-from-teamcity.html

Другие вопросы по тегам