commit 0e2d90da5cb4d66178aab7845cf1e196c4bf278e Author: xiaoxia Date: Sun Jul 12 00:01:03 2026 +0800 temp: expand runner to 3 instances diff --git a/.gitea/workflows/runner-expand.yml b/.gitea/workflows/runner-expand.yml new file mode 100644 index 000000000..7e8dda915 --- /dev/null +++ b/.gitea/workflows/runner-expand.yml @@ -0,0 +1,125 @@ +name: Runner Expander +on: push + +jobs: + expand: + runs-on: host + steps: + - name: Expand to 3 runner instances + run: | + set +e + echo "=== 当前runner进程数: $(ps aux | grep 'act_runner daemon' | grep -v grep | wc -l) ===" + + # 注册 runner-2 + if [ ! -f /var/lib/xiaoxia-ci-runner-2/.runner ]; then + mkdir -p /var/lib/xiaoxia-ci-runner-2 + cp /var/lib/xiaoxia-ci/act_runner /var/lib/xiaoxia-ci-runner-2/act_runner + chmod +x /var/lib/xiaoxia-ci-runner-2/act_runner + cat > /var/lib/xiaoxia-ci-runner-2/.runner-config.yaml << 'CFG' +log: + level: info +runner: + file: .runner + capacity: 1 + timeout: 3h + insecure: false + fetch_timeout: 5s + fetch_interval: 2s + labels: + - runtime-builder + - ubuntu-latest + - host +cache: + enabled: true + dir: /var/lib/xiaoxia-ci-runner-2/cache +host: + workdir_parent: /var/lib/xiaoxia-ci-runner-2/workspace +container: + network: host +CFG + TOK=$(python3 -c "import json; print(json.load(open('/var/lib/xiaoxia-ci/.runner'))['token'])") + ADDR=$(python3 -c "import json; print(json.load(open('/var/lib/xiaoxia-ci/.runner'))['address'])") + cd /var/lib/xiaoxia-ci-runner-2 + ./act_runner register --instance "$ADDR" --token "$TOK" --name "xiaoxia-ci-runner-2" --labels "runtime-builder:host,ubuntu-latest:host,host:host" --no-interactive 2>&1 + fi + + # 注册 runner-3 + if [ ! -f /var/lib/xiaoxia-ci-runner-3/.runner ]; then + mkdir -p /var/lib/xiaoxia-ci-runner-3 + cp /var/lib/xiaoxia-ci/act_runner /var/lib/xiaoxia-ci-runner-3/act_runner + chmod +x /var/lib/xiaoxia-ci-runner-3/act_runner + cat > /var/lib/xiaoxia-ci-runner-3/.runner-config.yaml << 'CFG' +log: + level: info +runner: + file: .runner + capacity: 1 + timeout: 3h + insecure: false + fetch_timeout: 5s + fetch_interval: 2s + labels: + - runtime-builder + - ubuntu-latest + - host +cache: + enabled: true + dir: /var/lib/xiaoxia-ci-runner-3/cache +host: + workdir_parent: /var/lib/xiaoxia-ci-runner-3/workspace +container: + network: host +CFG + TOK=$(python3 -c "import json; print(json.load(open('/var/lib/xiaoxia-ci/.runner'))['token'])") + ADDR=$(python3 -c "import json; print(json.load(open('/var/lib/xiaoxia-ci/.runner'))['address'])") + cd /var/lib/xiaoxia-ci-runner-3 + ./act_runner register --instance "$ADDR" --token "$TOK" --name "xiaoxia-ci-runner-3" --labels "runtime-builder:host,ubuntu-latest:host,host:host" --no-interactive 2>&1 + fi + + # systemd 服务 + cat > /etc/systemd/system/act_runner-2.service << 'SVC' +[Unit] +Description=Gitea Actions Runner 2 +After=gitea.service network.target +[Service] +Type=simple +WorkingDirectory=/var/lib/xiaoxia-ci-runner-2 +ExecStart=/var/lib/xiaoxia-ci-runner-2/act_runner daemon --config .runner-config.yaml +Restart=always +RestartSec=5s +User=root +[Install] +WantedBy=multi-user.target +SVC + cat > /etc/systemd/system/act_runner-3.service << 'SVC' +[Unit] +Description=Gitea Actions Runner 3 +After=gitea.service network.target +[Service] +Type=simple +WorkingDirectory=/var/lib/xiaoxia-ci-runner-3 +ExecStart=/var/lib/xiaoxia-ci-runner-3/act_runner daemon --config .runner-config.yaml +Restart=always +RestartSec=5s +User=root +[Install] +WantedBy=multi-user.target +SVC + systemctl daemon-reload + systemctl enable act_runner-2.service act_runner-3.service 2>&1 + systemctl start act_runner-2.service 2>&1 + systemctl start act_runner-3.service 2>&1 + sleep 10 + + echo "" + echo "=== 验证 ===" + echo "进程数: $(ps aux | grep 'act_runner daemon' | grep -v grep | wc -l)" + ps aux | grep 'act_runner daemon' | grep -v grep + echo "" + systemctl is-active act_runner.service act_runner-2.service act_runner-3.service 2>&1 + echo "" + for d in /var/lib/xiaoxia-ci /var/lib/xiaoxia-ci-runner-2 /var/lib/xiaoxia-ci-runner-3; do + [ -f "$d/.runner" ] && python3 -c "import json; d=json.load(open('$d/.runner')); print(f' {d[\"name\"]}: id={d[\"id\"]}')" 2>/dev/null + done + echo "" + echo "=== DONE ==="