Код, сборка и развертывание!

Начиная с GitLab 14.1, реестр пакетов позволяет пользователям создавать, публиковать, устанавливать и делиться чартами Helm.

Что такое рулевая диаграмма?

Helm использует формат упаковки, называемый диаграммами. Диаграмма — это набор файлов, описывающих связанный набор ресурсов Kubernetes. Одна диаграмма может использоваться для развертывания чего-то простого, например модуля memcached, или чего-то сложного, например полного стека веб-приложений с HTTP-серверами, базами данных, кэшами и т. д.

Создание простой диаграммы Helm

В этой истории мы собираемся создать диаграмму Helm, отправить ее в проект GitLab, упаковать и опубликовать в реестре пакетов GitLab.

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

Поскольку мы создали проект на GitLab, давайте создадим простую диаграмму Helm на локальном компьютере, выполнив следующую команду:

$ helm create example-chart

Убедитесь, что вы установили Helm на свой компьютер. В противном случае эта команда не будет выполнена.

helm create создает каталог диаграммы вместе с общими файлами и каталогами, используемыми в диаграмме.

Вывод команды ls показывает, что необходимые файлы созданы, и нам просто нужно отправить их в проект helm-chart-example на GitLab.

После того, как файлы успешно отправлены, нам нужно упаковать каталог как диаграмму Helm для сохранения в реестре пакетов. На этом этапе его можно реализовать с помощью команды helm package на вашем компьютере, а также с помощью конвейера CI, предоставляемого GitLab. Я рекомендую упаковывать и отправлять ваши диаграммы Helm с помощью GitLab CI, а не делать это через командную строку на вашем компьютере.

Создание конвейера непрерывной интеграции в GitLab

Перед созданием конвейера убедитесь, что кнопка «Пакеты» включена в проекте «Настройки» → «Основные» → «Видимость», функции проекта, вкладка «Разрешения», как вы можете видеть ниже:

Самое интересное здесь! Теперь мы собираемся создать пайплайн на GitLab для упаковки и публикации нашей диаграммы Helm. Это легко сделать из раздела проекта CI/CD→Editor. Если вы не знакомы с GitLab CI/CD, вы можете ознакомиться с руководством по началу работы здесь.

Конвейер будет выглядеть примерно так:

Код конвейера представлен здесь. Давайте построчно, чтобы понять это.

В верхней части файла мы определили имя этапа под названием package-publish, которое мы будем использовать в задании helm-package. Ключевое слово tags отвечает за gitlab-runners. Поскольку я использую собственный gitlab-runner в своей среде minikube, я буду использовать соответствующий тег этого бегуна в этом проекте.

* Обратите внимание, что вы должны использовать другие теги в конвейере.

Как вы заметили, есть переменная CHART, значение которой совпадает с именем нашей диаграммы Helm, которую мы создали. Эта переменная предназначена только для удобства, чтобы избежать многократного использования одного и того же имени в коде.

В разделе before_script мы устанавливаем некоторые зависимости, такие как плагин git и helm-push. Следующей важной частью является аутентификация в реестре с помощью команды helm repo add, которая добавит репозиторий Helm в оболочку gitlab-runner. Переменные CI_REGISTRY_USER, CI_REGISTRY_PASSWORD, CI_API_V4_URL и CI_PROJECT_ID — это специальные переменные GitLab CI/CD.

  • CI_REGISTRY_USER — имя пользователя для отправки контейнеров/диаграмм в реестр контейнеров/пакетов проекта GitLab. Доступно, только если для проекта включен реестр контейнеров/пакетов.
  • CI_REGISTRY_PASSWORD — пароль для отправки контейнеров/хелм-чартов в реестр контейнеров/пакетов проекта GitLab. Доступно, только если для проекта включен реестр контейнеров/пакетов.
  • CI_API_V4_URL — корневой URL-адрес GitLab API v4.
  • CI_PROJECT_ID — ID текущего проекта. Этот идентификатор уникален для всех проектов экземпляра GitLab.

Вы можете найти их здесь, чтобы узнать больше о предопределенных переменных GitLab CI/CD.

В разделе скрипта мы делаем всего два действия: упаковка и отправка. Эти два действия будут выполнены с помощью соответствующих команд Шлема. Команда helm package упаковывает диаграмму в архивный файл версионной диаграммы, а команда helm push загружает диаграмму в реестр.

Последний раздел посвящен тому, когда запустится задание GitLab. Ключевое слово only.refs означает, что задание будет создано в случае любого коммита в основную ветку. Ключевое слово only.changes означает, что задание будет создано и будет автоматически запускаться при любых изменениях файлов в каталоге примеров-диаграмм.

Поскольку мы рассмотрели все детали, пришло время запустить наш конвейер. Для запуска конвейера нам просто нужно изменить любой из файлов в каталоге example-chart.

После того, как мы успешно зафиксировали наши изменения, мы можем перейти на вкладку CI/CD и увидеть статус задания.

И, наконец, давайте проверим диаграмму Helm, которая была помещена в реестр пакетов в версии 0.1.1.

Заключение

Теперь вы знаете, как использовать GitLab Package Registry в качестве реестра чартов Helm; он позволяет хранить, публиковать и использовать диаграммы рядом с вашими манифестами Kubernetes.

Счастливого Хелминга!

Спасибо за прочтение. Надеюсь, эта история была полезной. Если вам интересно, ознакомьтесь с другими моими статьями на Medium.