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_service—GET/POST /api/ops/ttm/user_service—GET/POST /api/ops/ttm/product_service—GET/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_started → post_deploy_health_ok |
measurement-002-baseline-cd-preflight |
CD preflight | metrics/ttm/measurement-002-baseline-cd-preflight.json |
cd_preflight_started → deploy_ready |
Новые прогоны CI/CD дописывают JSON в metrics/ttm/ и публикуют артефакт ttm-*-measurement.
Проверка DoD¶
- Green CI: smoke + docs + frontend jobs.
- CD preflight workflow доступен по
workflow_dispatchи тегамv*. - В репозитории не менее двух JSON-отчётов TTM с тремя сервисами в
services[]. - Smoke-тесты
tests/ops/test_ttm_smoke.pyпроходят при поднятом стеке.