diff --git a/.gitea/workflows/temp-cmd-agent-fix.yml b/.gitea/workflows/temp-cmd-agent-fix.yml index 43a0f5f91..406d22953 100644 --- a/.gitea/workflows/temp-cmd-agent-fix.yml +++ b/.gitea/workflows/temp-cmd-agent-fix.yml @@ -1,36 +1,172 @@ name: Temp CMD Agent Fix -on: - push: - branches: - - temp/cmd-agent-fix +on: push jobs: - fix-cmd-agent: - name: Fix CMD Agent Token + expand-runners: runs-on: host - timeout-minutes: 5 steps: - - name: Inspect CMD Agent + - name: Expand to 3 runner instances run: | - echo "=== /opt/xiaoxia-cmd-agent 目录 ===" - ls -la /opt/xiaoxia-cmd-agent/ + set +e + + echo "========== Step 1: 检查当前runner状态 ==========" + ps aux | grep "act_runner daemon" | grep -v grep + echo "当前runner进程数: $(ps aux | grep 'act_runner daemon' | grep -v grep | wc -l)" + echo "" - echo "=== 配置文件 ===" - find /opt/xiaoxia-cmd-agent -name "*.json" -o -name "*.yaml" -o -name "*.yml" -o -name "*.env" -o -name "*.conf" -o -name "config*" 2>/dev/null + echo "========== Step 2: 准备 runner-2 ==========" + if [ -d /var/lib/xiaoxia-ci-runner-2 ] && [ -f /var/lib/xiaoxia-ci-runner-2/.runner ]; then + echo "runner-2 已存在,跳过注册" + else + mkdir -p /var/lib/xiaoxia-ci-runner-2 + cp /var/lib/xiaoxia-ci/act_runner /var/lib/xiaoxia-ci-runner-2/act_runner + chmod +x /var/lib/xiaoxia-ci-runner-2/act_runner + + cat > /var/lib/xiaoxia-ci-runner-2/.runner-config.yaml << 'CFG' +log: + level: info +runner: + file: .runner + capacity: 1 + timeout: 3h + insecure: false + fetch_timeout: 5s + fetch_interval: 2s + labels: + - runtime-builder + - ubuntu-latest + - host +cache: + enabled: true + dir: /var/lib/xiaoxia-ci-runner-2/cache +host: + workdir_parent: /var/lib/xiaoxia-ci-runner-2/workspace +container: + network: host +CFG + + # 从现有runner提取注册token和地址 + REG_TOKEN=$(python3 -c "import json; d=json.load(open('/var/lib/xiaoxia-ci/.runner')); print(d['token'])" 2>/dev/null) + REG_ADDR=$(python3 -c "import json; d=json.load(open('/var/lib/xiaoxia-ci/.runner')); print(d['address'])" 2>/dev/null) + echo "注册地址: $REG_ADDR" + + cd /var/lib/xiaoxia-ci-runner-2 + ./act_runner register \ + --instance "$REG_ADDR" \ + --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner-2" \ + --labels "runtime-builder:host,ubuntu-latest:host,host:host" \ + --no-interactive 2>&1 + echo "runner-2 注册完成" + fi + echo "" - echo "=== Python 源码 ===" - find /opt/xiaoxia-cmd-agent -name "*.py" 2>/dev/null + echo "========== Step 3: 准备 runner-3 ==========" + if [ -d /var/lib/xiaoxia-ci-runner-3 ] && [ -f /var/lib/xiaoxia-ci-runner-3/.runner ]; then + echo "runner-3 已存在,跳过注册" + else + mkdir -p /var/lib/xiaoxia-ci-runner-3 + cp /var/lib/xiaoxia-ci/act_runner /var/lib/xiaoxia-ci-runner-3/act_runner + chmod +x /var/lib/xiaoxia-ci-runner-3/act_runner + + cat > /var/lib/xiaoxia-ci-runner-3/.runner-config.yaml << 'CFG' +log: + level: info +runner: + file: .runner + capacity: 1 + timeout: 3h + insecure: false + fetch_timeout: 5s + fetch_interval: 2s + labels: + - runtime-builder + - ubuntu-latest + - host +cache: + enabled: true + dir: /var/lib/xiaoxia-ci-runner-3/cache +host: + workdir_parent: /var/lib/xiaoxia-ci-runner-3/workspace +container: + network: host +CFG + + REG_TOKEN=$(python3 -c "import json; d=json.load(open('/var/lib/xiaoxia-ci/.runner')); print(d['token'])" 2>/dev/null) + REG_ADDR=$(python3 -c "import json; d=json.load(open('/var/lib/xiaoxia-ci/.runner')); print(d['address'])" 2>/dev/null) + + cd /var/lib/xiaoxia-ci-runner-3 + ./act_runner register \ + --instance "$REG_ADDR" \ + --token "$REG_TOKEN" \ + --name "xiaoxia-ci-runner-3" \ + --labels "runtime-builder:host,ubuntu-latest:host,host:host" \ + --no-interactive 2>&1 + echo "runner-3 注册完成" + fi + echo "" - echo "=== systemd service 文件 ===" - systemctl cat xiaoxia-cmd-agent.service 2>&1 || true - - - name: Read main source - run: | - echo "=== 主程序文件 ===" - cat /opt/xiaoxia-cmd-agent/*.py 2>/dev/null | head -200 || true + echo "========== Step 4: 创建 systemd 服务 ==========" + cat > /etc/systemd/system/act_runner-2.service << 'SVC' +[Unit] +Description=Gitea Actions Runner 2 +After=gitea.service 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=5s +User=root +[Install] +WantedBy=multi-user.target +SVC + + cat > /etc/systemd/system/act_runner-3.service << 'SVC' +[Unit] +Description=Gitea Actions Runner 3 +After=gitea.service 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=5s +User=root +[Install] +WantedBy=multi-user.target +SVC + + systemctl daemon-reload + echo "服务文件创建完成" + echo "" - echo "=== config 文件 ===" - cat /opt/xiaoxia-cmd-agent/config.json 2>/dev/null || cat /opt/xiaoxia-cmd-agent/config.yaml 2>/dev/null || cat /opt/xiaoxia-cmd-agent/.env 2>/dev/null || echo "未找到配置文件" + echo "========== Step 5: 启动新 runner ==========" + systemctl enable act_runner-2.service 2>&1 + systemctl enable act_runner-3.service 2>&1 + systemctl start act_runner-2.service 2>&1 + systemctl start act_runner-3.service 2>&1 + + sleep 8 + echo "" - echo "=== token 相关文件 ===" - find /opt/xiaoxia-cmd-agent -name "*token*" -o -name "*auth*" -o -name "*key*" 2>/dev/null + echo "========== Step 6: 验证结果 ==========" + echo "--- 进程数 ---" + ps aux | grep "act_runner daemon" | grep -v grep + echo "总进程数: $(ps aux | grep 'act_runner daemon' | grep -v grep | wc -l)" + echo "" + echo "--- 服务状态 ---" + systemctl is-active act_runner.service act_runner-2.service act_runner-3.service 2>&1 + echo "" + echo "--- 各runner注册信息 ---" + for d in /var/lib/xiaoxia-ci /var/lib/xiaoxia-ci-runner-2 /var/lib/xiaoxia-ci-runner-3; do + if [ -f "$d/.runner" ]; then + python3 -c " +import json +d = json.load(open('$d/.runner')) +print(f' $d: id={d[\"id\"]}, name={d[\"name\"]}') +" 2>/dev/null + fi + done + echo "" + echo "========== 扩容完成 =========="