Capistrano SSH соединение - не работает при запуске из cron или teamcity - PullRequest
3 голосов
/ 21 ноября 2011

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

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

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

Спасибо.

1 Ответ

1 голос
/ 10 декабря 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...