Перейти к содержимому
Загрузка статьи…

Трек Доработки CI/CD бэка · Модуль №2

← Обзор трека · Выкатка · Откат

От digest до работающего API ​

План, ещё не внедрено

Единый контракт backend workflow и Ansible задают backend#42 и infra#69. Сейчас playbook принимает тег; ниже описан переход на digest.

Граница между workflow и Ansible ​

Backend workflow отвечает за выбор версии: при обычной выкатке берёт digest только что опубликованного образа, при откате — digest прежнего успешного production Deployment. До доступа к VPS он проверяет цель в GHCR. В обоих случаях playbook получает один вход:

text
backend_image_ref=ghcr.io/cringe-driven-development-team/backend@sha256:<64 hex>

Ansible повторно проверяет, что ссылка указывает на разрешённый backend package и содержит полный digest, а не тег. Это граница ответственности: workflow выбирает что разворачивать, Ansible выполняет как разворачивать на единственной VPS. Публичный backend-образ скачивается без GHCR-токена; SSH-данные остаются секретами production environment, их значения не записываются в документацию или карточку.

Что делает playbook ​

  1. Анонимно скачивает публичный образ по digest. Если образ недоступен, не переписывает конфигурацию запущенного API.
  2. Передаёт тот же backend_image_ref в Compose и запускает API из уже скачанного образа. Compose не выбирает заново изменяемый SHA-тег.
  3. Ждёт healthy контейнера и проверяет публичный API через HTTPS. Для /api/v1/users/me без авторизации ожидается JSON с HTTP 401.

Как workflow подтверждает результат ​

После playbook workflow читает фактически запущенный контейнер и сопоставляет его образ с выбранным digest. Только подтверждённый итог становится статусом GitHub Deployment и карточкой в Backend / Releases.

До переключения workflow читает историю успешных GitHub Deployments, без отдельной проверки Docker на VPS. История позволяет выбрать точный digest для отката, но описывает последний проверенный результат выкатки, а не текущее состояние контейнера. Если VPS недоступна, Ansible не сможет переключить API; такой запуск не получает success.

Исходное состояние ​

Сейчас cd.yml передаёт backend_image_tag, а шаблон Compose добавляет его к имени образа. Роль app пишет Compose-конфигурацию до скачивания образа. Изменение порядка и входа backend_image_ref относится к infra#69; сама карточка релиза и GitHub Deployment — к backend#42.

Откат образа не меняет схему или данные PostgreSQL.