Перейти к содержанию

TTM-измерения и CI/CD

Назначение

Time-to-market (TTM) в проекте — интервал от старта автоматизированного контура (CI smoke или CD preflight) до подтверждения готовности на нескольких API-хостах. Каждый хост хранит серверные маркеры (UTC-метки в памяти процесса), которые CI/CD записывает через HTTP.

Серверные маркеры

Маркер Когда выставляется
service_boot Старт gunicorn/процесса
ci_smoke_started Начало CI smoke job
ci_smoke_finished Успешное завершение pytest smoke
post_deploy_health_ok После smoke, перед остановкой API
cd_preflight_started Старт CD preflight workflow
cd_preflight_finished Завершение проверок артефактов релиза
deploy_ready Compose/runbook артефакты валидны

Каталог маркеров также доступен в GET /api/ops/ttm/ (поле catalog).

Хосты с маркерами

  • auth_serviceGET/POST /api/ops/ttm/
  • user_serviceGET/POST /api/ops/ttm/
  • product_serviceGET/POST /api/ops/ttm/

Переменные окружения:

  • KONSTRUCTORIUM_RELEASE_ID — commit SHA или тег релиза;
  • KONSTRUCTORIUM_SERVER_ROLE — роль узла (по умолчанию имя сервиса).

CI/CD workflows

Workflow Файл Назначение
CI .gitverse/workflows/gitverse-ci.yaml Ruff, smoke API, frontend, docs; TTM на smoke
CD .gitverse/workflows/gitverse-cd.yaml Preflight артефактов релиза; TTM на CD

Сбор отчёта локально или в pipeline:

python scripts/ci/record_ttm_measurement.py \
  --phase ci_smoke \
  --measurement-id measurement-local-ci \
  --stamp-phase all

Зафиксированные измерения (минимум 2)

ID Фаза Файл Окно TTM
measurement-001-baseline-ci-smoke CI smoke metrics/ttm/measurement-001-baseline-ci-smoke.json ci_smoke_startedpost_deploy_health_ok
measurement-002-baseline-cd-preflight CD preflight metrics/ttm/measurement-002-baseline-cd-preflight.json cd_preflight_starteddeploy_ready

Новые прогоны CI/CD дописывают JSON в metrics/ttm/ и публикуют артефакт ttm-*-measurement.

Проверка DoD

  1. Green CI: smoke + docs + frontend jobs.
  2. CD preflight workflow доступен по workflow_dispatch и тегам v*.
  3. В репозитории не менее двух JSON-отчётов TTM с тремя сервисами в services[].
  4. Smoke-тесты tests/ops/test_ttm_smoke.py проходят при поднятом стеке.