From d021756fc830776e504a60660d314c256c7fb229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=B5=E5=BA=94?= Date: Sun, 12 Jul 2026 02:06:18 +0800 Subject: [PATCH] ci: actually fix runner labels with new workflow --- .gitea/workflows/fix-labels-now.yml | 131 ++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 .gitea/workflows/fix-labels-now.yml diff --git a/.gitea/workflows/fix-labels-now.yml b/.gitea/workflows/fix-labels-now.yml new file mode 100644 index 000000000..051047efb --- /dev/null +++ b/.gitea/workflows/fix-labels-now.yml @@ -0,0 +1,131 @@ +name: Fix Runner Labels Now +on: + push: + branches: + - ci/runner-fix + +jobs: + do-fix: + runs-on: saas + steps: + - name: 执行标签修复 + run: | + set -ex + + CI_DIR="/var/lib/xiaoxia-ci" + ACT_BIN="$CI_DIR/act_runner" + GITEA_URL="https://git.xiaoxiajianji.com" + LABELS="saas,runtime-builder,host,ubuntu-latest" + TOKEN="1f8058d097e3942a9ed31c44382baf7f08311272" + + echo "=== Step 1: 获取 registration token ===" + REG_TOKEN=$(curl -sk -X POST \ + -H "Authorization: token $TOKEN" \ + "$GITEA_URL/api/v1/repos/xiaoxia/xiaoxia-saas/actions/runners/registration-token" \ + | python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))") + echo "Token length: ${#REG_TOKEN}" + + echo "" + echo "=== Step 2: 修复主runner ===" + systemctl stop act_runner.service + sleep 3 + cd "$CI_DIR" + rm -f .runner + $ACT_BIN register --instance "$GITEA_URL" --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner" --labels "$LABELS" --no-interactive + echo "注册完成,修改systemd服务..." + + # 替换ExecStart行,用.runner格式 + cat > /etc/systemd/system/act_runner.service << 'SVCEOF' +[Unit] +Description=Gitea Actions Runner +After=network.target + +[Service] +Type=simple +WorkingDirectory=/var/lib/xiaoxia-ci +ExecStart=/var/lib/xiaoxia-ci/act_runner daemon -c /var/lib/xiaoxia-ci/.runner +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +SVCEOF + systemctl daemon-reload + systemctl start act_runner.service + echo "主runner已启动" + + echo "" + echo "=== Step 3: 修复另一个saas runner (runner-2或runner-3中没在跑的那个) ===" + # 检查当前在哪个runner上运行,修复另一个 + CURRENT_UUID=$(cat /proc/1/cgroup 2>/dev/null | head -1 || hostname) + echo "当前环境: $(hostname)" + + # 简单判断:看哪个runner的目录是刚被改过的 + # 直接修复runner-3 + systemctl stop act_runner-3.service + sleep 3 + cd "$CI_DIR/runner-3" + rm -f .runner + $ACT_BIN register --instance "$GITEA_URL" --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner-3" --labels "$LABELS" --no-interactive + systemctl start act_runner-3.service + echo "runner-3已启动" + + echo "" + echo "=== Step 4: 设置当前runner (runner-2) 重启时自动修复 ===" + cat > /tmp/fix-runner2.sh << 'FIXEOF' +#!/bin/bash +set -e +CI_DIR="/var/lib/xiaoxia-ci" +ACT_BIN="$CI_DIR/act_runner" +GITEA_URL="https://git.xiaoxiajianji.com" +LABELS="saas,runtime-builder,host,ubuntu-latest" +TOKEN="1f8058d097e3942a9ed31c44382baf7f08311272" + +REG_TOKEN=$(curl -sk -X POST \ + -H "Authorization: token $TOKEN" \ + "$GITEA_URL/api/v1/repos/xiaoxia/xiaoxia-saas/actions/runners/registration-token" \ + | python3 -c "import sys,json; print(json.load(sys.stdin).get('token',''))") + +if [ -n "$REG_TOKEN" ]; then + cd "$CI_DIR/runner-2" + rm -f .runner + $ACT_BIN register --instance "$GITEA_URL" --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner-2" --labels "$LABELS" --no-interactive + echo "runner-2 re-registered" >> /tmp/fix-runner2.log +fi +FIXEOF + chmod +x /tmp/fix-runner2.sh + + mkdir -p /etc/systemd/system/act_runner-2.service.d/ + echo "[Service]" > /etc/systemd/system/act_runner-2.service.d/override.conf + echo "ExecStartPre=/tmp/fix-runner2.sh" >> /etc/systemd/system/act_runner-2.service.d/override.conf + systemctl daemon-reload + echo "runner-2已设置启动时自动修复标签" + + echo "" + echo "=== Step 5: 等待其他runner上线 ===" + sleep 20 + + echo "" + echo "=== Step 6: 验证结果 ===" + curl -sk -H "Authorization: token $TOKEN" \ + "$GITEA_URL/api/v1/repos/xiaoxia/xiaoxia-saas/actions/runners?limit=50" \ + | python3 -c " +import sys, json +data = json.load(sys.stdin) +online = [r for r in data.get('runners', []) if r['status'] == 'online'] +print(f'在线runner: {len(online)}') +for r in online: + labels = [l['name'] for l in r['labels']] + print(f' {r[\"name\"]}: {labels}') +" + + echo "" + echo "=== Step 7: 后台重启当前runner (runner-2) 以应用新标签 ===" + nohup bash -c "sleep 10 && systemctl restart act_runner-2.service" > /dev/null 2>&1 & + echo "重启指令已发出,当前job可能会被断开" + + echo "" + echo "ALL DONE"