feat(gitea): 为 runner 创建添加前置条件检查

添加网络和硬件配置的前置条件检查:
- 网络连接检查:确保能访问外网(google.com)
- 硬件资源检查:确保满足最低配置 2C4G
- 新增命令行选项用于跳过检查
- 更新文档说明前置条件要求
This commit is contained in:
voson
2026-01-30 13:59:33 +08:00
parent 330aea4d16
commit 8fa9df03a0

View File

@@ -7,8 +7,21 @@ agent: general
本文档提供了多种创建 Gitea Actions Runner 的方式,支持 Host 模式和 Docker 模式。 本文档提供了多种创建 Gitea Actions Runner 的方式,支持 Host 模式和 Docker 模式。
## ⚠️ 重要:网络模式要求 ## ⚠️ 重要:前置条件
**创建 Runner 前请确保满足以下条件:**
### 1. 网络访问要求
- **必须能够访问外网**(如 google.com
- Runner 需要从 Docker Hub、GitHub 等拉取镜像和依赖
- 如果无法访问外网workflow 执行会失败
### 2. 硬件配置要求
- **最低配置2C4G**2 核 CPU + 4GB 内存)
- **推荐配置4C8G** 或更高
- 配置过低会导致 workflow 执行缓慢或失败
### 3. 网络模式要求
**两种模式都必须使用 host 网络模式,否则缓存功能无法正常工作!** **两种模式都必须使用 host 网络模式,否则缓存功能无法正常工作!**
- **Docker 模式**Runner 容器和 Job 容器都使用 host 网络 - **Docker 模式**Runner 容器和 Job 容器都使用 host 网络
@@ -96,6 +109,10 @@ Docker 模式使用预定义的镜像映射:
## 📦 快速使用 ## 📦 快速使用
**使用前请确认:**
1. ✅ 主机能访问外网(如 google.com
2. ✅ 硬件配置满足 2C4G推荐 4C8G
### 方法一:直接执行(推荐) ### 方法一:直接执行(推荐)
复制以下命令到终端执行,可指定参数: 复制以下命令到终端执行,可指定参数:
@@ -382,6 +399,8 @@ RUNNER_NAME=""
ALL_MODE=false ALL_MODE=false
INTERACTIVE=false INTERACTIVE=false
SKIP_CHECKS=false SKIP_CHECKS=false
SKIP_NETWORK_CHECK=false
SKIP_RESOURCE_CHECK=false
# 显示帮助 # 显示帮助
show_help() { show_help() {
@@ -397,7 +416,9 @@ Gitea Actions Runner 创建脚本
--token TOKEN Gitea 注册令牌 (必需) --token TOKEN Gitea 注册令牌 (必需)
--gitea-url URL Gitea 实例地址 (默认: https://git.shigongcao.com) --gitea-url URL Gitea 实例地址 (默认: https://git.shigongcao.com)
--name NAME Runner 名称 (默认: hostname) --name NAME Runner 名称 (默认: hostname)
--skip-checks 跳过依赖检查 --skip-checks 跳过所有检查
--skip-network-check 跳过网络连接检查
--skip-resource-check 跳过硬件资源检查
--interactive 交互模式 (传统方式) --interactive 交互模式 (传统方式)
--help 显示此帮助信息 --help 显示此帮助信息
@@ -423,7 +444,9 @@ while [[ $# -gt 0 ]]; do
--token) GITEA_TOKEN="$2"; shift ;; --token) GITEA_TOKEN="$2"; shift ;;
--gitea-url) GITEA_URL="$2"; shift ;; --gitea-url) GITEA_URL="$2"; shift ;;
--name) RUNNER_NAME="$2"; shift ;; --name) RUNNER_NAME="$2"; shift ;;
--skip-checks) SKIP_CHECKS=true ;; --skip-checks) SKIP_CHECKS=true; SKIP_NETWORK_CHECK=true; SKIP_RESOURCE_CHECK=true ;;
--skip-network-check) SKIP_NETWORK_CHECK=true ;;
--skip-resource-check) SKIP_RESOURCE_CHECK=true ;;
--interactive) INTERACTIVE=true ;; --interactive) INTERACTIVE=true ;;
--help) show_help ;; --help) show_help ;;
*) echo "❌ 未知参数: $1"; echo "使用 --help 查看帮助"; exit 1 ;; *) echo "❌ 未知参数: $1"; echo "使用 --help 查看帮助"; exit 1 ;;
@@ -439,7 +462,95 @@ if [ -z "$GITEA_TOKEN" ] && [ "$INTERACTIVE" = false ]; then
fi fi
# ========================================== # ==========================================
# 2. Interactive Mode (向后兼容) # 2. Pre-flight Checks (前置条件检查)
# ==========================================
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "前置条件检查"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# 2.1 网络连接检查
if [ "$SKIP_NETWORK_CHECK" = false ]; then
echo "检查外网连接..."
# 尝试连接 Google使用 curl 超时 5 秒)
if curl -s --connect-timeout 5 --max-time 10 https://www.google.com > /dev/null 2>&1; then
echo "✓ 外网连接正常 (google.com 可访问)"
else
echo "⚠️ 警告:无法访问 google.com"
echo " Runner 需要访问外网来拉取镜像和依赖"
echo " 如果你确认网络正常,可以使用 --skip-network-check 跳过检查"
read -p " 是否继续?[y/N]: " continue_choice
if [ "$continue_choice" != "y" ] && [ "$continue_choice" != "Y" ]; then
echo "❌ 已取消"
exit 1
fi
fi
else
echo "⊘ 已跳过网络连接检查"
fi
echo ""
# 2.2 硬件资源检查
if [ "$SKIP_RESOURCE_CHECK" = false ]; then
echo "检查硬件资源..."
# 检测 CPU 核心数
if command -v nproc > /dev/null 2>&1; then
cpu_cores=$(nproc)
elif command -v sysctl > /dev/null 2>&1; then
cpu_cores=$(sysctl -n hw.ncpu 2>/dev/null || echo "0")
else
cpu_cores=0
fi
# 检测内存大小GB
if command -v free > /dev/null 2>&1; then
mem_gb=$(free -g | awk '/^Mem:/{print $2}')
elif command -v sysctl > /dev/null 2>&1; then
mem_bytes=$(sysctl -n hw.memsize 2>/dev/null || echo "0")
mem_gb=$((mem_bytes / 1024 / 1024 / 1024))
else
mem_gb=0
fi
echo " CPU: ${cpu_cores}"
echo " 内存: ${mem_gb}GB"
# 检查是否满足最低配置
config_ok=true
if [ "$cpu_cores" -lt 2 ]; then
echo "⚠️ 警告CPU 核心数不足 (当前 ${cpu_cores} 核,建议至少 2 核)"
config_ok=false
fi
if [ "$mem_gb" -lt 4 ]; then
echo "⚠️ 警告:内存不足 (当前 ${mem_gb}GB建议至少 4GB)"
config_ok=false
fi
if [ "$config_ok" = false ]; then
echo ""
echo " 最低配置要求2C4G (2 核 CPU + 4GB 内存)"
echo " 推荐配置4C8G 或更高"
echo " 配置过低可能导致 workflow 执行失败或缓慢"
read -p " 是否继续?[y/N]: " continue_choice
if [ "$continue_choice" != "y" ] && [ "$continue_choice" != "Y" ]; then
echo "❌ 已取消"
exit 1
fi
else
echo "✓ 硬件资源满足要求"
fi
else
echo "⊘ 已跳过硬件资源检查"
fi
echo ""
# ==========================================
# 3. Interactive Mode (向后兼容)
# ========================================== # ==========================================
if [ "$INTERACTIVE" = true ]; then if [ "$INTERACTIVE" = true ]; then
@@ -460,7 +571,7 @@ if [ "$INTERACTIVE" = true ]; then
fi fi
# ========================================== # ==========================================
# 3. Load Gitea Configuration # 4. Load Gitea Configuration
# ========================================== # ==========================================
# 如果未通过命令行提供,尝试从配置文件加载 # 如果未通过命令行提供,尝试从配置文件加载
@@ -571,7 +682,7 @@ fi
echo "" echo ""
# ========================================== # ==========================================
# 3. Load Gitea Configuration # 4. Load Gitea Configuration
# ========================================== # ==========================================
# 如果未通过命令行提供,尝试从配置文件加载 # 如果未通过命令行提供,尝试从配置文件加载
@@ -604,7 +715,7 @@ echo " Token: ${GITEA_TOKEN:0:8}..."
echo "" echo ""
# ========================================== # ==========================================
# 4. Generate Runner Name # 5. Generate Runner Name
# ========================================== # ==========================================
# 如果未指定名称,生成默认名称 # 如果未指定名称,生成默认名称
@@ -629,7 +740,7 @@ fi
echo "" echo ""
# ========================================== # ==========================================
# 5. Main Creation Function # 6. Main Creation Function
# ========================================== # ==========================================
create_runner() { create_runner() {
@@ -664,7 +775,7 @@ create_runner() {
fi fi
# ========================================== # ==========================================
# 5.1 Check Dependencies # 6.1 Check Dependencies
# ========================================== # ==========================================
if [ "$SKIP_CHECKS" = false ]; then if [ "$SKIP_CHECKS" = false ]; then
@@ -693,7 +804,7 @@ create_runner() {
fi fi
# ========================================== # ==========================================
# 5.2 Detect System Environment & Labels # 6.2 Detect System Environment & Labels
# ========================================== # ==========================================
echo "生成 Labels..." echo "生成 Labels..."
@@ -778,7 +889,7 @@ create_runner() {
echo "" echo ""
# ========================================== # ==========================================
# 5.3 Create Runner Directory # 6.3 Create Runner Directory
# ========================================== # ==========================================
echo "创建 Runner 目录..." echo "创建 Runner 目录..."
@@ -791,7 +902,7 @@ create_runner() {
echo "" echo ""
# ========================================== # ==========================================
# 5.4 Create Configuration File # 6.4 Create Configuration File
# ========================================== # ==========================================
echo "创建配置文件..." echo "创建配置文件..."
@@ -909,7 +1020,7 @@ EOF
fi fi
# ========================================== # ==========================================
# 5.5 Display Runner Info # 6.5 Display Runner Info
# ========================================== # ==========================================
echo "" echo ""
@@ -930,7 +1041,7 @@ EOF
} }
# ========================================== # ==========================================
# 6. Main Execution Logic # 7. Main Execution Logic
# ========================================== # ==========================================
echo "" echo ""
@@ -1046,7 +1157,7 @@ echo " $labels"
echo "" echo ""
# ========================================== # ==========================================
# 6. Create Runner Directory # 7. Create Runner Directory
# ========================================== # ==========================================
echo "创建 Runner 目录..." echo "创建 Runner 目录..."