← Обзор трека · Выкатка · Откат
От digest до работающего API
План, ещё не внедрено
Единый контракт backend workflow и Ansible задают backend#42 и infra#69. Сейчас playbook принимает тег; ниже описан переход на digest.
Граница между workflow и Ansible
Backend workflow отвечает за выбор версии: при обычной выкатке берёт digest только что опубликованного образа, при откате — digest прежнего успешного production Deployment. До доступа к VPS он проверяет цель в GHCR. В обоих случаях playbook получает один вход:
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
- Анонимно скачивает публичный образ по digest. Если образ недоступен, не переписывает конфигурацию запущенного API.
- Передаёт тот же
backend_image_refв Compose и запускает API из уже скачанного образа. Compose не выбирает заново изменяемый SHA-тег. - Ждёт
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.