2016-07-06 3 views
2

Моя проблема немного сложная. Мне была поставлена ​​задача создать сценарий развертывания для сборки системы в Ruby (не разработан мной). Этот проект уже имеет развертывание capistrano, которое отлично работает, пока машина имеет предыдущую настройку. Моя задача - автоматизировать эту настройку, не касаясь части capistrano. Поскольку у меня нет знаний о capistrano и у меня очень мало времени для этого, я решил использовать доступный.Как называть capistrano от незаменимого скрипта

Идея состоит в том, чтобы запустить сценарий, который устанавливает сценарий, и устанавливает машину и вызывает capistrano для развертывания проекта. Я попытался следующие задачи и все произведенные некоторые ошибки:

- name: Run cap 
    shell: "cap generic_production deploy" 
    environment: 
    MACHINE: localhost 
    args: 
    chdir: /home/{{ansible_user_id}}/project 
fatal: [test]: FAILED! => {"changed": true, "cmd": "cap generic_production deploy", "delta": "0:00:00.106225", "end": "2016-07-06 15:54:42.482794", "failed": true, "rc": 1, "start": "2016-07-06 15:54:42.376569", "stderr": "/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- capistrano/setup (LoadError) 
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:152:in `require' 
    from Capfile:2:in `load'\ 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:93:in `instance_eval' 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:93:in `load' 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:172:in `load_from_file' 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:89:in `load' 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:86:in `block in load' 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:86:in `each' 
    from /usr/lib/ruby/vendor_ruby/capistrano/configuration/loading.rb:86:in `load' 
    from /usr/lib/ruby/vendor_ruby/capistrano/cli/execute.rb:65:in `block in load_recipes' 
    from /usr/lib/ruby/vendor_ruby/capistrano/cli/execute.rb:65:in `each' 
    from /usr/lib/ruby/vendor_ruby/capistrano/cli/execute.rb:65:in `load_recipes' 
    from /usr/lib/ruby/vendor_ruby/capistrano/cli/execute.rb:31:in `execute!' 
    from /usr/lib/ruby/vendor_ruby/capistrano/cli/execute.rb:14:in `execute' 
    from /usr/bin/cap:4:in `<main>'", "stdout": "", "stdout_lines": [], "warnings": []} 
- name: Run cap 
    shell: "bundle exec cap generic_production deploy" 
    environment: 
    MACHINE: localhost 
    args: 
    chdir: /home/{{ansible_user_id}}/project 
fatal: [test]: FAILED! => {"changed": true, "cmd": "bundle exec cap generic_production deploy", "delta": "0:00:00.001287", "end": "2016-07-06 15:50:21.472625", "failed": true, "rc": 127, "start": "2016-07-06 15:50:21.471338", "stderr": "/bin/sh: 1: bundle: not found", "stdout": "", "stdout_lines": [], "warnings": []} 
- name: Run cap 
    shell: "sudo -iu {{ansible_user_id}} bundle exec cap generic_production deploy" 
    environment: 
    MACHINE: localhost 
    args: 
    chdir: /home/{{ansible_user_id}}/project 
fatal: [test]: FAILED! => {"changed": true, "cmd": "sudo -iu deploy bundle exec cap generic_production deploy", "delta": "0:00:00.230098", "end": "2016-07-06 15:28:42.623268", "failed": true, "rc": 10, "start": "2016-07-06 15:28:42.393170", "stderr": "", "stdout": "Could not locate Gemfile or .bundle/ directory", "stdout_lines": ["Could not locate Gemfile or .bundle/ directory"], "warnings": ["Consider using 'become', 'become_method', and 'become_user' rather than running sudo"]} 

Есть ли способ вызова Capistrano из анзибль или не может быть сделано?

EDIT: Generic_production - это сценарий развертывания, который использует MACHINE как цель.

+0

Капистрано, как правило, должен запускаться на вашей локальной машине, а Ansible - это выполнение команд на удаленном компьютере. Вы уверены, что это практично? Я не уверен, что такое «МАШИНА», это кажется нестандартным. – tadman

+0

Я не думаю, что это практично. В идеале я бы перепроектировал все с невозможным. Но мне не хватает времени для этого или узнать, как настроить с помощью capistrano. Есть ли способ, чтобы capistrano запускался локально? – joaonrb

+0

Я говорю, что Capistrano внутренне работает локально, выполняя удаленные команды по SSH. Несравненный подобен. Запуск Capistrano через Ansible означает запуск ... удаленных команд с удаленного сервера на удаленный сервер? Они - два инструмента, пытающихся выполнить ту же работу. – tadman

ответ

0

Это сработало для меня, если прослушиваемая книжная игра запускается из каталога, в котором вы могли бы нормально работать cap.

- name: capistrano deploy 
    local_action: shell cap generic_production deploy 
    become: false 

 Смежные вопросы

  • Нет связанных вопросов^_^