Передача параметров в Капистрано
Я изучаю возможность использования Capistrano в качестве универсального решения для развертывания. Под "родовым" я имею в виду не-рельсы. Я не доволен качеством документации, которую я нахожу, однако, предоставил, я не смотрю на те, которые предполагают, что вы развертываете рельсы. Поэтому я просто попытаюсь взломать что-то на основе нескольких примеров, но есть несколько проблем, с которыми я сталкиваюсь с самого начала.
Моя проблема в том, что cap deploy
не хватает информации для чего-либо. Важно отметить, что отсутствует тег для версии, которую я хочу развернуть, и это нужно передать в командной строке.
Другая проблема заключается в том, как я указываю свой репозиторий git. Наш сервер git получает доступ к SSH в учетной записи пользователя, но я не знаю, как изменить deploy.rb
, чтобы использовать идентификатор пользователя как часть URL-адреса scm.
Итак, как я могу это сделать?
Пример
Я хочу развернуть результат первого спринта второй версии. Это помечено в репозитории git как r2s1
. Кроме того, пусть пользователь "johndoe" получает задачу развертывания системы. Чтобы получить доступ к репозиторию, он должен использовать URL [email protected]:app
. Таким образом, удаленный URL-адрес репозитория зависит от идентификатора пользователя.
Командные строки для получения желаемых файлов будут следующими:
git clone [email protected]:app
cd app
git checkout r2s1
Ответы
Ответ 1
Как сказал Джаррад, capistrano-ash - хороший базовый набор вспомогательных модулей для развертывания других типов проектов, хотя в конце дня он не требуется. Это просто язык сценариев, и большинство задач выполняются с помощью системных команд и в итоге становятся почти оболочкой script.
Чтобы передать параметры, вы можете установить флаг -s при запуске cap, чтобы дать вам пару значений ключа. Сначала создайте такую задачу.
desc "Parameter Testing"
task :parameter do
puts "Parameter test #{branch} #{tag}"
end
Затем запустите свою задачу так.
cap test:parameter -s branch=master -s tag=1.0.0
Для последней части. Я бы рекомендовал настроить доступ без доступа с помощью ssh-ключей к вашему серверу. Но если вы хотите взять его у текущего зарегистрированного пользователя. Вы можете сделать что-то вроде этого.
desc "Parameter Testing"
task :parameter do
system("whoami", user)
puts "Parameter test #{user} #{branch} #{tag}"
end
ОБНОВЛЕНИЕ: Отредактировано для работы с последними версиями Capistrano. Массив конфигурации больше не доступен.
Глобальные параметры: см. комментарии Используйте параметры: branch, fetch (: branch, 'a-default-value') для использования параметров по всему миру. (И передайте их вместо -S.)
Ответ 2
Я бы предложил использовать переменные ENV.
Что-то вроде этого (команда):
$ GIT_REPO="[email protected]:app" GIT_BRANCH="r2s1" cap testing
Конфигурация крышки:
#deploy.rb:
task :testing, :roles => :app do
puts ENV['GIT_REPO']
puts ENV['GIT_BRANCH']
end
И взгляните на https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension, может быть, этот подход будет полезен и вам.
Ответ 3
Обновить. Что касается передачи параметров только в задачу Capistrano 3.
Я знаю, что этот вопрос довольно старый, но по-прежнему всплывает в первую очередь в Google при поиске параметров для задачи Capistrano. К сожалению, фантастический ответ, представленный Джейми Сазерлендом, больше недействителен с Capistrano 3. Прежде чем тратить свое время, проверяя его, кроме результатов, как показано ниже:
cap test:parameter -s branch=master
выходы:
cap aborted!
OptionParser::AmbiguousOption: ambiguous option: -s
OptionParser::InvalidOption: invalid option: s
и
cap test:parameter -s branch=master
выходы:
invalid option: -S
Действительные ответы для Capistrano 3, предоставленные @senz и Brad Dwyer, вы можете найти, нажав на эту золотую ссылку:
Capistrano 3 вытягивает аргументы командной строки
Для полноты см. код ниже, чтобы узнать о двух возможных вариантах.
1-й вариант:
Вы можете выполнять итерацию задач с помощью ключа и значения, как и при обычных хэшах:
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
Надеюсь, что вы сэкономите некоторое время.
Ответ 4
Как уже показал Джейми, вы можете передавать параметры задачам с флагом -s
. Я хочу показать вам, как вы дополнительно можете использовать значение по умолчанию.
Если вы хотите работать со значениями по умолчанию, вы должны использовать fetch
вместо ||=
или проверить для nil
:
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
Ответ 5
Ознакомьтесь с capistrano-ash для библиотеки, которая помогает при развертывании без рельсов. Я использую его для развертывания приложения PyroCMS, и он отлично работает.
Вот фрагмент моего Capfile для этого проекта:
# deploy from git repo
set :repository, "[email protected]:mygitrepo.git"
# tells cap to use git
set :scm, :git
Я не уверен, что понимаю последние две части вопроса. Предоставьте более подробную информацию, и я буду рад помочь.
ИЗМЕНИТЬ после примера:
set :repository, "#{scm_user}@gitsrv.domain:app"
Затем каждый человек с развертыванием priveledges может добавить в свой локальный файл ~/.caprc следующее:
set :scm_user, 'someuser'