From 38a5c19452650f07771cd901398d0ee011058863 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B8=D0=BC=D0=B8=D0=BD?= Date: Sun, 10 May 2026 15:39:26 +0000 Subject: [PATCH] ci(docker): serialize docker builds + prune cache --- .gitlab-ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1fd1ba4..86fe4a7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -171,6 +171,14 @@ build-docs: changes: *docs-changes # ─── 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: stage: publish 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 alias: docker command: ["--tls=false"] + resource_group: docker-builds variables: DOCKER_HOST: tcp://docker:2375 DOCKER_TLS_CERTDIR: "" @@ -185,6 +194,12 @@ build-docs: .publish_script: &publish_script | 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 IMG="$REGISTRY/$IMAGE_REPO/$SVC" # --pull + --no-cache временно для recovery после Nexus blob loss