Загрузка данных


sudo tee /usr/local/sbin/cleanup-gitlab-runner-docker >/dev/null <<'EOF'
#!/usr/bin/env bash
set -Eeuo pipefail

LOCK_FILE="/run/lock/gitlab-runner-docker-cleanup.lock"

# Не запускать две очистки одновременно.
exec 9>"${LOCK_FILE}"
flock -n 9 || exit 0

echo "=== GitLab Runner Docker cleanup ==="
echo "Time: $(date -Is)"

# Ничего не удалять, пока работает хотя бы один контейнер GitLab Runner.
if docker ps \
    --format '{{.Names}}' |
    grep -q '^runner-'
then
    echo "Active GitLab Runner containers found."
    echo "Cleanup skipped."
    exit 0
fi

echo
echo "Disk usage before cleanup:"
df -h /
docker system df

echo
echo "Removing stopped GitLab Runner containers..."

mapfile -t RUNNER_CONTAINERS < <(
    docker ps -aq \
        --filter 'name=runner-'
)

if [ "${#RUNNER_CONTAINERS[@]}" -gt 0 ]; then
    docker rm -f "${RUNNER_CONTAINERS[@]}" || true
else
    echo "No stopped runner containers."
fi

echo
echo "Removing unused GitLab Runner volumes..."

mapfile -t RUNNER_VOLUMES < <(
    docker volume ls -q |
    grep '^runner-' || true
)

if [ "${#RUNNER_VOLUMES[@]}" -gt 0 ]; then
    for volume in "${RUNNER_VOLUMES[@]}"; do
        echo "Removing volume: ${volume}"
        docker volume rm "${volume}" || true
    done
else
    echo "No runner volumes."
fi

echo
echo "Removing Docker build cache..."
docker builder prune -af || true

echo
echo "Removing dangling images..."
docker image prune -f || true

echo
echo "Removing unused networks..."
docker network prune -f || true

echo
echo "Disk usage after cleanup:"
df -h /
docker system df

echo
echo "Cleanup completed."
EOF

sudo chmod +x /usr/local/sbin/cleanup-gitlab-runner-docker

sudo docker ps \
    --format 'table {{.ID}}\t{{.Names}}\t{{.Status}}'

df -h /
sudo docker system df -v
sudo du -sh /var/lib/docker/volumes