diff --git a/.gitea/workflows/register-runners.yml b/.gitea/workflows/register-runners.yml index 2c5bb77a4..65fd70571 100644 --- a/.gitea/workflows/register-runners.yml +++ b/.gitea/workflows/register-runners.yml @@ -3,11 +3,89 @@ on: workflow_dispatch: jobs: - register: + register-on-host: runs-on: saas steps: - - uses: actions/checkout@v3 - - name: register-6-runners + - name: register-6-saas-runners run: | - chmod +x register_runners.sh - bash register_runners.sh + # 通过 nsenter 进入宿主机执行注册 + docker run --rm --privileged --pid=host alpine nsenter -t 1 -m -u -n -i sh -c ' + set -e + echo "=== Host Info ===" + hostname + ls /opt/act-runner/ 2>/dev/null || echo "no /opt/act-runner" + + # 找act_runner二进制 + ACT_RUNNER="" + for p in /opt/act-runner/runner-1/act_runner /opt/act-runner/runner-2/act_runner /usr/local/bin/act_runner; do + if [ -f "$p" ]; then + ACT_RUNNER="$p" + echo "Found act_runner: $p" + break + fi + done + + if [ -z "$ACT_RUNNER" ]; then + echo "act_runner not found, searching..." + find /opt -name act_runner -type f 2>/dev/null | head -5 + exit 1 + fi + + # 检测是否是新服务器(有5个以上runner目录) + RUNNER_COUNT=$(find /opt/act-runner -maxdepth 1 -type d -name "runner-*" 2>/dev/null | wc -l) + echo "Existing runner dirs: $RUNNER_COUNT" + + if [ "$RUNNER_COUNT" -lt 5 ]; then + echo "Not the new server, skipping" + exit 0 + fi + + echo "=== New server detected! Registering 6 repo-level runners ===" + + REPO_TOKEN="ZMFH02WcdElay5ATmhhQYe1WNTESO9XMXcF0H9Tj" + GITEA_URL="https://git.xiaoxiajianji.com" + BASE_DIR="/opt/act-runner" + LABELS="saas,runtime-builder,host,ubuntu-latest" + + for i in 6 7 8 9 10 11; do + RUNNER_DIR="${BASE_DIR}/saas-runner-${i}" + echo "--- saas-runner-${i} ---" + + mkdir -p "$RUNNER_DIR" + cd "$RUNNER_DIR" + + $ACT_RUNNER register \ + --instance "$GITEA_URL" \ + --token "$REPO_TOKEN" \ + --name "saas-runner-${i}" \ + --labels "$LABELS" \ + --no-interactive 2>&1 + + # 创建systemd服务 + cat > /etc/systemd/system/gitea-saas-runner-${i}.service << EOF +[Unit] +Description=Gitea Actions SAAS Runner ${i} +After=network.target + +[Service] +Type=simple +WorkingDirectory=${RUNNER_DIR} +ExecStart=${ACT_RUNNER} daemon +Restart=always +RestartSec=5 +User=root + +[Install] +WantedBy=multi-user.target +EOF + + systemctl daemon-reload + systemctl enable gitea-saas-runner-${i} + systemctl start gitea-saas-runner-${i} + echo "Started saas-runner-${i}" + done + + echo "=== DONE ===" + systemctl status gitea-saas-runner-6 --no-pager | head -10 + echo "..." + '