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

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

Если вы используете 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) возле раннера и выставьте такие настройки:

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

Автоматизируй развертывание: 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. Как видите, это довольно полезные инструменты. Теперь на сервере будут оказываться все новые коммиты и у вас больше не будет необходимости выгружать их туда вручную.

24-10-2025, 19:00
Вернуться назад