Выкатка Go API
План, ещё не внедрено
Это целевой поток из backend#42 и infra#69. Ниже отдельно указано, что уже делает текущий CI/CD.
Три идентификатора одного выпуска
| Значение | Для чего нужно |
|---|---|
| Полный Git SHA | Называет коммит исходников, по которому CI собрал образ |
Тег sha-<полный SHA> | Даёт человеку читаемое имя версии в GHCR; тег может быть перезаписан |
ghcr.io/cringe-driven-development-team/backend@sha256:… | Указывает на конкретный опубликованный образ; именно эта ссылка идёт в Ansible |
Digest выдаёт шаг публикации образа. Job сборки передаёт его job выкатки через output GitHub Actions; отдельная таблица в Go API для этого не нужна. Связь целевого SHA, digest и результата production сохраняется в GitHub Deployment.
От коммита до запущенного API
- Push в
mainпроходит проверки CI. Jobdockerодин раз собирает и публикует образ в GHCR с полным SHA-тегом и получает digest опубликованного образа. - Если
PRODUCTION_ENABLEDразрешает выкатку, CD job входит в environmentproduction. Выкатка и ручной откат используют одну concurrency-группу. - CD создаёт GitHub Deployment с
refисходного полного SHA и digest образа вpayload. Поскольку запись создаётся явно, автоматическая запись от environment job отключена. - CD вызывает playbook Ansible с
backend_image_refпо digest. Ansible скачивает выбранный образ и запускает API через Compose на VPS. - После переключения workflow проверяет результат по критериям ниже и записывает его в GitHub Deployment и карточку Backend / Releases.
Ожидаемый результат
| Проверка | Что должно подтвердиться |
|---|---|
| Образ запущенного контейнера | Совпадает с выбранным digest |
| Состояние контейнера | healthy |
| Публичный API через HTTPS | /api/v1/users/me без авторизации возвращает JSON и HTTP 401 |
| Deployment и карточка | success только после всех проверок выше |
Если результат нельзя подтвердить, статус и карточка не называют выкатку успешной. Подробности о записи результата — в подразделе GitHub Deployments, а о запуске контейнера — в подразделе Ansible и VPS.
Что работает сейчас
На зафиксированном исходном состоянии backend CI публикует короткий SHA-тег и передаёт его в CD: ci.yml. CD уже использует production и concurrency-группу, но передаёт Ansible тег: cd.yml. Переход на digest — часть названных задач, а не свойство этой версии main.