Развертывание нескольких приложений в одном дереве с помощью Capistrano и Git - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь развернуть сайт PHP с использованием Capistrano.Веб-сайт состоит из 4 компонентов (кода веб-интерфейса и 3 веб-сервисов), каждый из которых хранится в собственном git-репозитории.Я хочу развернуть все 4 компонента в единую древовидную структуру (см. Ниже), чтобы переключение между версиями веб-сайта было бы таким же простым, как перемещение «текущей» ссылки.

Я вижу, что по умолчанию развертывание Capistrano предназначено для развертывания одного репозитория.Если я правильно понимаю, даже использование чего-то вроде Caphub мне не поможет, поскольку 4 компонента будут развернуты в 4 разных дерева, что сделает откат к определенной точке времени громоздким процессом.

Есть ли способ получить приведенную ниже конфигурацию с помощью Capistrano?Какова лучшая практика для этой ситуации?

root/
| current/
| releases/
| | <timestamp/>
| | | frontend/
| | | webservice-1/
| | | webservice-2/
| | | webservice-3/
| | <timestamp/>
| | | frontend/
| | | webservice-1/
| | | webservice-2/
| | | webservice-3/
| shared/

Обновление:

Завершить, используя решение подмодулей, как предложено в принятом ответе.Я создал хранилище веб-сайтов, содержащее 4 подмодуля и хранилище для развертывания веб-сайтов, где я храню файлы развертывания capistrano.Я написал простой сценарий оболочки, чтобы избавить меня от необходимости обновлять подмодули при каждом развертывании (довольно громоздкий процесс!).Для развертывания я запускаю скрипт (источник ниже), а затем запускаю «cap deploy».

#!/bin/sh 

git clone gitserver:path_to_git_repositories/website.git cloned 
cd cloned 
git submodule init 
git submodule update 
git submodule foreach git pull origin master # updating all modules to the current code in the master branch
git submodule foreach git add .  
git commit -a -m "Updating submodules" 
git push origin master 
cd .. 
rm -rf cloned 

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

У меня была очень похожая проблема, когда я развертывал приложение rails и один веб-сервис.Я решил использовать подмодули git, и это должно решить все ваши проблемы.

Вам просто нужно создать один основной репозиторий git, который будет добавлять внешний интерфейс и все веб-сервисы в качестве подмодулей.Затем в capistrano вы просто указываете на этот основной репозиторий и устанавливаете git_enable_submodules равным 1.

Затем вы можете разрабатывать все 4 компонента по отдельности, а когда вы хотите развернуть, вы просто обновляете подмодули, чтобы исправить точки и зафиксировать основной репозиторий.Этот подход должен дать именно такую ​​структуру каталогов, как вы представили, и упростить откат.

1 голос
/ 05 ноября 2016

Я столкнулся с той же проблемой, когда пытался выполнить атомарное развертывание веб-приложения, состоящего из 3 отдельных репозиториев Git, с использованием Capistrano v3.6 .

Я использовал подход «Подмодули», как вы обсуждали, но более автоматизированным способом и для версии 3 (если посмотреть дату публикации, это может быть версия 2).

Steps

  1. Имеется 1 репо для конфигурации Cap и еще 1 для группировки репо основного проекта в виде подмодулей.
    set :repository, 'submodules-repo-url'
  2. Заменить стратегию Cap's Git для поддержки подмодулей (поддерживается v2, удалено в v3).
    Найти скрипт здесь .
    set :git_strategy, SubmoduleStrategy
    Приведенная выше стратегия заботится об обновлении подмодулей, поэтому она похожа на простое Git-репо.
    Он выбирает подмодули в виде отдельных папок под текущим выпуском, как показано на схеме.
  3. cap deploy и наслаждайтесь.

Я написал в блоге об этом, больше информации можно найти здесь .

...