v2: use nsenter to register on host

This commit is contained in:
2026-07-13 17:06:57 +08:00
parent 2e4ac7abba
commit d92eeeecbd
+83 -5
View File
@@ -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 "..."
'