ci: re-register all 3 runners with unified labels
This commit is contained in:
@@ -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 "========== 全部完成 =========="
|
||||
Reference in New Issue
Block a user