Я использую 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
Теперь я могу развернуть любую ветку, текущую на моем локальном компьютере, с помощью одного общего сценария развертывания.