121 lines
3.0 KiB
Bash
121 lines
3.0 KiB
Bash
#!/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
|