temp: runner expand v2 - multi instance
Temp CMD Agent Fix / Fix CMD Agent Token (push) Successful in 0s
Read runner config / read-config (push) Successful in 0s
Temp CMD Agent Token Read / read-token (push) Successful in 0s
Runner Expansion / expand-runner (push) Successful in 6s

This commit is contained in:
xiaoxia
2026-07-11 23:31:52 +08:00
parent 28cf52f2f8
commit d9155e6ff4
+176
View File
@@ -0,0 +1,176 @@
name: Runner Expand v2
on: push
jobs:
expand:
runs-on: host
steps:
- name: Read config and expand runners
run: |
set -e
echo "========== 1. 读取当前配置 =========="
echo "--- .runner-config.yaml ---"
cat /var/lib/xiaoxia-ci/.runner-config.yaml
echo ""
echo "--- 版本 ---"
/var/lib/xiaoxia-ci/act_runner --version 2>&1
echo ""
echo "--- 当前进程 ---"
ps aux | grep act_runner | grep -v grep
echo ""
echo "--- systemd service ---"
systemctl cat act_runner.service 2>&1
echo ""
echo "--- 系统资源 ---"
echo "CPU: $(nproc) cores"
free -h | head -2
df -h / | tail -1
echo ""
echo "========== 2. 分析扩容方案 =========="
# 检查当前capacity
CAPACITY=$(grep -i 'capacity' /var/lib/xiaoxia-ci/.runner-config.yaml 2>/dev/null || echo "not found")
echo "当前capacity配置: $CAPACITY"
# 检查当前runner数量
RUNNER_COUNT=$(ps aux | grep "act_runner daemon" | grep -v grep | wc -l)
echo "当前runner进程数: $RUNNER_COUNT"
echo ""
echo "========== 3. 执行扩容(多实例方案)=========="
# host模式capacity通常是1,所以用多实例方案
# 创建runner-2和runner-3
RUNNER_BIN=/var/lib/xiaoxia-ci/act_runner
BASE_DIR=/var/lib/xiaoxia-ci
# 先注册runner-2
echo "--- 创建 runner-2 目录 ---"
mkdir -p /var/lib/xiaoxia-ci-runner-2
cp $RUNNER_BIN /var/lib/xiaoxia-ci-runner-2/act_runner
chmod +x /var/lib/xiaoxia-ci-runner-2/act_runner
echo "--- 注册 runner-2 ---"
# 从.runner文件提取注册信息
cd /var/lib/xiaoxia-ci-runner-2
# 读取现有注册信息
RUNNER_FILE="$BASE_DIR/.runner"
if [ -f "$RUNNER_FILE" ]; then
echo "现有.runner文件内容(脱敏):"
cat "$RUNNER_FILE" | python3 -c "
import json, sys
try:
d = json.load(sys.stdin)
# 只显示非敏感字段
safe = {k:v for k,v in d.items() if k not in ['token','password','secret']}
print(json.dumps(safe, indent=2))
except:
print('not json, raw lines:')
for line in sys.stdin:
if any(k in line.lower() for k in ['token','password','secret']):
print('*** sensitive ***')
else:
print(line.strip())
" 2>&1 || true
fi
# 获取注册token(从现有.runner文件)
# 注意:.runner文件格式可能不同,我们用重新注册的方式
echo ""
echo "--- 尝试获取runner注册token ---"
# 从现有runner的配置里提取地址和token
REGISTER_ADDR=$(grep -i 'address\|url' /var/lib/xiaoxia-ci/.runner-config.yaml 2>/dev/null | head -1 | awk -F'[:]' '{print $2":"$3}' | xargs || echo "")
echo "注册地址(从配置推断): $REGISTER_ADDR"
# 我们用另一种方式:复制现有runner的注册文件
echo ""
echo "--- 方案:复制 runner 配置并启动新实例 ---"
echo "host模式下每个runner独立工作目录,复用同一注册信息"
# 复制注册信息和配置
cp /var/lib/xiaoxia-ci/.runner /var/lib/xiaoxia-ci-runner-2/.runner 2>&1 || true
cp /var/lib/xiaoxia-ci/.runner-config.yaml /var/lib/xiaoxia-ci-runner-2/.runner-config.yaml 2>&1 || true
# 修改工作目录
cd /var/lib/xiaoxia-ci-runner-2
if [ -f .runner-config.yaml ]; then
# 检查并修改cache和workspace路径
echo "配置文件已复制"
fi
# 创建runner-2的systemd服务
echo ""
echo "--- 创建 runner-2 systemd service ---"
cat > /etc/systemd/system/act_runner-2.service << 'SVC'
[Unit]
Description=Gitea Actions Runner 2
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/lib/xiaoxia-ci-runner-2
ExecStart=/var/lib/xiaoxia-ci-runner-2/act_runner daemon --config .runner-config.yaml
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
SVC
echo "runner-2 service created"
# runner-3同理
echo ""
echo "--- 创建 runner-3 ---"
mkdir -p /var/lib/xiaoxia-ci-runner-3
cp $RUNNER_BIN /var/lib/xiaoxia-ci-runner-3/act_runner
chmod +x /var/lib/xiaoxia-ci-runner-3/act_runner
cp /var/lib/xiaoxia-ci/.runner /var/lib/xiaoxia-ci-runner-3/.runner 2>&1 || true
cp /var/lib/xiaoxia-ci/.runner-config.yaml /var/lib/xiaoxia-ci-runner-3/.runner-config.yaml 2>&1 || true
cat > /etc/systemd/system/act_runner-3.service << 'SVC'
[Unit]
Description=Gitea Actions Runner 3
After=network.target
[Service]
Type=simple
WorkingDirectory=/var/lib/xiaoxia-ci-runner-3
ExecStart=/var/lib/xiaoxia-ci-runner-3/act_runner daemon --config .runner-config.yaml
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
SVC
echo "runner-3 service created"
# 重新加载并启动
echo ""
echo "--- 启动新 runner ---"
systemctl daemon-reload
systemctl enable act_runner-2.service act_runner-3.service 2>&1 || true
systemctl start act_runner-2.service 2>&1 || echo "runner-2 start failed"
systemctl start act_runner-3.service 2>&1 || echo "runner-3 start failed"
sleep 3
echo ""
echo "========== 4. 验证扩容结果 =========="
echo "--- 进程数 ---"
ps aux | grep "act_runner daemon" | grep -v grep
echo ""
echo "--- 服务状态 ---"
systemctl status act_runner-2.service 2>&1 | head -5
echo "..."
systemctl status act_runner-3.service 2>&1 | head -5
echo ""
echo "--- 等待10秒后再检查 ---"
sleep 10
ps aux | grep "act_runner daemon" | grep -v grep | wc -l
echo "个act_runner进程在运行"