Что такое CI/CD?
CI - сборка
CD - деплой
Шютка!
Для правильной сборки и выкатки приложения необходимо знать пачку нюансов и соответственно инфру подготавливать исходя из них.
Здесь я просто в общих словах расскажу, как покрасивее хранить все конфиги, скрипты и т.п.
Проект ci-cd-includes
У меня есть отдельный репо со всеми .yml файлами для сиайки, вот примерная структура каталогов в этом репо:
Основные файлы
build.yml: Описывает этап сборки Docker-образа с использованием Kaniko.
common.yml: Включает в себя файлы build.yml и deploy.yml.
common_arm64.yml: Включает в себя файлы build.yml, deploy.yml и notify-tg.yml, а также задает дополнительные переменные.
deploy.yml: Описывает этап развертывания с использованием Helm.
notify-tg.yml: Описывает уведомления в Telegram.
tf_oracle.yml: Включает в себя файл terraform.yml и задает дополнительные переменные для работы с Oracle Cloud Infrastructure.
variables.yml: Содержит общие переменные для конфигурации CI/CD Pipeline.
Функции
functions/build_kaniko.yml: Описывает сборку Docker-образа с использованием Kaniko.
functions/install_helm_chart.yml: Описывает установку Helm chart.
functions/notify.yml: Описывает уведомления с использованием HTTP API.
functions/push_chart.yml: Описывает отправку Helm chart в репозиторий.
functions/terraform.yml: Описывает планирование и применение изменений в инфраструктуре с использованием Terraform.
Давайте рассмотрим пример сборки
Функция сборки:
<!-- cmdrun bash /scripts/git_show_file.sh remote https://gitlab.com/from-the-lamp/infra/ci-cd-includes functions/build_kaniko.yml -->
Основной файл сборки:
<!-- cmdrun bash /scripts/git_show_file.sh remote https://gitlab.com/from-the-lamp/infra/ci-cd-includes build.yml -->
Файл, который мы будем инклюдить в проекты:
<!-- cmdrun bash /scripts/git_show_file.sh remote https://gitlab.com/from-the-lamp/infra/ci-cd-includes common_arm64.yml -->
Почему все именно так? Да потому что это прививает правильный подход к созданию инфы.
Большинство девопсов колхозят что-то кривое и каждое мельчайшое изменение аффектит всю инфраструктуру.
Здесь же у нас есть конкретная функция сборки и мы ее не трогаем, мы можешь добавлять параметры с помощью build.yml через variables
И, например, если у нас будет 100500 проектов и необходимо будет сделать какой-то один особенный проект, то мы просто создадим buils_crutch.yml (например) сделаем в нем инклюд функции сборки с нужными параметрами и таким образом будем уверены, что остальная инфра не будет затронута
p.s. Это одна из самых обширных тем и эта страница будет сильно меняться