Что такое CI/CD?

CI - сборка

CD - деплой

Vse!

Шютка!

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

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

Проект ci-cd-includes

У меня есть отдельный репо со всеми .yml файлами для сиайки, вот примерная структура каталогов в этом репо:

Includes

Основные файлы
    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. Это одна из самых обширных тем и эта страница будет сильно меняться