CI/CD
В репозитории на GitHub хранится исходный код сервисов.
В директории с каждым сервисом хранятся Dockerfile, на основе которых собираются образы контейнеров.
Также в репозитории хранится Helm Chart с шаблонами.
С помощью механизмов GitHub Actions стоят задачи:
-
Автоматизировать сборку контейнеров и доставку их до Docker Hub.
-
Автоматизировать обновление релиза helm на сервере.
1 шаг. Настройка Docker Hub¶
Создаем токен доступа, который будет использоваться GitHub Actions и во вспомогательных скриптах.
Для каждого сервиса был создан репозиторий на Docker Hub с использованием скрипта create-repo.py
.
Ссылки на созданные репозитории (через скрипт get-link.py
):
2 шаг. Настройка self-hosted GitHub runner¶
В GitHub был получен токен репозитория
На сервер 192.168.75.11 были установлены:
-
GitHub self-host runner (офиц. документация)
-
Docker Engine (офиц. документация)
-
Утилита
yq
с использованием snap:
Был создан шаблон с ServiceAccount, Role и RoleBinding для github-runner, после чего обновлен релиз:
Создан токен аккаунта на 1 год:
Этот токен нужно указать в файле конфигурации для kubectl.
3 шаг. Написание Workflow¶
Пайплайн запускается после пуша изменения в репозиторий и влючает в себя стадии:
-
Клонирование репозитория
-
Определение списка папок, в которых произошли изменения
-
Сборка новых образов для сервисов, в папках которых произошли изменения, с тегом, равным хешу коммита
-
Перезапись тегов по необходимости в values.yaml
-
Установка нового релиза helm