Я использую capistrano для развертывания приложения RoR. Кодовая база находится в репозитории git, и при разработке широко используется ветвление. Capistrano использует deploy.rb
файл для своих настроек, одна из которых является веткой для развертывания.
Моя проблема заключается в следующем: скажем, я создаю новую ветку A от мастера . Файл развертывания будет ссылаться на главную ветку. Я редактирую это, чтобы можно было развернуть A в тестовой среде. Я заканчиваю работу над функцией и объединяю ветку A в master . Так как deploy.rb
файл с A свежа, он получает объединен в и теперь deploy.rb
в мастер ссылки ветви А . Время снова редактировать.
Это много, казалось бы, ненужного ручного редактирования - параметр всегда должен соответствовать имени текущей ветки. Вдобавок ко всему, легко забыть редактировать настройки каждый раз.
Как лучше всего автоматизировать этот процесс?
Изменить: оказывается, кто-то уже сделал именно то, что мне нужно :
Этим утром у меня была возможность развернуть ветку репозитория git на промежуточном сервере, но я не имел ни малейшего представления, как это сделать. Быстрый поиск в исходном коде capistrano показал, что я могу использовать set
:branch "branch_name"
в моем сценарии развертывания. Я попробовал, и это сработало. Затем я решил, что мне нужно будет внести аналогичные изменения во все мои ветки. Конечно, я ленивый дурачок и задавался вопросом, нет ли лучшего способа.Если вы не знакомы с git, вывод команды git branch представляет собой список ветвей, отмеченных звездочкой, которая в настоящее время проверена на вашем локальном компьютере. Например:
> git branch * drupal_authentication fragment_caching master
Итак, я подумал, что, если бы я просто проанализировал вывод и поискал ветку, помеченную как текущую:
set :branch, $1 if `git branch` =~ /\* (\S+)\s/m
Теперь я могу развернуть любую ветку, текущую на моем локальном компьютере, с помощью одного общего сценария развертывания.
источник
Ответы:
Это работает с Capistrano> = 3.1:
добавьте эту строку в
config/deploy.rb
:а затем вызовите capistrano с помощью:
Это решение работает с Capistrano <3.1:
источник
env
, но у меня это сработало, просто используя веткуИспользуя Capistrano 3.1.0+, ни один из них больше не работал у меня. Вместо этого, согласно их прокомментированным инструкциям:
Но вы не хотите использовать,
ask
иначе он вам подскажет. Вместо этого вы должны использоватьset
.HEAD
самая верхняя ветвь; «край», как это называется. Если вы хотите другую ветку, заменитеHEAD
с именем ветви, например:master
,staging
и т.д.В заключение с примерами в
/config/deploy/production.rb
, вы можете включить эту строку:...или
btw,
HEAD
это настройка по умолчанию, поэтому нет необходимости указывать это в файле. Может быть лучше использовать в/config/deploy/edge.rb
.В
/config/deploy/staging.rb
, вы можете включить эту строку:...или
Вы уловили идею!
Надеюсь, эти примеры помогут будущим пользователям capistrano (^_^)
источник
git rev-parse --abbrev-ref HEAD
используется, чтобы узнать, в какой ветви находится HEAD. runninggit rev-parse --abbrev-ref staging
будет (почти) всегда выводитьstaging
. Вы можете просто использоватьset :branch, 'staging'
.С многоступенчатостью это на самом деле:
Синтаксис предыдущего сообщения не работает в моей среде
источник
-s branch=foo
устанавливает ветвь переменной capistranofoo
после загрузки рецептовЯ могу подтвердить, что нижеприведенное все еще работает в Cap 3.11.0 13/10/18, а также в Cap 2:
В deploy.rb / stage.rb:
В командной строке:
Это дает вам ветку по умолчанию (которая может быть разной для разных сред) и возможность изменять ветки, когда вы хотите.
источник
В качестве альтернативы вы можете структурировать его из командной строки, где у вас есть ветка и среда по умолчанию, а также вы можете передавать параметры в вызов cap, которые могут включать среду и ветвь для использования. Это может быть явно переданная ветка, или у вас может быть параметр, который будет указывать текущую ветвь, как описано в указанной вами ссылке.
Пример кода, сильно заимствованный отсюда
источник
-s
, чтобы получить указанную веткуЕсли вы используете капистрано-многоступенчатый , вам нужно только запустить
или
без дальнейшего редактирования вашего
deploy.rb
.источник
branch=
, нетbranch-
.Эта команда больше не будет работать:
Поддержка
-sS
флагов была удалена в capistrano v3 +.Здесь вы можете прочитать об этом подробнее: ссылка
Это было упомянуто в нескольких ответах, но в настоящее время неверно.
Что у меня работает:
в
deploy.rb
файл добавитьзатем запустите:
Также обратите внимание, что для успешного выполнения этой команды вам необходимо находиться в главной ветке.
источник
Это решение должно работать со всеми версиями Capistrano.
Использование:
источник
Я использую версию 3.3.5, и у меня это работает:
источник
Общий ответ:
Если у вас есть файл настроек, содержимое которого изменяется от среды к среде, вы должны сделать эту строку «шаблоном» (со строкой, представляющей имя переменной, например
@BRANCH_NAME@
или@ENV_NAME@
).Тогда у вас будет (версионный) скрипт, способный читать ваш файл конфигурации и заменять
@BRANCH_NAME@
переменную " " на соответствующее значение, необходимое для вашего процесса развертывания.источник
Для пользователей capistrano 3:
источник
Метод 1. Установите конкретную ветвь этапа (например, тестовую, производственную) для развертывания
Поместите
branch
конфигурацию в файлы этапа вместо deploy.rb и установите целевую ветвь для этого этапа, из которого будет выполняться развертывание.Для двухэтапного приложения со связанным именем ветки
test
иproduction
конфигурация будет выглядеть следующим образом:Этот метод позволяет выполнять развертывание из отдельных веток этапа. Таким образом, потребуется лишь дополнительный шаг - объединить или переустановить последний код из базовой ветки.
Метод 2: развертывание напрямую из любой ветки (с помощью тега)
Другой подход - развертывание с использованием тега. Чтобы развернуть с помощью тега, установите
branch
config. в deploy.rb следующим образом,И настройте CI для условного развертывания на разных этапах, если соответствующий шаблон тега совпадает (например
/.*-test$/
).Теперь развертывание можно производить из любой ветки,
Сначала создайте тег из любой ветки,
git tag -a v0.1.0-test -m "Версия 0.1.0-test"
И нажмите
git push origin v0.1.0-тест
Примечание: описанные выше методы основаны на Capistrano 3.
источник
вернет текущую ветку, в которой вы находитесь.
Я всегда ставил
gpsh
вместоgit push -u origin branch_name
источник