Git

GitLab Runner и GitLab CI

GitLab Runner и GitLab CI

Что такое непрерывная интеграция (CI)?

Непрерывная интеграция - это следующий логический шаг после наличия системы контроля версий, такой как Git, и системы удаленного контроля версий, такой как GitLab или GitHub, для совместной работы. Проблема, с которой сталкиваются крупные проекты, заключается в следующем: по мере поступления новых запросов на вытягивание их необходимо тестировать, а затем интегрировать в основную ветвь, и эти усилия могут легко занять от нескольких часов до нескольких недель в зависимости от размера проекта. местонахождение членов команды и т. д.

Как и в случае с любой подобной проблемой, логическим шагом является автоматизация всей чуши тестирования. Мы делаем это, настраивая триггер таким образом, что всякий раз, когда новые коммиты объединяются в ветку, агент (например, GitLab Runner) автоматически создает среду и код, запускает все модульные тесты и интеграционные тесты для него. Если возникла какая-либо ошибка, выдается предупреждение и отчет о сбое, в противном случае вы получаете зеленый сигнал, говорящий, что все работает.

Конечно, доведя до своего логического предела, вы также можете автоматизировать развертывание, настроить автоматическое A / B-тестирование и полностью исключить вмешательство человека из процесса. Это называется непрерывной доставкой и / или непрерывным развертыванием в зависимости от уровня автоматизации. Но в этом руководстве мы сосредоточимся только на непрерывной интеграции.

Предпосылки

Мы собираемся сосредоточиться на настройке простого потока CI в учебнике с использованием экземпляра GitLab через HTTPS, который мы рассмотрели в предыдущем посте.

Кроме того, мы также предполагаем, что вы создали учетную запись пользователя в этом экземпляре GitLab и у вас есть хранилище (клонирован на вашем локальном компьютере) управляется под вашим именем пользователя. Именно этот репозиторий мы будем использовать для демонстрации рабочего процесса CI. В учебнике его имя будет мой проект.

Чтобы все это перечислить:

  1. Экземпляр GitLab
  2. Пустой репозиторий, называемый my-project
  3. Локальный клон этого репозитория
  4. Ваш локальный экземпляр Git настроен на отправку изменений в удаленный.

Создание простого приложения

В этом репозитории создадим простой узел.js приложение. Это приложение представляет собой простой экспресс.js-сервер, который предназначен для развертывания в контейнере Docker. Сервер передает полезную нагрузку HTTP с надписью «Hello World» в вашем браузере.

В корне вашего локального репозитория создайте файл приложение.js и добавьте следующие строки:

'использовать строго';
const express = require ('экспресс');
// Константы
const PORT = 8080;
const HOST = '0.0.0.0 ';
// Приложение
константное приложение = экспресс ();
приложение.get ('/', (req, res) =>
res.send ('Привет, мир \ n');
);
приложение.слушать (ПОРТ, ХОЗЯИН);
приставка.log ('Работает на http: // $ HOST: $ PORT');

Затем создайте еще один файл упаковка.json и добавьте к нему следующее:


"имя": "docker_web_app",
"версия": "1.0.0 ",
"description": "Узел.js в Docker ",
"author": "Джон Доу",
"основной": "сервер.js ",
"scripts":
"start": "сервер узла.js "
,
"dependencies":
"экспресс": "^ 4.16.1 "

Наконец, создайте Dockerfile и добавьте к нему следующее содержимое:

ОТ узла: 8
# Создать каталог приложения
РАБОЧИЙ КАТАЛОГ / usr / src / app
# Установить зависимости приложений
# Используется подстановочный знак, чтобы гарантировать, что оба пакета.json И пакетная блокировка.json копируются
КОПИРОВАТЬ пакет *.json ./
ЗАПУСТИТЬ npm install
# Если вы создаете свой код для продакшена
# ЗАПУСК npm install --only = production
# Bundle источник приложения
КОПИРОВАТЬ…
EXPOSE 8080
CMD ["узел", "приложение"]

Процесс сборки для этого приложения будет включать создание контейнера узла и установку зависимостей (например, Express.js модуль). Этот процесс должен происходить без ошибок. Для простоты мы не будем обсуждать какое-либо тестирование в этом руководстве.

Конвейер GitLab Runner

Теперь мы добавим еще один файл в наш репозиторий, который будет называться .gitlab-ci.yml . Этот файл будет содержать инструкции по сборке нашего проекта. Теперь, каждый раз, когда мы отправляем фиксацию в наш экземпляр GitLab, GitLab будет вызывать Runner для сборки и тестирования проекта.

Мы назначаем этому конвейеру различные рабочие места которые могут запускаться независимо друг от друга, что делает процесс сборки более гибким. Для указанного выше репо это действительный .gitlab-ci.yml создайте этот файл в корне вашего репозитория:

изображение: узел: последний
этапы:
- строить
кеш:
пути:
- node_modules /
install_dependencies:
этап: сборка
сценарий:
- npm install

У нас всего один этап строить и это только что npm install как сценарий. Это команда, которую вам придется запускать вручную каждый раз, когда в ваш проект вносятся изменения. Бегун GitLab сделает это за вас. Runner может быть установлен в кластере Kubernetes, VPS в облаке или на вашей локальной рабочей станции, и если он активен, он будет ждать инструкций от сервера GitLab для выполнения сборки.

Мы бы установили и настроили Runner локально, чтобы автоматизировать его.

Получение жетона бегуна

Откройте свой репозиторий на GitLab и посетите его настройки CD / CI. Это Настройки → CD / CI внутри вашего тестового репозитория.

Оставьте для параметра Auto DevOps значение по умолчанию и нажмите РАСШИРЯТЬ чтобы развернуть общие настройки конвейера, и вам будет показан токен бегуна. Скопируйте его значение и, конечно, сохраните его в тайне, если вы цените свой проект.

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

Установка GitLab Runner

GitLab-Runner это небольшая легкая программа, написанная на Go, которая запускает связанные с CI рабочие места на вашем локальном компьютере и отправляет результаты в GitLab, чтобы он учел изменения. Это единственный исполняемый двоичный файл, который можно установить в любой основной ОС. Следуйте инструкциям здесь для вашей конкретной операционной системы. Эти установки сильно различаются, поэтому перечислить их все невозможно.

В качестве альтернативы вы можете использовать Runner как службу Docker, но давайте просто придерживаемся традиционной установки, поскольку команды проще читать и понимать для читателя. После того, как вы установили его на локальную рабочую станцию, вам необходимо выполнить команду:

$ gitlab-runner регистр

Это задаст вам несколько вопросов, начиная с вашего координатора GitLab-CI, который будет вашим экземпляром GitLab:

$ gitlab-runner регистр
Введите URL-адрес координатора gitlab-ci (e.грамм. https: // gitlab.com /):
https: // gitlab.пример.ком

Затем он запросит ваш токен бегуна, который мы получили в предыдущем разделе:

Введите токен gitlab-ci для этого бегуна:

Your_Secret_Token

Затем для некоторого идентифицирующего описания, и вы можете просто пропустить добавление каких-либо тегов, нажав :

Введите описание gitlab-ci для этого раннера:

[Имя хоста]: демонстрация настройки CI с помощью Runner

Введите теги gitlab-ci для этого бегуна (через запятую):

Регистрация бегуна… успешно

Самое главное, он попросит у вас исполнителя (подробнее об этом чуть позже), мы выберем Docker для нашего примера.

Введите исполнителя: docker-ssh + machine, kubernetes, parallels, shell, ssh, virtualbox, docker + machine, docker, docker-ssh:

докер

Затем необходимо указать базовый образ докера, в котором будет происходить сборка, в нашем примере приложения используется узел, поэтому мы укажем образ узла:

Введите образ Docker по умолчанию (e.грамм. рубин: 2.1):

узел: последний

Бегун успешно зарегистрирован. Не стесняйтесь запускать его, но если он уже запущен, конфигурация должна быть автоматически перезагружена!

Теперь кое-что, что требует небольшого объяснения, - это то, что именно исполнители? Рабочий процесс CI заключается в том, что сборка модулей, их тестирование и т. Д. Известны как рабочие места и исполнители выполняют эти работы. Если вы выбрали VirtualBox в качестве исполнителя, то GitLab runner будет интегрироваться с локально установленным VirtualBox и запускать задания CI на виртуальной машине, если вы выберете кубернеты, тогда это произойдет в вашем кластере Kubernetes, в облаке, если вы выберете ssh, вы можете делегировать задачи CI удаленному серверу.

Наш пример проекта основан на Docker, поэтому имеет смысл использовать Docker в качестве нашего исполнителя. Тебе нужно иметь Докер установлен локально за это.

Наличие нескольких вариантов для исполнителей делает Runner более гибким. Возможно, вы захотите выполнить сборку локально, потому что файлы проекта слишком велики, или вы можете захотеть выполнить на удаленном сервере с 20 ядрами и половиной терабайта ОЗУ, потому что процесс сборки требует больших вычислений, указание параметра исполнителя дает вам эту гибкость.

Наконец, в вашей оболочке вы захотите запустить службу Runner:

$ gitlab-runner start

Видя .gitlab-ci.yml в действии

Теперь мы внесли все эти изменения в наше локальное репо, создали все приложение.js, пакет.json, Dockerfile и .gitlab-ci.yml файлы. Предположительно, вы зафиксировали изменения в своем локальном репозитории, запустив:

$ git stage имя_файла
$ git commit -m «Сообщение о фиксации»

Давайте внесем изменения в наш удаленный GitLab.

$ git push -u origin

Затем вы можете открыть свой проект в GitLab, перейдите в мой-проект → Трубопровод и вы увидите этот тег с надписью «пройдено» рядом с сделанной вами фиксацией. Последующие коммиты также будут иметь теги.

Итак, это основы CI с использованием GitLab и Runner. Надеюсь, вам понравился пост и вы узнали из него что-то новое.

5 лучших эргономичных компьютерных мышей для Linux
Вызывает ли длительное использование компьютера боль в запястье или пальцах?? Вы страдаете от скованности суставов и постоянно должны пожимать руки? В...
Как изменить настройки мыши и сенсорной панели с помощью Xinput в Linux
Большинство дистрибутивов Linux по умолчанию поставляются с библиотекой libinput для обработки событий ввода в системе. Он может обрабатывать события ...
Переназначьте кнопки мыши по-разному для разных программ с помощью X-Mouse Button Control
Может быть, вам нужен инструмент, который мог бы изменять управление вашей мышью с каждым приложением, которое вы используете. В этом случае вы можете...