- 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, чек-лист безопасности
48 lines
1.8 KiB
Bash
Executable File
48 lines
1.8 KiB
Bash
Executable File
#!/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)'
|