Я использую capistrano для развертывания приложения RoR. Кодовая база находится в репозитории git, и при разработке широко используется ветвление. Capistrano использует deploy.rb
файл для своих настроек, один из которых является веткой для развертывания.
Моя проблема заключается в следующем: допустим, я создаю новую ветку A от master. Файл развертывания будет ссылаться на ветвь master. Я редактирую его, поэтому A можно развернуть в тестовой среде. Я заканчиваю работу над функцией и объединяю ветку A в master. Поскольку файл deploy.rb
из A более свежий, он объединяется, и теперь deploy.rb
в master ссылается на ветвь A. Время снова редактировать.
Это много, казалось бы, ненужного ручного редактирования - параметр всегда должен соответствовать имени текущей ветки. Вдобавок ко всему, легко забыть редактировать настройки каждый раз.
Как лучше всего автоматизировать этот процесс?
Изменить: Оказывается кто-то уже сделал именно то, что мне нужно:
Этим утром у меня была возможность развернуть ветку репозитория 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
Теперь я могу развернуть любую ветку, текущую на моем локальном компьютере, с помощью единого общего сценария развертывания.