2017-01-04 3 views
0

Я пишу настраиваемую задачу в Capistrano 3 (lib/capistrano/tasks/revision), которая извлекает исправление работающего приложения через curl.Как структурировать настраиваемую задачу и как я могу получить результат?

Затем он сравнивает текущую версию с последней развернутой и сравнивает их, если они не совпадают с ошибкой.

Я дошел до того, что ревизия запущенного приложения извлекается и сравнивается с пустой строкой, чтобы вывести ошибку.

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

Что мне не хватает? Я весь день копаю в документации.

С уважением!

revision.rake:

namespace :revision do 
    desc 'Check revision of all applications to determine if the application is running the latest deployed revison' 
    task :check do 
    puts 'Checking revision of all supported applications' 

    invoke 'revision:httpapi' 
    end 

    task :httpapi do 
    on roles(:httpapi), in: :sequence do |host| 
     puts "Checking revision of httpapi on #{host}" 
     begin 
     response = capture "curl -L 'http://#{fetch(:diagnostics_username)}:#{fetch(:diagnostics_password)}@#{host}/diagnostics/status?mode=extended&output=detailed'" 
     object = JSON.parse(response, object_class: OpenStruct) 

     unless object.result.revision == "" #For test, just compare to empty string so error is thrown 
      raise 'The running revision is not the same as the installed, please restart all applications' 
     end 
     rescue Exception => e 
     raise e.message 
     end 
    end 
    end 
end 

Выход:

[email protected] ~/Development/tulo-deployment (master) $ cap test revision:check 
Enter a branch or tag name to deploy (defaults to develop) 
Please enter branch (develop): 
Deploying branch/tag: develop 
rvm 1.28.0 (latest) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/] 
rvm 1.28.0 (latest) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/] 
ruby-1.9.3-p545 
ruby-1.9.3-p545 
ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux] 
ruby 1.9.3p545 (2014-02-24 revision 45159) [x86_64-linux] 
Checking revision of all supported applications 
Checking revision of httpapi on 10.30.1.1 
(Backtrace restricted to imported tasks) 
cap aborted! 
The running revision is not the same as the installed, please restart all applications 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:20:in `rescue in block (3 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:12:in `block (3 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:10:in `block (2 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:6:in `block (2 levels) in <top (required)>' 
The running revision is not the same as the installed, please restart all applications 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:17:in `block (3 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:10:in `block (2 levels) in <top (required)>' 
/home/gonace/Development/tulo-deployment/lib/capistrano/tasks/revision.rake:6:in `block (2 levels) in <top (required)>' 
Tasks: TOP => revision:httpapi 
(See full trace by running task with --trace) 
+0

Это поможет, если вы показали код, который вы пытаетесь. В противном случае вы, по сути, просите кого-то написать для вас документацию по выпуску Capistrano, которая частично существует здесь: https://github.com/capistrano/sshkit#output-handling –

+0

Конечно, я не смог получить доступ к этой части, когда писал вопрос, но я добавил его. – gonace

ответ

1

Хорошим примером подобной решаемой задачи в ядре здесь: https://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/deploy.rake#L91

Вдоль этих линий, вы будете вероятно, хотите получить код примерно так:

task :httpapi do 
    on roles(:httpapi), in: :sequence do |host| 
    puts "Checking revision of httpapi on #{host}" 
    response = capture "curl -L 'http://#{fetch(:diagnostics_username)}:#{fetch(:diagnostics_password)}@#{host}/diagnostics/status?mode=extended&output=detailed'" 
    object = JSON.parse(response, object_class: OpenStruct) 

    unless object.result.revision == "" #For test, just compare to empty string so error is thrown 
     error 'The running revision is not the same as the installed, please restart all applications' 
     exit 1 
    end 
    end 
end 

Edit:

Для того, чтобы вывести раскрашенный текст, вы можете использовать:

Airbrussh::Colors.green('Your message') 

От: https://github.com/mattbrictson/airbrussh/blob/master/lib/airbrussh/colors.rb

+0

Это похоже на то, что все работает, но выход - просто белый текст, что я пропустил? – gonace

+0

Цветной текст обычно является частью вывода команды. Есть ли другой пример этого в другом выпуске, который вы пытаетесь реплицировать? –

+0

Привет, на данный момент, если задача существует с ошибкой, текст просто белый и показывает ошибки, поскольку это можно было легко упустить. Я только пытаюсь заставить задачу показать тот же результат, что и Capistrano, «выполнить», поэтому, если я изменю «захват» на «выполнение», выходные изменения будут изменены. Однако мне нужно зафиксировать вывод команды curl. Любые идеи? – gonace