Я занимался этим весь день и не могу найти ответ, поэтому пишу здесь.Мы используем многоэтапное Capistrano для развертывания нашего приложения ruby on rails, и все будет хорошо, пока мы не перейдем к автоматизированным развертываниям.
В настоящее время, когда это выполняется в интерактивном режиме, проблем нет, развертывание завершается просто отлично.Теперь мы рассмотрим использование ci (Teamcity) для развертывания в нашей промежуточной среде после каждой успешной сборки.
На сервере CI запуск "ssh server1" или "ssh deploy @ server1" работает без проблем.
my ci stage выглядит следующим образом и снова отлично работает из командной строки
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 не показывает никаких попыток соединения, поэтому устранение неполадок со стороны сервера не представляется возможным.
Итак, мои вопросы: как мне это работает?Любые идеи относительно тестов, чтобы определить, где проблема, или переменные среды, которые мне нужно установить, будут оценены.
Любой ответ, который приведет меня к решению, будет принят.
Спасибо.