ci: изолировать пайплайны на отдельной VM

- Woodpecker workflows требуют агент с меткой isolation=dedicated-vm
- шаги выполняются в lms-ci:1 с nested dockerd, без хост-Docker сокета
- ci/Dockerfile: прогретый immutable-образ (Java, Python, Node, Gradle-кэш)
- ci-dind.sh поднимает dockerd внутри privileged-шага; ci-build-image.sh собирает образ
- deploy/WOODPECKER.md: отдельная VM, firewall, отсутствие production-секретов,
  trusted repo, чек-лист безопасности
This commit is contained in:
2026-10-28 22:50:23 +03:00
parent 685916c4bd
commit f3d614bb33
15 changed files with 287 additions and 137 deletions

View File

@@ -1,9 +1,9 @@
# 17. Handoff: состояние проекта после закрытия продуктовых рисков
**Дата:** 2026-10-28.
**Ветка:** `feature/groups-courses` (последняя история — `git log --oneline`).
**HEAD до переделки CI:** `d98c3b0` (`feat: закрыть остаточный backlog`);
история CI-правки — следующий коммит в `git log`.
**Ветка:** `feature/groups-courses`.
**История:** `git log --oneline`; последние изменения — Woodpecker CI и
изоляция тестовой среды на отдельной VM.
**Пуш:** не выполнялся.
**Рабочее дерево:** чистое. `exports/` и `texput.log` игнорируются и в коммиты не входят.
@@ -129,6 +129,8 @@
вход админа, один курс;
- `release` на тег или вручную: тесты, миграции, mutation, runtime/load,
browser E2E, финальный evidence.
- workflows требуют метку `isolation=dedicated-vm`; шаги идут в nested dind
без хост-Docker сокета, агент — на отдельной VM без production-доступа.
- `scripts/ci-preflight.sh` проверяет Java 21, Docker Compose v2, Python 3,
Node и Playwright. Установка server/agent — `deploy/WOODPECKER.md`.
- Первый реальный Woodpecker pipeline ещё не подтверждён.
@@ -211,11 +213,10 @@ cat build/reports/evidence/index.md
у обычных пользователей.
2. **Первый реальный CI-прогон.**
Развернуть Woodpecker server и local-backend агент по
Развернуть Woodpecker server и Docker-backend агент на отдельной VM по
`deploy/WOODPECKER.md`, включить репозиторий в Woodpecker и дождаться
зелёных workflow `check`/`smoke` на push-MR и `release` на теге. Агенту
нужны Java 21, Docker Compose v2, Python 3, Node и браузеры
Chromium/Firefox/WebKit.
зелёных workflow `check`/`smoke` на push-MR и `release` на теге. Шаги идут
в nested dind; VM не имеет доступа к production и production-секретам.
3. **Визуальная регрессия и мобильный набор E2E.**
Сейчас 6 сценариев × 3 браузера, без screenshot-diff. Добавлять по мере
@@ -299,7 +300,9 @@ cat build/reports/evidence/index.md
`SessionCookieRefreshFilter.kt`.
- `web/.../admin/AdminAuditController.kt`, `LegacyAssetsController.kt`.
- `services/gateway/.../JwtAuthenticationFilter.kt`.
- `scripts/ldd-*.sh`, `scripts/ci-preflight.sh`, `scripts/legacy-assets.sh`.
- `scripts/ldd-*.sh`, `scripts/ci-preflight.sh`, `scripts/ci-dind.sh`,
`scripts/ci-build-image.sh`, `scripts/legacy-assets.sh`.
- `.woodpecker/{check,smoke,release}.yaml` — CI на Gitea + Woodpecker.
- `ci/Dockerfile` — прогретый образ `lms-ci:1` для изолированного dind.
- `deploy/backup.sh`, `deploy/deploy.sh`, `deploy/DEPLOY.md`,
`deploy/WOODPECKER.md`.