НАСТРОЙКА GITLAB CI/CD

gitlab DevOps

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

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

УСТАНОВКА 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

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

$ sudo yum install gitlab-runner
НАСТРОЙКА GITLAB CI/CD

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

Смотрите официальную документацию.

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

$ sudo systemctl enable --now gitlab-runner

РЕГИСТРАЦИЯ GITLAB RUNNER

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

$ sudo gitlab-runner register

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

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

$ sudo gitlab-runner verify
НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB RUNNER

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

НАСТРОЙКА GITLAB CI/CD

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

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

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

НАСТРОЙКА GITLAB CI/CD

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

СОЗДАНИЕ GITLAB-CI.YML

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

Как и следует из расширения — это файл в формате 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.

ПРОВЕРКА РАБОТЫ PIPELINE

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

НАСТРОЙКА GITLAB CI/CD

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

РАЗВОРАЧИВАНИЕ ИСХОДНИКОВ

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

$ rsync -av --no-perms --no-owner --no-group --exclude ".git*" $CI_PROJECT_DIR/ /var/www/project
НАСТРОЙКА GITLAB CI/CD

Для редактирования файла .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

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

НАСТРОЙКА GITLAB CI/CD

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

ВЫВОДЫ

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

Оцените статью
Добавить комментарий