Использование capistrano для развертывания из разных веток git - PullRequest
116 голосов
/ 06 октября 2009

Я использую capistrano для развертывания приложения RoR. Кодовая база находится в репозитории git, а ветвление широко используется в разработке. Capistrano использует файл deploy.rb для своих настроек, одним из которых является ветвь для развертывания.

Моя проблема заключается в следующем: скажем, я создаю новую ветку A из master . Файл развертывания будет ссылаться на ветку master . Я редактирую это, чтобы A можно было развернуть в тестовой среде. Я заканчиваю работу над этой функцией и объединяю ветку A в master . Поскольку файл deploy.rb из A более свежий, он объединяется, и теперь deploy.rb in master ссылки на ветви A . Время редактировать снова.

Это, на первый взгляд, ненужное ручное редактирование - параметр всегда должен совпадать с именем текущей ветви. Кроме того, легко забыть каждый раз редактировать настройки.

Как лучше всего автоматизировать этот процесс?

Редактировать: Оказывается кто-то уже сделал именно то, что мне нужно :

Этим утром у меня была возможность развернуть ветку git-репозитория в промежуточный сервер, но понятия не имел, как. Быстрый поиск через исходный код Capistrano показал, что я мог бы использовать набор :branch "branch_name" в моем сценарии развертывания. Я попробовал это, и это сработало. Затем я решил, что мне нужно будет сделать аналогичные изменения во всех моих ветви. Конечно, я ленивый дурак и задавался вопросом, не было ли лучший способ.

Если вы не знакомы с git, вывод команды git branch список ветвей, отмеченных звездочкой проверил на своей локальной машине. Например:

> git branch
* drupal_authentication
fragment_caching
master

Итак, я подумала, что если я просто проанализирую вывод и поищу ветвь помечена как текущая:

set :branch, $1 if `git branch` =~ /\* (\S+)\s/m

Теперь я могу развернуть любую ветку на моей локальной машине из одного общего сценария развертывания.

Ответы [ 12 ]

1 голос
/ 03 ноября 2014

Для пользователей capistrano 3:

desc "prompt for branch or tag"
task :git_branch_or_tag do
  on roles(:all) do |host|
    run_locally do
      execute :git, 'tag'
      tag_prompt = "Enter a branch or tag name to deploy"
      ask(:branch_or_tag, tag_prompt)
      tag_branch_target = fetch(:branch_or_tag, 'master')
      set(:branch, tag_branch_target)
    end
  end
end

before 'deploy:updated',  :git_branch_or_tag
1 голос
/ 06 октября 2009

Общий ответ:

Если у вас есть файл настроек, содержимое которого изменяется от среды к среде, вы должны сделать эту строку «шаблоном» (со строкой, представляющей имя переменной, например @BRANCH_NAME@ или @ENV_NAME@).

Тогда у вас будет (версионный) скрипт, способный прочитать ваш файл конфигурации и заменить переменную "@BRANCH_NAME@" на соответствующее значение, необходимое для процесса развертывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...