135 lines
4.0 KiB
Bash
135 lines
4.0 KiB
Bash
#!/bin/bash
|
||
set -e
|
||
|
||
echo "==================================="
|
||
echo "Gitea Runner Container Starting..."
|
||
echo "==================================="
|
||
|
||
# 定义路径
|
||
PERSISTENT_BIN="/data/bin"
|
||
RUNNER_PATH="$PERSISTENT_BIN/act_runner"
|
||
SYSTEM_LINK="/usr/local/bin/act_runner"
|
||
|
||
# 创建必要目录
|
||
mkdir -p /data/runners
|
||
mkdir -p "$PERSISTENT_BIN"
|
||
mkdir -p /var/log/supervisor
|
||
mkdir -p /var/run
|
||
|
||
# 创建主 supervisor 配置文件
|
||
cat > /etc/supervisor/supervisord.conf <<EOF
|
||
[supervisord]
|
||
nodaemon=true
|
||
logfile=/var/log/supervisor/supervisord.log
|
||
pidfile=/var/run/supervisord.pid
|
||
|
||
[unix_http_server]
|
||
file=/var/run/supervisor.sock
|
||
chmod=0700
|
||
|
||
[supervisorctl]
|
||
serverurl=unix:///var/run/supervisor.sock
|
||
|
||
[rpcinterface:supervisor]
|
||
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
|
||
|
||
[include]
|
||
files=/etc/supervisor/conf.d/*.conf
|
||
EOF
|
||
|
||
# 检查持久化目录中的 act_runner
|
||
if [ -f "$RUNNER_PATH" ]; then
|
||
echo "✓ Found act_runner in persistent storage"
|
||
echo " Location: $RUNNER_PATH"
|
||
|
||
# 创建软链接到系统路径(如果不存在)
|
||
if [ ! -L "$SYSTEM_LINK" ] || [ ! -e "$SYSTEM_LINK" ]; then
|
||
ln -sf "$RUNNER_PATH" "$SYSTEM_LINK"
|
||
echo " Created system link: $SYSTEM_LINK -> $RUNNER_PATH"
|
||
fi
|
||
|
||
# 验证版本
|
||
RUNNER_VERSION=$("$SYSTEM_LINK" --version 2>/dev/null || echo "unknown")
|
||
echo " Version: $RUNNER_VERSION"
|
||
elif [ -f "$SYSTEM_LINK" ]; then
|
||
# 旧版本可能在系统路径,迁移到持久化目录
|
||
echo "⚠ Found act_runner in system path, migrating to persistent storage..."
|
||
cp "$SYSTEM_LINK" "$RUNNER_PATH"
|
||
chmod +x "$RUNNER_PATH"
|
||
ln -sf "$RUNNER_PATH" "$SYSTEM_LINK"
|
||
echo " ✓ Migrated to: $RUNNER_PATH"
|
||
else
|
||
# 没有找到 act_runner
|
||
echo "⚠ act_runner not installed yet!"
|
||
echo ""
|
||
echo "Please run the setup script first:"
|
||
echo " docker-compose exec gitea-runner /data/setup.sh"
|
||
echo ""
|
||
echo "This will download and install the Gitea Runner to persistent storage."
|
||
echo "Container is waiting..."
|
||
|
||
# 等待 act_runner 安装
|
||
while [ ! -f "$RUNNER_PATH" ] && [ ! -f "$SYSTEM_LINK" ]; do
|
||
sleep 10
|
||
done
|
||
|
||
# 再次检查并创建链接
|
||
if [ -f "$RUNNER_PATH" ]; then
|
||
ln -sf "$RUNNER_PATH" "$SYSTEM_LINK"
|
||
echo "✓ act_runner detected and linked!"
|
||
elif [ -f "$SYSTEM_LINK" ]; then
|
||
cp "$SYSTEM_LINK" "$RUNNER_PATH"
|
||
ln -sf "$RUNNER_PATH" "$SYSTEM_LINK"
|
||
echo "✓ act_runner detected and migrated!"
|
||
fi
|
||
fi
|
||
|
||
# 为每个已注册的 runner 创建 supervisor 配置
|
||
echo ""
|
||
echo "Scanning for registered runners..."
|
||
RUNNER_COUNT=0
|
||
|
||
if [ -d "/data/runners" ]; then
|
||
for runner_dir in /data/runners/*/; do
|
||
if [ -d "$runner_dir" ]; then
|
||
runner_name=$(basename "$runner_dir")
|
||
|
||
if [ -f "$runner_dir/.runner" ] && [ -f "$runner_dir/config.yaml" ]; then
|
||
echo "Found runner: $runner_name"
|
||
|
||
# 创建该 runner 的 supervisor 配置
|
||
cat > "/etc/supervisor/conf.d/runner-${runner_name}.conf" <<EOF
|
||
[program:runner-${runner_name}]
|
||
command=/usr/local/bin/act_runner daemon --config ${runner_dir}/config.yaml
|
||
directory=${runner_dir}
|
||
autostart=true
|
||
autorestart=true
|
||
stderr_logfile=/var/log/supervisor/runner-${runner_name}.err.log
|
||
stdout_logfile=/var/log/supervisor/runner-${runner_name}.out.log
|
||
user=root
|
||
environment=HOME="/root"
|
||
EOF
|
||
RUNNER_COUNT=$((RUNNER_COUNT + 1))
|
||
fi
|
||
fi
|
||
done
|
||
fi
|
||
|
||
if [ $RUNNER_COUNT -eq 0 ]; then
|
||
echo "⚠ No runners registered yet!"
|
||
echo ""
|
||
echo "Please run the register script to add a runner:"
|
||
echo " docker-compose exec gitea-runner /data/register.sh"
|
||
echo ""
|
||
echo "Container will continue running and wait for runners..."
|
||
fi
|
||
|
||
echo "Total runners configured: $RUNNER_COUNT"
|
||
echo ""
|
||
echo "==================================="
|
||
echo "Starting Supervisor..."
|
||
echo "==================================="
|
||
|
||
# 启动 supervisord(使用主配置文件)
|
||
exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
|