Как настроить автоматическое развертывание с помощью Git на VPS
Введение
Чтобы узнать о Git и о том, как его установить, обратитесь к вводному руководству.
Эта статья научит вас, как использовать Git, когда вы хотите развернуть свое приложение. Хотя существует множество способов использования Git для развертывания нашего приложения, в этом руководстве мы сосредоточимся на наиболее простом. Я предполагаю, что вы уже знаете, как создать и использовать репозиторий на вашем локальном компьютере. Если нет, обратитесь к этому руководству.
Когда вы используете Git, рабочий процесс обычно направлен только на контроль версий. У вас есть локальный репозиторий, в котором вы работаете, и удаленный репозиторий, где вы все синхронизируете и можете работать с командой и разными машинами. Но вы также можете использовать Git для переноса вашего приложения в рабочую среду.
Настройка сервера
Наше вымышленное рабочее пространство:
Живой каталог вашего сервера: /var/www/domain.com
Репозиторий вашего сервера: /var/repo/site.git
Что нам делать, если мы хотим отправить на site.git и в то же время сделать весь контент доступным на /var/www/domain.com?
Создание нашего репозитория
Войдите в свой VPS из командной строки и введите следующее:
cd /var mkdir repo && cd repo mkdir site.git && cd site.git git init --bare
--bare
означает, что в нашей папке не будет исходных файлов, только контроль версий.
Крючки
В репозиториях Git есть папка с именем 'hooks'. Эта папка содержит несколько примеров файлов для возможных действий, которые вы можете подключить и выполнить настраиваемые действия, установленные вами.
Документация Git определяет три возможных хука сервера: 'pre-receive', 'post-receive' и 'update'. 'Pre-receive' выполняется, как только сервер получает 'push', 'update' аналогичен, но выполняется один раз для каждого ветке, и 'post-receive' выполняется, когда 'push' полностью завершен, и это тот, который нас интересует.
В нашем репозитории, если вы наберете:
ls
Вы увидите несколько файлов и папок, включая папку 'hooks'. Итак, давайте перейдем в папку 'hooks':
cd hooks
Теперь создайте файл 'post-receive', набрав:
cat > post-receive
Когда вы выполните эту команду, у вас будет пустая строка, указывающая, что все, что вы вводите, будет сохранено в этом файле. Итак, давайте наберем:
#!/bin/sh git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f
Когда вы закончите печатать, нажмите 'control-d', чтобы сохранить.
chmod +x post-receive
Вы можете видеть в документации, что 'git-dir' — это путь к репозиторию. С помощью 'work-tree' вы можете указать другой путь, по которому ваши файлы будут перенесены.
Файл 'post-receive' будет проверяться каждый раз, когда отправка будет завершена, и в нем говорится, что ваши файлы должны находиться в /var/www/domain.com.
Локальная машина
Давайте создадим наш локальный репозиторий. Вы должны изменить путь и имя на то, что вы выберете. Если вы находитесь на VPS, просто введите:
exit
И создайте свое репо:
cd /my/workspace mkdir project && cd project git init
Затем нам нужно настроить удаленный путь нашего репозитория. Скажите Git добавить удаленный элемент с именем 'live':
git remote add live ssh://user@mydomain.com/var/repo/site.git
Здесь мы должны указать ссылку на репозиторий, а не на живую папку.
Предположим, что в этой папке у нас есть готовая отличная работа. Мы должны сделать обычные шаги по добавлению файлов и фиксации с сообщением:
git add . git commit -m "My project is ready"
Просто напомню, что точка после 'git add' означает, что вы добавляете все файлы на сцену. После 'git commit' у нас есть '-m', что означает, что мы напечатаем сообщение. Для завершения мы просто 'отправляем' все на сервер. Мы используем псевдоним 'live', который использовали при настройке пульта.
git push live master Counting objects: 7, done.Delta compression using up to 4 threads.Compressing objects: 100% (7/7), done.Writing objects: 100% (7/7), 10.56 KiB, done.Total 7 (delta 0), reused 0 (delta 0)To ssh://user@mydomain.com/var/repo/site.git* [new branch] master -> master
Здесь мы сообщаем Git'у, что он должен нажать на удаленный 'live' в ветке 'master'. Чтобы узнать больше о ветках и о том, как их использовать, вы можете прочитать это руководство.
Бета
Что делать, если вы не хотите развертывать все за один шаг? Может быть, вы хотите сначала протестировать его и иметь бета-каталог.
Один из способов сделать это — создать еще один репозиторий. Давайте снова войдем в наш VPS и создадим наш каталог:
cd /var/www/ mkdir beta
Чтобы создать наш репозиторий:
cd /var/repo mkdir beta.git && cd beta.git git init --bare
Опять же, мы должны создать файл 'post-receive', потому что мы хотим видеть наш проект в каталоге beta:
cd hooks cat > post-receive
Введите содержимое файла:
#!/bin/sh git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f
Когда вы закончите печатать, нажмите 'control-d', чтобы сохранить. Чтобы выполнить файл, нам нужно установить соответствующие разрешения, используя:
chmod +x post-receive
Вернемся к нашему локальному репозиторию:
exit cd /my/workspace/project
Итак, теперь мы можем установить еще один удаленный адрес, указывающий на наш бета-репозиторий:
git remote add beta ssh://user@mydomain.com/var/repo/beta.git
При этом у нас может быть двухэтапный процесс. Сначала нажимаем на бету и проверяем, и если все нормально нажимаем на live:
git add . git commit -m "New version" git push beta master
И позже:
git push live master
Запуск с сервера
Может быть, у вас есть команда, работающая над одним и тем же проектом, и вы хотите, чтобы другие тоже могли решить, что пора запускать проект. Для этого мы можем связать бета-версию и живой репозиторий на сервере. Войдите в свой VPS и введите:
cd /var/repo/beta.git git remote add live ../site.git
Итак, теперь вы можете перейти от бета-версии к жизни на сервере:
cd /var/repo/beta.git git push live master
Поздравляем! Теперь ваш VPS настроен на автоматическое развертывание с помощью Git!