Подтвердить что ты не робот

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

Я изучаю возможность использования 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
4b9b3361

Ответ 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'