/
easmith
/
gitverse-docker-runner
Обзор
Документация
Войти
/
easmith
/
gitverse-docker-runner
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
runner.sh
203 строки
7 KB
Eugene Smith
multi runner
06 фев 2026, 01:03
06 фев 2026, 01:03
390f68a
Код
Авторство
О чём код?
#!/bin/bash set -euo pipefail IMAGE_NAME="gitverse-runner" INSTANCE="${GITVERSE_INSTANCE:-https://gitverse.ru/sc}" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" RUNNERS_DIR="$SCRIPT_DIR/runners" require_name() { if [ -z "${1:-}" ]; then echo "❌ Runner name required. Usage: $0 $COMMAND <name>" exit 1 fi } all_runners() { if [ ! -d "$RUNNERS_DIR" ]; then return fi for d in "$RUNNERS_DIR"/*/; do [ -d "$d" ] && basename "$d" done } container_status() { local name="$1" local cname="gitverse-runner-${name}" local status status="$(docker inspect -f '{{.State.Status}}' "$cname" 2>/dev/null)" || true if [ -z "$status" ]; then echo "not created" else echo "$status" fi } COMMAND="${1:-help}" shift || true case "$COMMAND" in build) echo "▶ Building image..." docker build -t "$IMAGE_NAME" "$SCRIPT_DIR" echo "✅ Image built: $IMAGE_NAME" ;; register) RUNNER_NAME="${1:-}" require_name "$RUNNER_NAME" TOKEN="${2:-${GITVERSE_TOKEN:-}}" DISPLAY_NAME="${3:-$RUNNER_NAME}" if [ -z "$TOKEN" ]; then echo "❌ Usage: $0 register <name> <token> [display-name]" exit 1 fi DATA_DIR="$RUNNERS_DIR/$RUNNER_NAME" mkdir -p "$DATA_DIR" echo "▶ Registering runner '$RUNNER_NAME' (display name: '$DISPLAY_NAME')..." docker run --rm -it \ -v "$DATA_DIR:/runner" \ "$IMAGE_NAME" \ register --no-interactive \ --instance "$INSTANCE" \ --token "$TOKEN" \ --name "$DISPLAY_NAME" echo "✅ Runner '$RUNNER_NAME' registered" ;; start) if [ "${1:-}" = "--all" ]; then runners="$(all_runners)" if [ -z "$runners" ]; then echo "❌ No runners found in $RUNNERS_DIR" exit 1 fi for r in $runners; do echo "▶ Starting runner '$r'..." CONTAINER_NAME="gitverse-runner-${r}" DATA_DIR="$RUNNERS_DIR/$r" docker run -d \ --name "$CONTAINER_NAME" \ --restart unless-stopped \ -v "$DATA_DIR:/runner" \ -v /var/run/docker.sock:/var/run/docker.sock \ "$IMAGE_NAME" daemon echo "✅ Runner '$r' started" done else RUNNER_NAME="${1:-}" require_name "$RUNNER_NAME" CONTAINER_NAME="gitverse-runner-${RUNNER_NAME}" DATA_DIR="$RUNNERS_DIR/$RUNNER_NAME" if [ ! -d "$DATA_DIR" ]; then echo "❌ Runner '$RUNNER_NAME' not found. Register it first." exit 1 fi echo "▶ Starting runner '$RUNNER_NAME'..." docker run -d \ --name "$CONTAINER_NAME" \ --restart unless-stopped \ -v "$DATA_DIR:/runner" \ -v /var/run/docker.sock:/var/run/docker.sock \ "$IMAGE_NAME" daemon echo "✅ Runner '$RUNNER_NAME' started" fi ;; stop) if [ "${1:-}" = "--all" ]; then runners="$(all_runners)" if [ -z "$runners" ]; then echo "❌ No runners found in $RUNNERS_DIR" exit 1 fi for r in $runners; do CONTAINER_NAME="gitverse-runner-${r}" echo "▶ Stopping runner '$r'..." docker stop "$CONTAINER_NAME" 2>/dev/null && docker rm "$CONTAINER_NAME" 2>/dev/null || true echo "✅ Runner '$r' stopped" done else RUNNER_NAME="${1:-}" require_name "$RUNNER_NAME" CONTAINER_NAME="gitverse-runner-${RUNNER_NAME}" echo "▶ Stopping runner '$RUNNER_NAME'..." docker stop "$CONTAINER_NAME" && docker rm "$CONTAINER_NAME" echo "✅ Runner '$RUNNER_NAME' stopped" fi ;; rm) if [ "${1:-}" = "--all" ]; then runners="$(all_runners)" if [ -z "$runners" ]; then echo "❌ No runners found in $RUNNERS_DIR" exit 1 fi read -p "Remove ALL runner containers ($(echo $runners | tr '\n' ' '))? [y/N] " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then for r in $runners; do CONTAINER_NAME="gitverse-runner-${r}" echo "▶ Removing container '$CONTAINER_NAME'..." docker rm -f "$CONTAINER_NAME" 2>/dev/null || true echo "✅ Container '$CONTAINER_NAME' removed" done else echo "❌ Cancelled" fi else RUNNER_NAME="${1:-}" require_name "$RUNNER_NAME" CONTAINER_NAME="gitverse-runner-${RUNNER_NAME}" read -p "Remove container '$CONTAINER_NAME'? [y/N] " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then echo "▶ Removing container '$CONTAINER_NAME'..." docker rm -f "$CONTAINER_NAME" 2>/dev/null || true echo "✅ Container '$CONTAINER_NAME' removed" else echo "❌ Cancelled" fi fi ;; logs) RUNNER_NAME="${1:-}" require_name "$RUNNER_NAME" CONTAINER_NAME="gitverse-runner-${RUNNER_NAME}" docker logs -f "$CONTAINER_NAME" ;; list) runners="$(all_runners)" if [ -z "$runners" ]; then echo "No runners found. Register one with: $0 register <name> <token>" exit 0 fi printf "%-15s %-30s %s\n" "NAME" "CONTAINER" "STATUS" for r in $runners; do cname="gitverse-runner-${r}" status="$(container_status "$r")" printf "%-15s %-30s %s\n" "$r" "$cname" "$status" done ;; *) echo "GitVerse Runner" echo "" echo "Usage: $0 <command> <name> [args...]" echo " $0 <command> --all" echo "" echo "Commands:" echo " build Build Docker image" echo " register <name> <token> Register runner with GitVerse" echo " start <name> Start runner" echo " start --all Start all runners" echo " stop <name> Stop runner" echo " stop --all Stop all runners" echo " rm <name> Remove container (with confirmation)" echo " rm --all Remove all containers (with confirmation)" echo " logs <name> Show runner logs" echo " list List all runners and their status" ;; esac