Передача параметров в Капистрано

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

Моя проблема заключается в том, cap deployчто не хватает информации, чтобы что-либо сделать. Важно отметить, что отсутствует тег для версии я хочу , чтобы развернуть, и это имеет быть передан в командной строке.

Другая проблема заключается в том, как я указываю свой репозиторий git. Наш сервер git получает доступ к SSH в учетной записи пользователя, но я не знаю, как изменить deploy.rbиспользование идентификатора пользователя в качестве части URL-адреса scm.

Итак, как я могу это осуществить?

пример

Я хочу развернуть результат первого спринта второй версии. Это помечено в репозитории git как r2s1. Кроме того, скажем, пользователь «johndoe» получает задачу развертывания системы. Чтобы получить доступ к репозиторию, он должен использовать URL-адрес johndoe@gitsrv.domain:app. Таким образом, удаленный URL-адрес репозитория зависит от идентификатора пользователя.

Командные строки для получения желаемого git clone johndoe@gitsrv.domain: app cd app git checkout r2s1 s будут такими:

desc "Parameter Testing"
task :parameter do
  puts "Parameter test #{branch} #{tag}"
end

deployment,capistrano,

30

Ответов: 5


46 принят
+200

Как сказал Джаррад, capistrano-ash - это хороший базовый набор вспомогательных модулей для развертывания других типов проектов, хотя это не требуется в конце дня. Это всего лишь язык сценариев, и большинство задач выполняются с помощью системных команд и в конечном итоге становятся почти похожими на сценарий оболочки.

Чтобы передать параметры, вы можете установить флажок cap test: -s branch = master -s tag = 1.0.0 при запуске cap, чтобы дать вам пару значений ключа. Сначала создайте такую ??задачу.

desc "Parameter Testing"
task :parameter do
  system("whoami", user)
  puts "Parameter test #{user} #{branch} #{tag}"
end

Тогда начните свою задачу так.

$ GIT_REPO="johndoe@gitsrv.domain:app" GIT_BRANCH="r2s1" cap testing

Для последней части. Я бы рекомендовал настроить доступ без доступа с помощью ssh-ключей к вашему серверу. Но если вы хотите взять его у текущего зарегистрированного пользователя. Вы можете сделать что-то подобное.

#deploy.rb:
task :testing, :roles => :app do
  puts ENV['GIT_REPO']
  puts ENV['GIT_BRANCH']
end

UPDATE: Отредактировано для работы с последними версиями Capistrano. Массив конфигурации больше не доступен.

Глобальные параметры: см. Комментарии Используйте параметр: branch, cap test: параметр -s branch = master (: branch, 'a-default-value') для использования параметров по всему миру. (И передайте их вместо -S).


9

Я бы предложил использовать переменные ENV.

Подобные вещи (команда):

cap aborted!
OptionParser::AmbiguousOption: ambiguous option: -s
OptionParser::InvalidOption: invalid option: s

Конфигурация крышки:

cap test:parameter -S branch=master 

И взгляните на https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension , возможно, этот подход будет полезен и вам.


Обновить. Относительно недействительной опции: -S 3.

Я знаю, что этот вопрос довольно старый, но по-прежнему появляется в Google при поиске параметров в задачу Capistrano. К сожалению, фантастический ответ, представленный Джейми Сазерлендом, больше недействителен с Capistrano 3. Прежде чем вы тратите свое время, проверяя его, кроме результатов, как показано ниже:

desc "This task accepts optional parameters"

task :task_with_params, :first_param, :second_param do |task_name, parameter|
  run_locally do
    puts "Task name: #{task_name}"
    puts "First parameter: #{parameter[:first_param]}"
    puts "Second parameter: #{parameter[:second_param]}"
  end
end

выходы:

cap production task_with_params[one,two]

а также

set :first_param, ENV['first_env'] || 'first default'
set :second_param, ENV['second_env'] || 'second default'

desc "This task accepts optional parameters"
task :task_with_env_params do
  run_locally do
    puts "First parameter: #{fetch(:first_param)}"
    puts "Second parameter: #{fetch(:second_param)}"
  end
end

выходы:

cap production task_with_env_params first_env=one second_env=two

Действительные ответы для Capistrano 3, предоставленные @senz и Brad Dwyer, вы можете найти, нажав эту золотую ссылку: Capistrano 3, вытягивающий аргументы командной строки

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

1-й вариант:

Вы можете выполнять итерации задач с помощью ключа и значения, как и для обычных хэшей:

-s

Убедитесь, что между параметрами нет пробела при вызове cap:

fetch

Второй вариант:

Когда вы вызываете любую задачу, вы можете назначить переменные среды, а затем вызвать их из кода:

||=

Чтобы назначить переменные среды, нажмите колпачок, как показано ниже:

nil

Надеюсь, это сэкономит вам время.


3

Как уже показал Джейми, вы можете передавать параметры задачам с -sфлагом. Я хочу показать вам, как вы можете использовать значение по умолчанию.

Если вы хотите работать со значениями по умолчанию, вы должны использовать fetchвместо namespace :logs do task :tail do file = fetch(:file, 'production') # sets 'production' as default value puts "I would use #{file}.log now" end end или для проверки production:

file

Вы можете запустить эту задачу (используется значение $ cap logs:tail по умолчанию cron)

file

или (использует значение $ cap logs:tail -s file=cron дляfile

# deploy from git repo
set :repository, "git@git.mygitserver.com:mygitrepo.git"
# tells cap to use git
set :scm, :git

0

Отметьте capistrano-ash для библиотеки, которая помогает при развертывании без рельсов. Я использую его для развертывания приложения PyroCMS, и он отлично работает.

Вот фрагмент моего Capfile для этого проекта:

set :repository, "#{scm_user}@gitsrv.domain:app"

Я не уверен, что понимаю последние две части вопроса. Предоставьте более подробную информацию, и я буду рад помочь.

EDIT после примера:

set :scm_user, 'someuser'

Затем каждый человек с развертыванием priveledges может добавить в свой локальный файл ~ / .caprc следующее:

развертывание, Capistrano,
Похожие вопросы