ci: убирать buildx-билдер в конце сборочных job'ов (#2869) #2870
2 changed files with 168 additions and 0 deletions
|
|
@ -227,6 +227,34 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
||||||
|
|
||||||
|
- name: Подобрать протёкшие buildx-билдеры (#2869)
|
||||||
|
# Билдеры протекают НЕ на обычном падении, а когда job умирает аварийно
|
||||||
|
# (ENOSPC, OOM, отмена concurrency-группой): тогда ни post-step действия,
|
||||||
|
# ни завершающий шаг не выполняются — контейнер job'а уже мёртв.
|
||||||
|
# Замер 13.08: 20 висящих билдеров, созданных в 8 дат за три месяца
|
||||||
|
# (17.05, 30.05, 31.05, 13.06, 17.06, 20.06, 28.06, 05.07) — и ни одного
|
||||||
|
# за пять недель между 05.07 и 13.08, когда аварий не было. Два последних
|
||||||
|
# созданы 13.08 11:57:43 — ровно тот прогон, что упал с
|
||||||
|
# `no space left on device`.
|
||||||
|
# Поэтому чистим ЧУЖОЙ мусор НА ВХОДЕ: всё старше 6 часов заведомо не
|
||||||
|
# принадлежит живому прогону (самый долгий job — ~17 минут).
|
||||||
|
run: |
|
||||||
|
now=$(date +%s); reaped=0; kept=0
|
||||||
|
for c in $(docker ps -a --filter "name=^buildx_buildkit_builder-" --format '{{.Names}}'); do
|
||||||
|
created=$(docker inspect "$c" --format '{{.Created}}' 2>/dev/null) || continue
|
||||||
|
ts=$(date -d "$created" +%s 2>/dev/null) || continue
|
||||||
|
age_h=$(( (now - ts) / 3600 ))
|
||||||
|
if [ "$age_h" -ge 6 ]; then
|
||||||
|
echo "buildx: убираю протёкший билдер $c (возраст ${age_h} ч)"
|
||||||
|
docker rm -f "$c" >/dev/null && reaped=$((reaped+1))
|
||||||
|
docker volume rm "${c}_state" >/dev/null 2>&1 || true
|
||||||
|
else
|
||||||
|
kept=$((kept+1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "buildx: убрано протёкших ${reaped}, оставлено свежих ${kept}"
|
||||||
|
df -h / | tail -1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
id: buildx
|
id: buildx
|
||||||
|
|
@ -285,6 +313,34 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
||||||
|
|
||||||
|
- name: Подобрать протёкшие buildx-билдеры (#2869)
|
||||||
|
# Билдеры протекают НЕ на обычном падении, а когда job умирает аварийно
|
||||||
|
# (ENOSPC, OOM, отмена concurrency-группой): тогда ни post-step действия,
|
||||||
|
# ни завершающий шаг не выполняются — контейнер job'а уже мёртв.
|
||||||
|
# Замер 13.08: 20 висящих билдеров, созданных в 8 дат за три месяца
|
||||||
|
# (17.05, 30.05, 31.05, 13.06, 17.06, 20.06, 28.06, 05.07) — и ни одного
|
||||||
|
# за пять недель между 05.07 и 13.08, когда аварий не было. Два последних
|
||||||
|
# созданы 13.08 11:57:43 — ровно тот прогон, что упал с
|
||||||
|
# `no space left on device`.
|
||||||
|
# Поэтому чистим ЧУЖОЙ мусор НА ВХОДЕ: всё старше 6 часов заведомо не
|
||||||
|
# принадлежит живому прогону (самый долгий job — ~17 минут).
|
||||||
|
run: |
|
||||||
|
now=$(date +%s); reaped=0; kept=0
|
||||||
|
for c in $(docker ps -a --filter "name=^buildx_buildkit_builder-" --format '{{.Names}}'); do
|
||||||
|
created=$(docker inspect "$c" --format '{{.Created}}' 2>/dev/null) || continue
|
||||||
|
ts=$(date -d "$created" +%s 2>/dev/null) || continue
|
||||||
|
age_h=$(( (now - ts) / 3600 ))
|
||||||
|
if [ "$age_h" -ge 6 ]; then
|
||||||
|
echo "buildx: убираю протёкший билдер $c (возраст ${age_h} ч)"
|
||||||
|
docker rm -f "$c" >/dev/null && reaped=$((reaped+1))
|
||||||
|
docker volume rm "${c}_state" >/dev/null 2>&1 || true
|
||||||
|
else
|
||||||
|
kept=$((kept+1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "buildx: убрано протёкших ${reaped}, оставлено свежих ${kept}"
|
||||||
|
df -h / | tail -1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
id: buildx
|
id: buildx
|
||||||
|
|
@ -357,6 +413,34 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
||||||
|
|
||||||
|
- name: Подобрать протёкшие buildx-билдеры (#2869)
|
||||||
|
# Билдеры протекают НЕ на обычном падении, а когда job умирает аварийно
|
||||||
|
# (ENOSPC, OOM, отмена concurrency-группой): тогда ни post-step действия,
|
||||||
|
# ни завершающий шаг не выполняются — контейнер job'а уже мёртв.
|
||||||
|
# Замер 13.08: 20 висящих билдеров, созданных в 8 дат за три месяца
|
||||||
|
# (17.05, 30.05, 31.05, 13.06, 17.06, 20.06, 28.06, 05.07) — и ни одного
|
||||||
|
# за пять недель между 05.07 и 13.08, когда аварий не было. Два последних
|
||||||
|
# созданы 13.08 11:57:43 — ровно тот прогон, что упал с
|
||||||
|
# `no space left on device`.
|
||||||
|
# Поэтому чистим ЧУЖОЙ мусор НА ВХОДЕ: всё старше 6 часов заведомо не
|
||||||
|
# принадлежит живому прогону (самый долгий job — ~17 минут).
|
||||||
|
run: |
|
||||||
|
now=$(date +%s); reaped=0; kept=0
|
||||||
|
for c in $(docker ps -a --filter "name=^buildx_buildkit_builder-" --format '{{.Names}}'); do
|
||||||
|
created=$(docker inspect "$c" --format '{{.Created}}' 2>/dev/null) || continue
|
||||||
|
ts=$(date -d "$created" +%s 2>/dev/null) || continue
|
||||||
|
age_h=$(( (now - ts) / 3600 ))
|
||||||
|
if [ "$age_h" -ge 6 ]; then
|
||||||
|
echo "buildx: убираю протёкший билдер $c (возраст ${age_h} ч)"
|
||||||
|
docker rm -f "$c" >/dev/null && reaped=$((reaped+1))
|
||||||
|
docker volume rm "${c}_state" >/dev/null 2>&1 || true
|
||||||
|
else
|
||||||
|
kept=$((kept+1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "buildx: убрано протёкших ${reaped}, оставлено свежих ${kept}"
|
||||||
|
df -h / | tail -1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
id: buildx
|
id: buildx
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,34 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
||||||
|
|
||||||
|
- name: Подобрать протёкшие buildx-билдеры (#2869)
|
||||||
|
# Билдеры протекают НЕ на обычном падении, а когда job умирает аварийно
|
||||||
|
# (ENOSPC, OOM, отмена concurrency-группой): тогда ни post-step действия,
|
||||||
|
# ни завершающий шаг не выполняются — контейнер job'а уже мёртв.
|
||||||
|
# Замер 13.08: 20 висящих билдеров, созданных в 8 дат за три месяца
|
||||||
|
# (17.05, 30.05, 31.05, 13.06, 17.06, 20.06, 28.06, 05.07) — и ни одного
|
||||||
|
# за пять недель между 05.07 и 13.08, когда аварий не было. Два последних
|
||||||
|
# созданы 13.08 11:57:43 — ровно тот прогон, что упал с
|
||||||
|
# `no space left on device`.
|
||||||
|
# Поэтому чистим ЧУЖОЙ мусор НА ВХОДЕ: всё старше 6 часов заведомо не
|
||||||
|
# принадлежит живому прогону (самый долгий job — ~17 минут).
|
||||||
|
run: |
|
||||||
|
now=$(date +%s); reaped=0; kept=0
|
||||||
|
for c in $(docker ps -a --filter "name=^buildx_buildkit_builder-" --format '{{.Names}}'); do
|
||||||
|
created=$(docker inspect "$c" --format '{{.Created}}' 2>/dev/null) || continue
|
||||||
|
ts=$(date -d "$created" +%s 2>/dev/null) || continue
|
||||||
|
age_h=$(( (now - ts) / 3600 ))
|
||||||
|
if [ "$age_h" -ge 6 ]; then
|
||||||
|
echo "buildx: убираю протёкший билдер $c (возраст ${age_h} ч)"
|
||||||
|
docker rm -f "$c" >/dev/null && reaped=$((reaped+1))
|
||||||
|
docker volume rm "${c}_state" >/dev/null 2>&1 || true
|
||||||
|
else
|
||||||
|
kept=$((kept+1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "buildx: убрано протёкших ${reaped}, оставлено свежих ${kept}"
|
||||||
|
df -h / | tail -1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
id: buildx
|
id: buildx
|
||||||
|
|
@ -120,6 +148,34 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
||||||
|
|
||||||
|
- name: Подобрать протёкшие buildx-билдеры (#2869)
|
||||||
|
# Билдеры протекают НЕ на обычном падении, а когда job умирает аварийно
|
||||||
|
# (ENOSPC, OOM, отмена concurrency-группой): тогда ни post-step действия,
|
||||||
|
# ни завершающий шаг не выполняются — контейнер job'а уже мёртв.
|
||||||
|
# Замер 13.08: 20 висящих билдеров, созданных в 8 дат за три месяца
|
||||||
|
# (17.05, 30.05, 31.05, 13.06, 17.06, 20.06, 28.06, 05.07) — и ни одного
|
||||||
|
# за пять недель между 05.07 и 13.08, когда аварий не было. Два последних
|
||||||
|
# созданы 13.08 11:57:43 — ровно тот прогон, что упал с
|
||||||
|
# `no space left on device`.
|
||||||
|
# Поэтому чистим ЧУЖОЙ мусор НА ВХОДЕ: всё старше 6 часов заведомо не
|
||||||
|
# принадлежит живому прогону (самый долгий job — ~17 минут).
|
||||||
|
run: |
|
||||||
|
now=$(date +%s); reaped=0; kept=0
|
||||||
|
for c in $(docker ps -a --filter "name=^buildx_buildkit_builder-" --format '{{.Names}}'); do
|
||||||
|
created=$(docker inspect "$c" --format '{{.Created}}' 2>/dev/null) || continue
|
||||||
|
ts=$(date -d "$created" +%s 2>/dev/null) || continue
|
||||||
|
age_h=$(( (now - ts) / 3600 ))
|
||||||
|
if [ "$age_h" -ge 6 ]; then
|
||||||
|
echo "buildx: убираю протёкший билдер $c (возраст ${age_h} ч)"
|
||||||
|
docker rm -f "$c" >/dev/null && reaped=$((reaped+1))
|
||||||
|
docker volume rm "${c}_state" >/dev/null 2>&1 || true
|
||||||
|
else
|
||||||
|
kept=$((kept+1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "buildx: убрано протёкших ${reaped}, оставлено свежих ${kept}"
|
||||||
|
df -h / | tail -1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
id: buildx
|
id: buildx
|
||||||
|
|
@ -169,6 +225,34 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin
|
||||||
|
|
||||||
|
- name: Подобрать протёкшие buildx-билдеры (#2869)
|
||||||
|
# Билдеры протекают НЕ на обычном падении, а когда job умирает аварийно
|
||||||
|
# (ENOSPC, OOM, отмена concurrency-группой): тогда ни post-step действия,
|
||||||
|
# ни завершающий шаг не выполняются — контейнер job'а уже мёртв.
|
||||||
|
# Замер 13.08: 20 висящих билдеров, созданных в 8 дат за три месяца
|
||||||
|
# (17.05, 30.05, 31.05, 13.06, 17.06, 20.06, 28.06, 05.07) — и ни одного
|
||||||
|
# за пять недель между 05.07 и 13.08, когда аварий не было. Два последних
|
||||||
|
# созданы 13.08 11:57:43 — ровно тот прогон, что упал с
|
||||||
|
# `no space left on device`.
|
||||||
|
# Поэтому чистим ЧУЖОЙ мусор НА ВХОДЕ: всё старше 6 часов заведомо не
|
||||||
|
# принадлежит живому прогону (самый долгий job — ~17 минут).
|
||||||
|
run: |
|
||||||
|
now=$(date +%s); reaped=0; kept=0
|
||||||
|
for c in $(docker ps -a --filter "name=^buildx_buildkit_builder-" --format '{{.Names}}'); do
|
||||||
|
created=$(docker inspect "$c" --format '{{.Created}}' 2>/dev/null) || continue
|
||||||
|
ts=$(date -d "$created" +%s 2>/dev/null) || continue
|
||||||
|
age_h=$(( (now - ts) / 3600 ))
|
||||||
|
if [ "$age_h" -ge 6 ]; then
|
||||||
|
echo "buildx: убираю протёкший билдер $c (возраст ${age_h} ч)"
|
||||||
|
docker rm -f "$c" >/dev/null && reaped=$((reaped+1))
|
||||||
|
docker volume rm "${c}_state" >/dev/null 2>&1 || true
|
||||||
|
else
|
||||||
|
kept=$((kept+1))
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "buildx: убрано протёкших ${reaped}, оставлено свежих ${kept}"
|
||||||
|
df -h / | tail -1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
id: buildx
|
id: buildx
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue