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:
9
scripts/ci-build-image.sh
Executable file
9
scripts/ci-build-image.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
# Собирает предварительно прогретый CI-образ на CI VM.
|
||||
# Образ immutable: исходники пайплайна берутся из checkout, кэш Gradle — из образа.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
tag="${1:-lms-ci:1}"
|
||||
docker build -f ci/Dockerfile -t "$tag" .
|
||||
echo "Готово: $tag"
|
||||
echo "Образ используется в .woodpecker/*.yaml как image: $tag"
|
||||
47
scripts/ci-dind.sh
Executable file
47
scripts/ci-dind.sh
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/bin/sh
|
||||
# Подготовка изолированного Docker-in-Docker шага Woodpecker.
|
||||
# Запускается внутри privileged-контейнера docker:*-dind: поднимает локальный
|
||||
# dockerd и доустанавливает Java/Python/bash, если их нет в образе.
|
||||
# Хост-Docker сокет не используется.
|
||||
set -eu
|
||||
|
||||
if ! command -v dockerd >/dev/null 2>&1; then
|
||||
echo "ci-dind.sh: нужен образ docker:<version>-dind" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export DOCKER_HOST="${DOCKER_HOST:-unix:///var/run/docker.sock}"
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
echo ">> Запускаю изолированный dockerd..."
|
||||
dockerd-entrypoint.sh >/tmp/ci-dockerd.log 2>&1 &
|
||||
i=0
|
||||
while [ "$i" -lt 90 ]; do
|
||||
docker info >/dev/null 2>&1 && break
|
||||
sleep 1
|
||||
i=$((i + 1))
|
||||
done
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
echo "dockerd не поднялся:" >&2
|
||||
tail -50 /tmp/ci-dockerd.log >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
missing=""
|
||||
command -v bash >/dev/null 2>&1 || missing="$missing bash"
|
||||
command -v java >/dev/null 2>&1 || missing="$missing openjdk21-jdk"
|
||||
command -v python3 >/dev/null 2>&1 || missing="$missing python3"
|
||||
command -v node >/dev/null 2>&1 || missing="$missing nodejs"
|
||||
command -v npm >/dev/null 2>&1 || missing="$missing npm"
|
||||
command -v git >/dev/null 2>&1 || missing="$missing git"
|
||||
command -v curl >/dev/null 2>&1 || missing="$missing curl"
|
||||
command -v ss >/dev/null 2>&1 || missing="$missing iproute2"
|
||||
|
||||
if [ -n "$missing" ]; then
|
||||
echo ">> Устанавливаю в изолированный шаг:$missing"
|
||||
# shellcheck disable=SC2086
|
||||
apk add --no-cache $missing
|
||||
fi
|
||||
|
||||
java -version 2>&1 | head -n 1
|
||||
docker info --format 'Docker server {{.ServerVersion}} (изолированный dind)'
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# Проверка окружения Woodpecker-агента (local backend) перед check/smoke/release.
|
||||
# Проверка окружения изолированного dind-шага Woodpecker перед smoke/release.
|
||||
# Ничего не устанавливает.
|
||||
set -euo pipefail
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ mkdir -p build/evidence
|
||||
ensure_playwright_browsers
|
||||
set +e
|
||||
if host_playwright_usable; then
|
||||
log "Запускаю Playwright на хосте (Chromium/Firefox/WebKit)..."
|
||||
log "Запускаю Playwright в текущем окружении (Chromium/Firefox/WebKit)..."
|
||||
(
|
||||
cd e2e
|
||||
LDD_WEB_URL="http://localhost:8090" \
|
||||
@@ -123,10 +123,10 @@ if host_playwright_usable; then
|
||||
else
|
||||
version=$(playwright_version)
|
||||
if [[ -z "$version" ]]; then
|
||||
echo "WebKit не запускается на хосте, а версию Playwright определить не удалось." >&2
|
||||
echo "WebKit не запускается в текущем окружении, а версию Playwright определить не удалось." >&2
|
||||
E2E_STATUS=1
|
||||
else
|
||||
log "WebKit не запускается на хосте; запускаю Chromium/Firefox/WebKit в Docker-образе Playwright ${version}."
|
||||
log "WebKit не запускается в текущем окружении; запускаю Chromium/Firefox/WebKit в Docker-образе Playwright ${version}."
|
||||
docker run --rm --network host \
|
||||
-v "$PWD:/work" \
|
||||
-w /work/e2e \
|
||||
|
||||
Reference in New Issue
Block a user