Автоматическое развертывание приложений при помощи Git

Примечание: Данное руководство не охватывает установку Git; инструкции по установке можно найти в этой статье.

В данном руководстве речь пойдет об использовании Git для развертывания приложений. Это можно сделать несколькими способами, но эта статья сфокусирована на самом простом из них.

Примечание: Подразумевается, что пользователь уже знает, как создать и использовать репозиторий на локальной машине. В противном случае нужно ознакомиться с этой статьей.

В основном система Git предназначена для управления версиями. Для этого используется локальный репозиторий разработчика и удаленный репозиторий, в котором хранятся и синхронизируются все файлы, что позволяет работать над приложением в команде. Однако Git можно также использовать для запуска приложения в производство.

Подготовка сервера

В этом руководстве условное рабочее пространство выглядит так:

  • Каталог сервера: /var/www/domain.com
  • Репозиторий сервера: /var/repo/site.git

Итак, что же нужно сделать, чтобы толкнуть приложение в репозиторий site.git и открыть доступ к контенту в /var/www/domain.com?

Создание репозитория

Введите следующее на виртуальном выделенном сервере:

cd /var
mkdir repo && cd repo
mkdir site.git && cd site.git
git init --bare

Флаг –bare значит, что папка предназначена для контроля версий и не будет содержать никаких исходных файлов.

Перехватчики Git

Репозитории Git имеют подкаталог «hooks», в котором хранятся перехватчики (hooks) – образцы файлов для автоматизации распространенных действий, которые перехватывают и выполняют пользовательские действия.

В документации Git упоминаются три возможных перехватчика: pre-receive, post-receive и update. Перехватчик pre-receive выполняется, когда сервер получает команду push; update работает аналогичным образом, но выполняется для каждой ветки; post-receive выполняется, когда команда push уже выполнена.

Если набрать в репозитории:

ls

на экране появится несколько файлов и папок, среди которых будет папка 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

Введя этот код, нажмите Ctrl D, чтобы сохранить. Теперь нужно установить права на файл:

chmod +x post-receive

Как сказано в документации, git-dir – это путь к каталогу; work-tree определяет другой путь, по которому и нужно переместить файлы.

Файл post-receive будет просматриваться при каждом выполнении команды push, в нем сказано, что файлы нужно передавать в /var/www/domain.com.

Локальная машина

Создайте локальный репозиторий. Измените путь и имя на свое усмотрение. Чтобы выйти с VPS, просто введите:

exit

Чтобы создать репозиторий:

cd /my/workspace
mkdir project && cd project
git init

Теперь нужно настроить удаленный путь репозитория. Для этого используйте:

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, который позволяет ввести сообщение.

В завершение нужно толкнуть все на сервер при помощи команды push:

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. Чтобы ознакомиться с этим процессом подробнее, читайте эту статью.

Beta-версии приложений

Чтобы не разворачивать приложение за один раз, можно создать beta-каталог и протестировать приложение.

Для этого нужно создать отдельный репозиторий. Вернитесь на VPS и выполните:

cd /var/www/
mkdir beta

Чтобы создать репозиторий:

cd /var/repo
mkdir beta.git && cd beta.git
git init --bare

Теперь нужно снова создать файл post-receive, чтобы просмотреть наш проект в бета-каталоге:

cd hooks
cat > post-receive

Внесите в файл следующее:

#!/bin/sh
git --work-tree=/var/www/beta --git-dir=/var/repo/beta.git checkout -f

Нажмите Ctrl D, чтобы сохранить файл. Вернитесь в локальный репозиторий:

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

Развертывание приложения

Чтобы развернуть приложение, нужно связать репозитории beta и live. Войдите на сервер и введите:

cd /var/repo/beta.git
git remote add live ../site.git

Теперь можно передавать файлы из beta в live:

cd /var/repo/beta.git
git push live master

Сервер полностью готов к развертыванию приложения!

Tags: , ,

Добавить комментарий