Как сделать откат Capistrano НЕ в случае сбоя задачи - PullRequest
34 голосов
/ 26 января 2011

Мы используем Capistrano / Webistrano (с самоцветом Lee Hambley для развертывания без рельсов), чтобы перенести наше PHP-приложение на рабочие серверы. У меня есть несколько пользовательских задач, которые запускаются во время различных частей процесса развертывания.

Например, у меня есть задачи, которые пытаются остановить и перезапустить экземпляр Jetty Solr. Однако иногда этот бит дает сбой во время развертывания, поэтому Capistrano откатывает все развертывание и возвращает к предыдущей версии. Это боль. : -)

Я бы хотел попросить Capistrano игнорировать возвращаемый результат этих задач, поэтому, если они потерпят неудачу, Capistrano продолжит работу и в любом случае завершит развертывание. После этого мне очень легко подключиться к серверу по ssh и правильно убить и перезапустить экземпляр solr, вместо того, чтобы снова выполнять полное развертывание.

Вот некоторые важные части сценария развертывания:

before "deploy:symlink", :solr_kill
after "deploy:symlink", :solr_start, :solr_index

task :solr_kill do
    run "cd #{current_path}/Base ; #{sudo} phing solr-kill"
end

task :solr_start do
    run "cd #{current_path}/Base ; #{sudo} phing solr-start"
    run "sleep 10"
end

task :solr_index do
    run "#{sudo} #{current_path}/Base/Bin/app.php cron run solr_index_cron"
end

1 Ответ

33 голосов
/ 29 января 2011

из документов Capistrano Task есть конфигурация, к которой вы можете добавить, если есть ошибка, чтобы продолжить.

task :solr_start, :on_error => :continue do
    # your code here
end

Просто добавьте это к каждой задаче, которую хотите игнорировать, и продолжайте. Однако лучше всего посмотреть, сможете ли вы выяснить причину сбоя и сделать команду перезапуска более надежной, чтобы действительно перезапустить ее. Я только говорю это, поскольку, когда вы пытаетесь передать сценарий кому-то другому, они могут не знать точно, как определить, правильно ли он перезапустился.

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