From 1ceeb191eae64318bc076c0018ea1e53ae22139f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=B5=E5=BA=94?= Date: Sun, 12 Jul 2026 01:39:29 +0800 Subject: [PATCH] ci: re-register all 3 runners with unified labels --- .gitea/workflows/runner-reregister.yml | 150 +++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 .gitea/workflows/runner-reregister.yml diff --git a/.gitea/workflows/runner-reregister.yml b/.gitea/workflows/runner-reregister.yml new file mode 100644 index 000000000..1b25b5c45 --- /dev/null +++ b/.gitea/workflows/runner-reregister.yml @@ -0,0 +1,150 @@ +name: Runner Re-register All +on: + push: + branches: + - ci/runner-fix + +jobs: + reregister: + runs-on: host + steps: + - name: 全部删除并重新注册3个runner(统一标签) + run: | + set -e + CI_DIR="/var/lib/xiaoxia-ci" + ACT_BIN="$CI_DIR/act_runner" + GITEA_URL="https://git.xiaoxiajianji.com" + REG_TOKEN="ZMFH02WcdElay5ATmhhQYe1WNTESO9XMXcF0H9Tj" + LABELS="saas,runtime-builder,host,ubuntu-latest" + + echo "========== 1. 停止所有runner服务 ==========" + systemctl stop act_runner.service act_runner-2.service act_runner-3.service 2>&1 || true + sleep 3 + # 确保进程全死 + pkill -f "act_runner daemon" 2>/dev/null || true + sleep 2 + echo "已停止所有runner" + + echo "" + echo "========== 2. 清理所有旧runner配置 ==========" + # 备份旧配置 + cd "$CI_DIR" + [ -f .runner ] && cp .runner .runner.bak.main + [ -f runner-2/.runner ] && cp runner-2/.runner runner-2/.runner.bak + [ -f runner-3/.runner ] && cp runner-3/.runner runner-3/.runner.bak + + # 删除旧配置(强制重新注册) + rm -f .runner runner-2/.runner runner-3/.runner + echo "旧配置已删除并备份" + + echo "" + echo "========== 3. 用统一标签重新注册主runner ==========" + cd "$CI_DIR" + $ACT_BIN register \ + --instance "$GITEA_URL" \ + --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner" \ + --labels "$LABELS" \ + --no-interactive 2>&1 + echo "主runner注册完成" + + echo "" + echo "========== 4. 用统一标签重新注册 runner-2 ==========" + cd "$CI_DIR/runner-2" + $ACT_BIN register \ + --instance "$GITEA_URL" \ + --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner-2" \ + --labels "$LABELS" \ + --no-interactive 2>&1 + echo "runner-2注册完成" + + echo "" + echo "========== 5. 用统一标签重新注册 runner-3 ==========" + cd "$CI_DIR/runner-3" + $ACT_BIN register \ + --instance "$GITEA_URL" \ + --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner-3" \ + --labels "$LABELS" \ + --no-interactive 2>&1 + echo "runner-3注册完成" + + echo "" + echo "========== 6. 验证新配置 ==========" + for d in "$CI_DIR" "$CI_DIR/runner-2" "$CI_DIR/runner-3"; do + echo "--- $d ---" + cat "$d/.runner" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'name={d[\"name\"]} labels={d[\"labels\"]}')" 2>/dev/null || echo "read failed" + done + + echo "" + echo "========== 7. 启动所有runner服务 ==========" + systemctl start act_runner.service act_runner-2.service act_runner-3.service + sleep 8 + + for s in act_runner.service act_runner-2.service act_runner-3.service; do + status=$(systemctl is-active $s 2>/dev/null || echo "unknown") + echo "$s: $status" + done + + echo "" + echo "========== 8. 验证服务端runner状态(等15秒连接)==========" + sleep 15 + python3 << 'PYEOF' +import urllib.request, json, ssl + +ctx = ssl.create_default_context() +ctx.check_hostname = False +ctx.verify_mode = ssl.CERT_NONE + +req = urllib.request.Request( + "https://git.xiaoxiajianji.com/api/v1/repos/xiaoxia/xiaoxia-saas/actions/runners?limit=50", + headers={"Authorization": "token 1f8058d097e3942a9ed31c44382baf7f08311272"} +) +resp = urllib.request.urlopen(req, context=ctx) +data = json.loads(resp.read()) + +online = [r for r in data.get("runners", []) if r["status"] == "online"] +offline = [r for r in data.get("runners", []) if r["status"] == "offline"] + +print(f"在线runner: {len(online)}") +for r in online: + labels = [l["name"] for l in r["labels"]] + print(f" ✅ id={r['id']} {r['name']} labels={labels}") + +print(f"\n离线runner: {len(offline)}") +if len(offline) > 0: + # 删除所有offline的 + deleted = 0 + for r in offline: + del_req = urllib.request.Request( + f"https://git.xiaoxiajianji.com/api/v1/repos/xiaoxia/xiaoxia-saas/actions/runners/{r['id']}", + headers={"Authorization": "token 1f8058d097e3942a9ed31c44382baf7f08311272"}, + method="DELETE" + ) + try: + urllib.request.urlopen(del_req, context=ctx) + deleted += 1 + except: + pass + print(f" 已清理 {deleted} 个离线runner") + +# 再查一遍 +req2 = urllib.request.Request( + "https://git.xiaoxiajianji.com/api/v1/repos/xiaoxia/xiaoxia-saas/actions/runners?limit=50", + headers={"Authorization": "token 1f8058d097e3942a9ed31c44382baf7f08311272"} +) +resp2 = urllib.request.urlopen(req2, context=ctx) +data2 = json.loads(resp2.read()) +final_online = [r for r in data2.get("runners", []) if r["status"] == "online"] +final_offline = [r for r in data2.get("runners", []) if r["status"] == "offline"] +print(f"\n最终状态:在线 {len(final_online)} / 离线 {len(final_offline)}") + +if len(final_online) == 3: + print("🎉 CI runner扩容完成!3个runner全部在线,标签统一") +else: + print(f"⚠️ 预期3个在线,实际{len(final_online)}个") +PYEOF + + echo "" + echo "========== 全部完成 =========="