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

24
ci/Dockerfile Normal file
View File

@@ -0,0 +1,24 @@
# Предварительно прогретый CI-образ для Woodpecker.
# Сборка на CI VM (доверенный администратором коммит):
# ./scripts/ci-build-image.sh lms-ci:1
# Образ содержит только зависимости; исходники в пайплайне берутся из checkout.
FROM docker:27-dind
RUN apk add --no-cache openjdk21-jdk python3 bash
WORKDIR /opt/lms-warmup
COPY gradle gradle
COPY gradlew settings.gradle.kts build.gradle.kts gradle.properties ./
COPY buildSrc buildSrc
COPY config config
COPY libs libs
COPY services services
COPY web web
# Прогреваем Gradle-кэш и плагины. Это ускоряет check/smoke/release,
# при этом кэш остаётся внутри неизменяемого образа, а не в общем volume.
RUN ./gradlew --no-daemon testClasses --console=plain
# Исходники нужны были только для прогрева кэша; в образе их не оставляем.
RUN rm -rf /opt/lms-warmup