CI/CD калькулятор

Простой пример реализации API калькулятора, который собирается в DockerHub и разворачивается на сервере.

Этапы CI/CD

  1. Проверка исходного кода с помощью SAST Bandit
  2. Сборка контейнера
  3. Отправка собранного контейнера в DockerHub
  4. Логин в WireGuard
  5. Отправка запроса на развертывание нового образа на специальную ручку на сервере по виртуальной сети
  6. Развертывание нового образа на сервере

Секретные переменные

Название переменной Значение Пример
DOCKERHUB_USERNAME Имя на DockerHub username
DOCKERHUB_TOKEN Токен с DockerHub dckr_fds_faslkdfjas...
DOCKERHUB_REPOSITORY Название репозитория repository
WG_PRIVATE_KEY Приватный ключ WireGuard клиента fsdaasfasvckjnx
WG_ADDERSS Адрес WireGuard клиента в виртуальной сети 10.0.0.12/24
WG_PUBLIC_KEY Публичный ключ WireGuard сервера fasdsajwlrjwfs
WG_ENDPOINT Адрес и порт WireGuard сервера 11.23.31.43:51141
WG_ALLOWED_IPS Подмаска адресов, с которыми клиент связан через сервер WireGuard 10.0.0.0/24
CD_HOST Адрес CD-сервера внутри виртуальной сети WireGuard http://10.0.0.13:8080
CD_SECRET Токен, необходимый для прохождения аутентификации на CD-сервере fsadjsadfgsafas

CI

Весь CI запускается в одном github action, он состоит из двух работ и 9 этапов.

Работа 1. Этап 1. Копирование кода

Исходный код копируется в экшен посредством actions/checkout@v3.

Работа 1. Этап 2. Подготовка python

Устанавливается Python 3.9.

Работа 1. Этап 3. Bandit

Устанавливаются зависимости, Bandit готовит отчет.

Работа 1. Этап 4. Артефакты

Результат работы Bandit сохраняется в артефакты экшена.

Работа 1. Этап 5. Проверка

Результат работы Bandit проверяется на наличие high-level уязвимостей.

Работа 2. Этап 1. Копирование кода

Исходный код копируется в экшен посредством actions/checkout@v3.

Работа 2. Этап 2. Вход в DockerHub

Авторизация происходит по токену с помощью docker/login-action@v2.

Работа 2. Этап 3. Копирование для сборки образа

На данном этапе создается окружение для сборки образа.

Работа 2. Этап 4. Сборка и отправка образа

Образ собирается внутри экшена и отправляется в DockerHub.

CD

Процесс CD запускается с помощью одного экшена в 3 этапа.

Этап 1. Копирование кода

Исходный код копируется в экшен посредством actions/checkout@v3.

Этап 2. Подключение к WireGuard

На данном этапе происходит установка клиента WireGuard и его настройка на работу с сервером.

Этап 3. Отправка данных на север

Из экшена формируется запрос на специальную ручку на сервере, запрос выполняется внутри виртуальной сети WireGuard. Тело данного запроса состоит из формы, в которой передаются:

  • Токен — необходим для подтверждения запроса
  • entry.sh — Файл, который будет запускать процесс развертывания
  • myFiles — остальные файлы, которые необходимы для развертывания

API калькулятора

Калькулятор слушает 8000 порт.

Swagger

Swagger находится на ручке /docs

expression

Ручка /expression проводит вычисления для двух чисел. Используется GET запрос с параметрами:

Параметр Тип
n1 int
n2 int
operation a | s | m | d

Ответ возвращается в формате JSON:

{
  "answer": 5,
  "expression": "2 + 3"
}

Пример

curl --location --request GET \
  'http://localhost:8000/expression?n1=2&n2=3&operation=a