v5: local register on new server

This commit is contained in:
2026-07-13 17:28:28 +08:00
parent 3c675a86ad
commit e968e2f740
+120
View File
@@ -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