diff --git a/.gitea/workflows/temp-runner-expand-v2.yml b/.gitea/workflows/temp-runner-expand-v2.yml new file mode 100644 index 000000000..72fa51662 --- /dev/null +++ b/.gitea/workflows/temp-runner-expand-v2.yml @@ -0,0 +1,176 @@ +name: Runner Expand v2 +on: push + +jobs: + expand: + runs-on: host + steps: + - name: Read config and expand runners + run: | + set -e + + echo "========== 1. 读取当前配置 ==========" + echo "--- .runner-config.yaml ---" + cat /var/lib/xiaoxia-ci/.runner-config.yaml + echo "" + echo "--- 版本 ---" + /var/lib/xiaoxia-ci/act_runner --version 2>&1 + echo "" + echo "--- 当前进程 ---" + ps aux | grep act_runner | grep -v grep + echo "" + echo "--- systemd service ---" + systemctl cat act_runner.service 2>&1 + echo "" + echo "--- 系统资源 ---" + echo "CPU: $(nproc) cores" + free -h | head -2 + df -h / | tail -1 + + echo "" + echo "========== 2. 分析扩容方案 ==========" + # 检查当前capacity + CAPACITY=$(grep -i 'capacity' /var/lib/xiaoxia-ci/.runner-config.yaml 2>/dev/null || echo "not found") + echo "当前capacity配置: $CAPACITY" + + # 检查当前runner数量 + RUNNER_COUNT=$(ps aux | grep "act_runner daemon" | grep -v grep | wc -l) + echo "当前runner进程数: $RUNNER_COUNT" + + echo "" + echo "========== 3. 执行扩容(多实例方案)==========" + # host模式capacity通常是1,所以用多实例方案 + # 创建runner-2和runner-3 + + RUNNER_BIN=/var/lib/xiaoxia-ci/act_runner + BASE_DIR=/var/lib/xiaoxia-ci + + # 先注册runner-2 + echo "--- 创建 runner-2 目录 ---" + mkdir -p /var/lib/xiaoxia-ci-runner-2 + cp $RUNNER_BIN /var/lib/xiaoxia-ci-runner-2/act_runner + chmod +x /var/lib/xiaoxia-ci-runner-2/act_runner + + echo "--- 注册 runner-2 ---" + # 从.runner文件提取注册信息 + cd /var/lib/xiaoxia-ci-runner-2 + + # 读取现有注册信息 + RUNNER_FILE="$BASE_DIR/.runner" + if [ -f "$RUNNER_FILE" ]; then + echo "现有.runner文件内容(脱敏):" + cat "$RUNNER_FILE" | python3 -c " +import json, sys +try: + d = json.load(sys.stdin) + # 只显示非敏感字段 + safe = {k:v for k,v in d.items() if k not in ['token','password','secret']} + print(json.dumps(safe, indent=2)) +except: + print('not json, raw lines:') + for line in sys.stdin: + if any(k in line.lower() for k in ['token','password','secret']): + print('*** sensitive ***') + else: + print(line.strip()) +" 2>&1 || true + fi + + # 获取注册token(从现有.runner文件) + # 注意:.runner文件格式可能不同,我们用重新注册的方式 + echo "" + echo "--- 尝试获取runner注册token ---" + # 从现有runner的配置里提取地址和token + REGISTER_ADDR=$(grep -i 'address\|url' /var/lib/xiaoxia-ci/.runner-config.yaml 2>/dev/null | head -1 | awk -F'[:]' '{print $2":"$3}' | xargs || echo "") + echo "注册地址(从配置推断): $REGISTER_ADDR" + + # 我们用另一种方式:复制现有runner的注册文件 + echo "" + echo "--- 方案:复制 runner 配置并启动新实例 ---" + echo "host模式下每个runner独立工作目录,复用同一注册信息" + + # 复制注册信息和配置 + cp /var/lib/xiaoxia-ci/.runner /var/lib/xiaoxia-ci-runner-2/.runner 2>&1 || true + cp /var/lib/xiaoxia-ci/.runner-config.yaml /var/lib/xiaoxia-ci-runner-2/.runner-config.yaml 2>&1 || true + + # 修改工作目录 + cd /var/lib/xiaoxia-ci-runner-2 + if [ -f .runner-config.yaml ]; then + # 检查并修改cache和workspace路径 + echo "配置文件已复制" + fi + + # 创建runner-2的systemd服务 + echo "" + echo "--- 创建 runner-2 systemd service ---" + cat > /etc/systemd/system/act_runner-2.service << 'SVC' +[Unit] +Description=Gitea Actions Runner 2 +After=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=5 +User=root + +[Install] +WantedBy=multi-user.target +SVC + + echo "runner-2 service created" + + # runner-3同理 + echo "" + echo "--- 创建 runner-3 ---" + mkdir -p /var/lib/xiaoxia-ci-runner-3 + cp $RUNNER_BIN /var/lib/xiaoxia-ci-runner-3/act_runner + chmod +x /var/lib/xiaoxia-ci-runner-3/act_runner + cp /var/lib/xiaoxia-ci/.runner /var/lib/xiaoxia-ci-runner-3/.runner 2>&1 || true + cp /var/lib/xiaoxia-ci/.runner-config.yaml /var/lib/xiaoxia-ci-runner-3/.runner-config.yaml 2>&1 || true + + cat > /etc/systemd/system/act_runner-3.service << 'SVC' +[Unit] +Description=Gitea Actions Runner 3 +After=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=5 +User=root + +[Install] +WantedBy=multi-user.target +SVC + + echo "runner-3 service created" + + # 重新加载并启动 + echo "" + echo "--- 启动新 runner ---" + systemctl daemon-reload + systemctl enable act_runner-2.service act_runner-3.service 2>&1 || true + systemctl start act_runner-2.service 2>&1 || echo "runner-2 start failed" + systemctl start act_runner-3.service 2>&1 || echo "runner-3 start failed" + + sleep 3 + + echo "" + echo "========== 4. 验证扩容结果 ==========" + echo "--- 进程数 ---" + ps aux | grep "act_runner daemon" | grep -v grep + echo "" + echo "--- 服务状态 ---" + systemctl status act_runner-2.service 2>&1 | head -5 + echo "..." + systemctl status act_runner-3.service 2>&1 | head -5 + echo "" + echo "--- 等待10秒后再检查 ---" + sleep 10 + ps aux | grep "act_runner daemon" | grep -v grep | wc -l + echo "个act_runner进程在运行"