ci(docker): serialize docker builds + prune cache

This commit is contained in:
Александр Зимин
2026-05-10 15:39:26 +00:00
parent c785d1e186
commit 38a5c19452
+15
View File
@@ -171,6 +171,14 @@ build-docs:
changes: *docs-changes changes: *docs-changes
# ─── PUBLISH (Docker images) ─────────────────── # ─── PUBLISH (Docker images) ───────────────────
# resource_group: serializes docker-* jobs across all concurrent pipelines на
# одном runner'е. 5 parallel docker builds (app/read-api/projection-writer/
# admin-ui/migrations) каждый поднимает свой DinD container с buildx — суммарно
# выжирали runner disk (~25Gi+) → "no space left on device" в /var/lib/docker
# на тяжёлых stages (см. pipeline 6066). Serialize'я добавляет ~10 min к
# pipeline'у, но вместо retry-roulette мы получаем стабильно зелёный CI.
# При scaling до multi-runner setup можно увеличить parallelism per-runner и
# переименовать group в per-runner identifier.
.docker_base: .docker_base:
stage: publish stage: publish
image: repo.nstart.cloud/nstart/docker-cli-buildx:1.0.0 image: repo.nstart.cloud/nstart/docker-cli-buildx:1.0.0
@@ -178,6 +186,7 @@ build-docs:
- name: repo.nstart.cloud/library/docker:29.1.2-dind - name: repo.nstart.cloud/library/docker:29.1.2-dind
alias: docker alias: docker
command: ["--tls=false"] command: ["--tls=false"]
resource_group: docker-builds
variables: variables:
DOCKER_HOST: tcp://docker:2375 DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: "" DOCKER_TLS_CERTDIR: ""
@@ -185,6 +194,12 @@ build-docs:
.publish_script: &publish_script | .publish_script: &publish_script |
for i in $(seq 1 30); do docker info >/dev/null 2>&1 && break; sleep 1; done for i in $(seq 1 30); do docker info >/dev/null 2>&1 && break; sleep 1; done
# Cleanup от предыдущего job'а в этой serialized group: удаляем dangling
# images + build cache. DinD container shared across serialized jobs если
# runner reuses container — без prune'а cache накапливается до disk-full.
# `|| true`: на cold start (первый job в группе) prune может скипнуть с
# warning, не должен ронять job.
docker system prune -af --volumes >/dev/null 2>&1 || true
echo "$REGISTRY_PASSWORD" | docker login "$REGISTRY" -u "$REGISTRY_USER" --password-stdin echo "$REGISTRY_PASSWORD" | docker login "$REGISTRY" -u "$REGISTRY_USER" --password-stdin
IMG="$REGISTRY/$IMAGE_REPO/$SVC" IMG="$REGISTRY/$IMAGE_REPO/$SVC"
# --pull + --no-cache временно для recovery после Nexus blob loss # --pull + --no-cache временно для recovery после Nexus blob loss