diff --git a/.gitea/workflows/runner-fix.yml b/.gitea/workflows/runner-fix.yml index 2928c9bd2..d1aa525cd 100644 --- a/.gitea/workflows/runner-fix.yml +++ b/.gitea/workflows/runner-fix.yml @@ -1,14 +1,14 @@ -name: Runner Fix - Unify Labels +name: Runner Fix - Final on: push: branches: - ci/runner-fix jobs: - fix-runners: - runs-on: saas + fix-all: + runs-on: runtime-builder steps: - - name: 重新注册主runner和runner-3 + - name: 统一所有runner标签 run: | set -e @@ -16,33 +16,31 @@ jobs: ACT_BIN="$CI_DIR/act_runner" GITEA_URL="https://git.xiaoxiajianji.com" LABELS="saas,runtime-builder,host,ubuntu-latest" + TOKEN="1f8058d097e3942a9ed31c44382baf7f08311272" echo "=== 获取 registration token ===" REG_TOKEN=$(curl -sk -X POST \ - -H "Authorization: token 1f8058d097e3942a9ed31c44382baf7f08311272" \ + -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: ${REG_TOKEN:0:10}..." - if [ -z "$REG_TOKEN" ]; then - echo "ERROR: 无法获取 registration token" - exit 1 - fi - echo "Token 获取成功: ${REG_TOKEN:0:8}..." - - # 修复主runner(它有runtime-builder标签,当前没在跑任务) + # 修复 runner-2 echo "" - echo "=== 修复主runner ===" - systemctl stop act_runner.service + echo "=== 修复 runner-2 ===" + systemctl stop act_runner-2.service sleep 2 - cd "$CI_DIR" + cd "$CI_DIR/runner-2" rm -f .runner $ACT_BIN register --instance "$GITEA_URL" --token "$REG_TOKEN" \ - --name "xiaoxia-ci-runner" --labels "$LABELS" --no-interactive - echo "注册完成,启动服务..." - systemctl start act_runner.service - echo "主runner已启动" + --name "xiaoxia-ci-runner-2" --labels "$LABELS" --no-interactive 2>&1 + # 确保systemd服务用 .runner 文件 + sed -i 's|daemon.*|daemon -c /var/lib/xiaoxia-ci/runner-2/.runner|' /etc/systemd/system/act_runner-2.service + systemctl daemon-reload + systemctl start act_runner-2.service + echo "runner-2 done" - # 修复runner-3(它有saas标签,可能没在跑任务) + # 修复 runner-3 echo "" echo "=== 修复 runner-3 ===" systemctl stop act_runner-3.service @@ -50,65 +48,58 @@ jobs: 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 - echo "注册完成,启动服务..." - systemctl start act_runner-3.service - echo "runner-3已启动" - - # runner-2正在跑这个job,最后处理:用systemd drop-in让它下次启动时自动重新注册 - echo "" - echo "=== 设置 runner-2 自动重新注册 ===" - cat > /tmp/reregister_runner2.sh << 'INNEREOF' -#!/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" - -REG_TOKEN=$(curl -sk -X POST \ - -H "Authorization: token 1f8058d097e3942a9ed31c44382baf7f08311272" \ - "$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 successfully" -fi -INNEREOF - chmod +x /tmp/reregister_runner2.sh - - mkdir -p /etc/systemd/system/act_runner-2.service.d/ - cat > /etc/systemd/system/act_runner-2.service.d/override.conf << 'OVERRIDE' -[Service] -ExecStartPre=/tmp/reregister_runner2.sh -OVERRIDE + --name "xiaoxia-ci-runner-3" --labels "$LABELS" --no-interactive 2>&1 + sed -i 's|daemon.*|daemon -c /var/lib/xiaoxia-ci/runner-3/.runner|' /etc/systemd/system/act_runner-3.service systemctl daemon-reload - echo "runner-2已设置启动时自动重新注册" + systemctl start act_runner-3.service + echo "runner-3 done" - # 等runner连上 - sleep 20 - - # 验证 + # 修复主runner(当前正在跑这个job,最后处理:先改配置再用nohup重启自己) echo "" - echo "=== 验证结果 ===" - curl -sk -H "Authorization: token 1f8058d097e3942a9ed31c44382baf7f08311272" \ + echo "=== 修复主runner(当前runner) ===" + cd "$CI_DIR" + # 先注册生成 .runner 文件 + rm -f .runner + $ACT_BIN register --instance "$GITEA_URL" --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner" --labels "$LABELS" --no-interactive 2>&1 + + # 修改systemd服务:从 .runner-config.yaml 改成 .runner + cat > /etc/systemd/system/act_runner.service << 'SVC' +[Unit] +Description=Gitea Actions Runner +After=network.target + +[Service] +WorkingDirectory=/var/lib/xiaoxia-ci +ExecStart=/var/lib/xiaoxia-ci/act_runner daemon -c /var/lib/xiaoxia-ci/.runner +Restart=always +RestartSec=5 +Type=simple + +[Install] +WantedBy=multi-user.target +SVC + systemctl daemon-reload + + echo "主runner配置已更新,准备重启(当前job会被断开)..." + + # 等runner-2和runner-3先连上,再重启自己 + sleep 25 + + # 后台重启自己 + nohup bash -c "sleep 3 && systemctl restart act_runner.service" > /dev/null 2>&1 & + + echo "重启指令已发出" + + # 验证当前状态 + 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)} 个') +print(f'当前在线: {len(online)} 个') for r in online: labels = [l['name'] for l in r['labels']] print(f' {r[\"name\"]}: {labels}') " - - # 最后:用nohup重启runner-2(这会断开当前job,但标签已经在另外两个上生效了) - echo "" - echo "重启 runner-2 以应用新标签(当前job会被断开)..." - nohup bash -c "sleep 5 && systemctl restart act_runner-2.service" > /dev/null 2>&1 & - echo "重启指令已发出"