Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Представьте, что каждый ваш коммит в GitLab автоматически появляется на рабочем сервере. Без вашего участия. Больше никакого ручного копирования файлов по FTP и забытых изменений.

Это не магия, а реальность с GitLab CI/CD. Мы покажем вам, как настроить этот процесс для вашего PHP-проекта, даже если он не требует сложной сборки или тестов.

Вы уберете из своего workflow одну из самых рутинных задач. Всего за несколько шагов ваш код будет самостоятельно добираться до сервера сразу после пуша.

Вам не нужны глубокие знания DevOps. Мы разберем все по полочкам: от установки специального агента на сервер до создания конфигурационного файла.

Вы узнаете, как зарегистрировать GitLab Runner и убедиться, что он готов к работе. Мы поможем избежать частых ошибок настройки.

Вы создадите свой первый pipeline, который будет выполнять ваши команды. И сразу же проверите его работу через веб-интерфейс GitLab.

Главный бонус — мы покажем простую и эффективную команду для копирования исходников прямо в папку веб-сервера. Она синхронизирует только измененные файлы.

Готовы забыть о ручном деплое? Наш гайд проведет вас от нуля до полностью автоматизированного процесса.


Если вы используете Git и GitLab для хранения кода, то можете упростить и автоматизировать разворачивание вашего кода на сервере сразу же, при появлении новых изменений в GitLab репозитории. Этот процесс называется CI/CD (Continuous Integration, Continuous Delivery или Непрерывная интеграция и доставка). С помощью этой технологии вы можете выполнять тесты, собирать проект, а затем помещать результат сборки или исходники в нужное место.

В этой небольшой статье будет рассмотрена настройка GitLab CI CD для небольшого проекта на PHP без сборки и тестов, а только с копированием исходников в директорию веб-сервера на сервере проекта.


Содержание статьи

Настройка GitLab CI/CD

1. Установка GitLab Runner

Для того чтобы у GitLab был доступ к серверу, на этот сервер необходимо установить службу gitlab-runner. Именно эта программа будет забирать новые исходники с GitLab, выполнять с ними нужные действия и разворачивать на сервере. Установить её в Ubuntu можно из официальных репозиториев. Сначала добавьте репозиторий в систему:

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash

Обратите внимание, что поддерживаются Ubuntu 16.04, 18.04 и 20.04, если у вас другая версия, после установки репозитория вам надо будет изменить его на версию для ближайшего поддерживаемого дистрибутива. После этого можно установить пакет:

sudo apt install gitlab-runner

Так выполняется установка GitLab runner Ubuntu. В CentOS и других Red Hat дистрибутивах процедура установки похожая. Сначала добавьте репозиторий:

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Затем установите пакет:

sudo yum install gitlab-runner

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Возможно, в будущем процедура или ссылки на пакеты изменятся. Смотрите официальную документацию.

После установки запустите сервис с помощью systemd и добавьте его в автозагрузку:

sudo systemctl enable --now gitlab-runner

2. Регистрация GitLab Runner

Откройте репозиторий на GitLab, для которого вы хотите настроить CI/CD, затем кликните по шестеренке (пункт Settings) в меню, а потом выберите CI/CD:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Возле пункта Runners нажмите кнопку Expand:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Общие раннеры от GitLab можно отключить для того чтобы они вам не мешали и не забирали задачи у вашего раннера. Для этого под надписью Enable shared runners for this project установите значение выключателя в положение выключено:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Необходимая вам информация находится в левой части окна, в разделе Specific runners. Тут вам надо узнать URL сервиса и токен авторизации, с которым вы будете регистрировать раннер:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Теперь возвращайтесь на сервер, на котором был установлен runner и выполните такую команду:

sudo gitlab-runner register

Программа спросит URL и токен, которые вы узнали на GitLab.

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Затем надо ввести описание и теги для раннера. Теги будут использоваться в будущем для того чтобы отправлять этому раннеру задания. Далее останется только выбрать способ выполнения команд. Для того чтобы просто запускать командную оболочку можно выбрать shell.

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Обратите внимание, что команду надо выполнять именно с sudo. Поскольку демон выполняется от имени пользователя root, то и авторизацию нужно выполнять от имени этого пользователя, иначе работать не будет, но и ошибок не выдаст.

Для того чтобы убедиться, что всё настроено и работает нормально выполните такую команду:

sudo gitlab-runner verify

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Она должна показать сообщение is_alive. Настройка gitlab runner на сервере завершена.

3. Настройка GitLab Runner

После того как раннер был зарегистрирован, обновите страницу настроек CI на GitLab. Новый раннер должен появиться в списке и кружок возле него должен быть зелёным:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Кликните по значку карандаша (Edit) возле раннера и выставьте такие настройки:

  • Active - должно быть включено, иначе раннер не сможет выполнять задания;
  • Protected - должно быть выключено, для того чтобы раннер брал задания из всех веток, а не только защищённых;
  • Run untagged jobs - должно быть включено, позволяет раннеру брать задачи без тегов;
  • Lock to current projects - если включено, этот раннер доступен только для этого проекта.

Все остальные опции можно не трогать.

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

После завершения настройки на забудьте нажать кнопку Save Changes. Дальше можно переходить к созданию файла .gitlab-ci.yml.

4. Создание gitlab-ci.yml

Именно в этом файле описываются все задачи, а также команды, которые gitlab-runner будет выполнять на сервере. Вы можете создать его вручную или же, если такого файла ещё нет, то на главной странице проекта нажмите кнопку Setup CI/CD:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

После этого кликните по кнопке Create New CI/CD Pipeline:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Дальше перед вами откроется редактор файла .gitlab-ci.yml.

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Как и следует из расширения - это файл в формате YAML, поэтому отступы перед значениями очень важны. Сразу же можете удалить отсюда все комментарии. Структура файла примерно такая:

stages: 
  - название_этапа_1
  - название_этапа_2
название_задачи_1-job
  stage: название_этапа_1
  script:
    - команда_1
    - команда_2

Раздел stages описывает этапы разворачивания приложения и очередность их выполнения. Затем описываются задачи, которые будут выполняться в рамках каждого этапа. У задачи должен быть указан этап: stage и script со списком команд, которые будут выполняться на сервере. Во время разворачивания gitlab-runner автоматически создает на сервере (по умолчанию в домашней папке) директорию build, клонирует туда свежие исходники проекта и переходит в папку с исходниками. А дальше с помощью команд в секции script вы можете делать всё, что нужно с этими исходниками.

Для этого примера можно оставить только секцию deploy. Самый простой конфигурационный файл будет выглядеть вот так:

stages:
- deploy
deploy-job:
stage: deploy
script:
- echo "Deploying application..."
- echo "Application successfully deployed."

Сохраните этот файл. Для этого пролистайте вниз страницы и нажмите кнопку Commit Changes.

5. Проверка работы Pipeline

Если всё было сделано правильно, то ваш раннер получит эту задачу, склонирует исходники и выведет две строчки в терминал. Для того чтобы убедиться что это всё произошло, в боковом меню выберите значок ракеты (CI/CD) а затем Pipelines:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Здесь отображаются все задачи CI/CD. В данном случае у вас должна быть одна задача.

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Если всё прошло успешно перед ней будет зеленая кнопка Passed. Для того чтобы посмотреть лог выполнения задачи, кликните по этой кнопке, а затем выберите непосредственно задачу из списка:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

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

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Поскольку внизу зелёным написано Job succeeded, значит задача выполнилась успешно. В самом верху лога вы можете видеть какой раннер использовался для выполнения, убедитесь, что это именно ваш раннер, а не один из стандартных.

6. Разворачивание исходников

Программа уже скачивает исходники на сервер, но дальше вы можете сделать с ними всё что хотите. Настраивать раннер загружать исходники прямо в папку веб-сервера не стоит, программа для этого не предназначена. Для копирования исходников лучше использовать rsync. Эта утилита позволяет копировать только изменившиеся файлы. Например, для копирования файлов из репозитория в /var/www/project необходимо добавить такую команду в секцию script:

rsync -av --no-perms --no-owner --no-group --exclude ".git*" $CI_PROJECT_DIR/ /var/www/project

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Для редактирования файла .gitlab-ci.yml можете воспользоваться пунктом меню CI/CD -> Editor или найти и отредактировать этот файл в списке файлов. Папка, в которую вы собираетесь разврачивать проект должна существовать на сервере и у пользователя gitlab-runner должны быть права на запись в неё:

sudo mkdir -p /var/www/project

sudo chown gitlab-runner:gitlab-runner /var/www/project

После сохранения файла развертывание выполнится и файлы, либо будут копированы в указанную папку, либо вы получите ошибку. В случае ошибки вы можете исправить проблему, затем открыть CI/CD -> Jobs и перезапустить задачу с помощью кнопки с круговой стрелочкой:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Если всё было сделано верно на этот раз, то файлы появятся в папке:

Автоматизируй развертывание: GitLab CI/CD для PHP-проектов за 5 шагов

Аналогичным образом вы можете добавлять другие команды, которые необходимо выполнить с исходниками на сервере. Можно даже загружать их на другие сервера с помощью того же rsync. Вообще говоря, локально можно было бы и обойтись без этой утилиты и воспользоваться cp. Но rsync позволяет именно синхронизировать изменения, что очень удобно.

Выводы

Теперь вы знаете как выполняется настройка GitLab CI CD, а также GitLab-runner. Как видите, это довольно полезные инструменты. Теперь на сервере будут оказываться все новые коммиты и у вас больше не будет необходимости выгружать их туда вручную.

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив