From e968e2f7408dbdb290ae705fa80cfdfc6e35e134 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 13 Jul 2026 17:28:28 +0800 Subject: [PATCH] v5: local register on new server --- local_register.sh | 120 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 local_register.sh diff --git a/local_register.sh b/local_register.sh new file mode 100644 index 000000000..6d1f65af4 --- /dev/null +++ b/local_register.sh @@ -0,0 +1,120 @@ +#!/bin/sh +# 通过Docker nsenter进入宿主机,判断是否新服务器,是就本地注册 + +docker run --rm --privileged --pid=host alpine nsenter -t 1 -m -u -n -i sh << 'HOSTCMD' +set +e + +echo "=== Host Info ===" +hostname +echo "IPs:" +ip -4 addr show | grep inet | awk '{print $2}' + +# 判断是不是新服务器:有 /opt/act-runner/runner-5 目录,且hostname包含特定特征 +IS_NEW_SERVER=0 +if [ -d "/opt/act-runner/runner-5" ]; then + IS_NEW_SERVER=1 + echo "DETECTED: NEW CI SERVER (has 5 runner dirs)" +elif hostname | grep -qi "new\|runner\|ci"; then + # 其他判断条件 + echo "POSSIBLE new server based on hostname" +fi + +if [ "$IS_NEW_SERVER" -eq 0 ]; then + echo "NOT the new server, skipping registration" + echo "Looking for act_runner..." + find /opt /var -name act_runner -type f 2>/dev/null | head -5 + echo "DONE (skipped)" + exit 0 +fi + +echo "" +echo "=== Finding act_runner binary ===" +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: $p" + break + fi +done + +if [ -z "$ACT_RUNNER" ]; then + echo "Searching whole system..." + ACT_RUNNER=$(find /opt /usr -name act_runner -type f 2>/dev/null | head -1) +fi + +if [ -z "$ACT_RUNNER" ]; then + echo "ERROR: act_runner not found!" + exit 1 +fi + +echo "Version: $($ACT_RUNNER --version 2>&1)" + +echo "" +echo "=== Registering 6 SAAS repo-level runners ===" + +REPO_TOKEN="ZMFH02WcdElay5ATmhhQYe1WNTESO9XMXcF0H9Tj" +GITEA_URL="https://git.xiaoxiajianji.com" +BASE_DIR="/opt/act-runner" + +for i in 6 7 8 9 10 11; do + RUNNER_DIR="${BASE_DIR}/saas-runner-${i}" + echo "--- saas-runner-${i} ---" + + # 如果已经注册过就跳过 + if [ -f "${RUNNER_DIR}/.runner" ]; then + echo "Already registered, skipping" + continue + fi + + mkdir -p "$RUNNER_DIR" + cd "$RUNNER_DIR" + + $ACT_RUNNER register \ + --instance "$GITEA_URL" \ + --token "$REPO_TOKEN" \ + --name "saas-runner-${i}" \ + --labels "saas,runtime-builder,host,ubuntu-latest" \ + --no-interactive 2>&1 + + if [ $? -eq 0 ]; then + echo "Registration SUCCESS" + else + echo "Registration FAILED" + continue + fi + + # 创建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 2>&1 + systemctl enable gitea-saas-runner-${i} 2>&1 + systemctl start gitea-saas-runner-${i} 2>&1 + echo "Started gitea-saas-runner-${i}" + sleep 2 +done + +echo "" +echo "=== VERIFICATION ===" +echo "Systemd services:" +systemctl list-units --type=service | grep -i gitea +echo "" +echo "Runner directories:" +ls -la /opt/act-runner/ | grep saas + +echo "" +echo "=== REGISTRATION COMPLETE ===" +HOSTCMD