Capistrano дублирует задачи для каждой роли

Мне, должно быть, чего-то не хватает с Capistrano, потому что я только начал писать capfiles и смотрю на тонны дублированного кода. Учти это

role :dev, "dev1", "dev2"
role :prod, "prod1", "prod2"

desc "Deploy the app in dev"
task :deploy_dev, :roles => :dev do
    run "sudo install-stuff"
end

desc "Deploy the app in prod"
task :deploy_prod, :roles => :prod do
    run "sudo install-stuff"
end

ИМО, вполне разумно захотеть запустить одну и ту же задачу в dev или prod, но из того, что я могу сказать, Capistrano попросил бы меня написать 2 задачи, чтобы указать разные узлы ...

Похоже, если бы вы могли ссылаться на роли в CLI, например

cap deploy dev
cap deploy prod

в файле capfile могло бы быть единое определение задачи «развертывание», в отличие от дублированного для каждого набора серверов.

Есть ли способ написать задачу один раз и динамически указать роль?


person quickshiftin    schedule 03.10.2013    source источник


Ответы (1)


Взгляните на многоступенчатое расширение. Хотя многоступенчатое расширение довольно легко настраивает нужные вам задачи, все это сделает за вас.

Если вы предпочитаете сделать это самостоятельно, см. вызов задач справочника. Хитрость в том, что вы можете вызывать разные задачи по порядку из командной строки.

person harald    schedule 03.10.2013
comment
На самом деле, если разобраться в этом сегодня, кажется, что я слишком глуп, чтобы получить то, что хочу. По сути, я хочу, чтобы переменная заполняла раздел задачи: роли. Моя мысль состоит в том, чтобы объединить задачи в цепочку, но я не уверен, можно ли установить значение переменной в первой задаче и использовать ее для: ролей последующей задачи. Это возможно? В любом случае, похоже, я спрыгиваю с корабля и направляюсь к ткани. Нашел то, что мне нужно менее чем за 30 минут! Capistrano кажется слишком тесно связанным с проектами Ruby для моих нужд. - person quickshiftin; 05.10.2013
comment
Я действительно не понимаю, чем это отличается от cap dev deploy, но все, что вам нужно. Насколько я понимаю, это похоже на то же самое решение. - person harald; 05.10.2013
comment
У меня нет проекта Ruby, поэтому у меня нет задачи развертывания, которую можно параметризовать с помощью многоступенчатого расширения. Я также не хочу помещать каталог конфигурации ни в один из проектов, которые я развертываю для Capistrano. Если бы я мог выяснить, как параметризовать роли:, я бы остановился на Capistrano, но документация не помогает мне в этом разобраться. - person quickshiftin; 05.10.2013