temp: runner expand v2 - multi instance
This commit is contained in:
@@ -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进程在运行"
|
||||
Reference in New Issue
Block a user