Поиск по сайту:

Как настроить автоматическое развертывание с помощью 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!