feat(gitea): 为 runner 创建添加前置条件检查
添加网络和硬件配置的前置条件检查: - 网络连接检查:确保能访问外网(google.com) - 硬件资源检查:确保满足最低配置 2C4G - 新增命令行选项用于跳过检查 - 更新文档说明前置条件要求
This commit is contained in:
@@ -7,8 +7,21 @@ agent: general
|
||||
|
||||
本文档提供了多种创建 Gitea Actions Runner 的方式,支持 Host 模式和 Docker 模式。
|
||||
|
||||
## ⚠️ 重要:网络模式要求
|
||||
## ⚠️ 重要:前置条件
|
||||
|
||||
**创建 Runner 前请确保满足以下条件:**
|
||||
|
||||
### 1. 网络访问要求
|
||||
- **必须能够访问外网**(如 google.com)
|
||||
- Runner 需要从 Docker Hub、GitHub 等拉取镜像和依赖
|
||||
- 如果无法访问外网,workflow 执行会失败
|
||||
|
||||
### 2. 硬件配置要求
|
||||
- **最低配置:2C4G**(2 核 CPU + 4GB 内存)
|
||||
- **推荐配置:4C8G** 或更高
|
||||
- 配置过低会导致 workflow 执行缓慢或失败
|
||||
|
||||
### 3. 网络模式要求
|
||||
**两种模式都必须使用 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
|
||||
INTERACTIVE=false
|
||||
SKIP_CHECKS=false
|
||||
SKIP_NETWORK_CHECK=false
|
||||
SKIP_RESOURCE_CHECK=false
|
||||
|
||||
# 显示帮助
|
||||
show_help() {
|
||||
@@ -397,7 +416,9 @@ Gitea Actions Runner 创建脚本
|
||||
--token TOKEN Gitea 注册令牌 (必需)
|
||||
--gitea-url URL Gitea 实例地址 (默认: https://git.shigongcao.com)
|
||||
--name NAME Runner 名称 (默认: hostname)
|
||||
--skip-checks 跳过依赖检查
|
||||
--skip-checks 跳过所有检查
|
||||
--skip-network-check 跳过网络连接检查
|
||||
--skip-resource-check 跳过硬件资源检查
|
||||
--interactive 交互模式 (传统方式)
|
||||
--help 显示此帮助信息
|
||||
|
||||
@@ -423,7 +444,9 @@ while [[ $# -gt 0 ]]; do
|
||||
--token) GITEA_TOKEN="$2"; shift ;;
|
||||
--gitea-url) GITEA_URL="$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 ;;
|
||||
--help) show_help ;;
|
||||
*) echo "❌ 未知参数: $1"; echo "使用 --help 查看帮助"; exit 1 ;;
|
||||
@@ -439,7 +462,95 @@ if [ -z "$GITEA_TOKEN" ] && [ "$INTERACTIVE" = false ]; then
|
||||
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
|
||||
@@ -460,7 +571,7 @@ if [ "$INTERACTIVE" = true ]; then
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 3. Load Gitea Configuration
|
||||
# 4. Load Gitea Configuration
|
||||
# ==========================================
|
||||
|
||||
# 如果未通过命令行提供,尝试从配置文件加载
|
||||
@@ -571,7 +682,7 @@ fi
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 3. Load Gitea Configuration
|
||||
# 4. Load Gitea Configuration
|
||||
# ==========================================
|
||||
|
||||
# 如果未通过命令行提供,尝试从配置文件加载
|
||||
@@ -604,7 +715,7 @@ echo " Token: ${GITEA_TOKEN:0:8}..."
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 4. Generate Runner Name
|
||||
# 5. Generate Runner Name
|
||||
# ==========================================
|
||||
|
||||
# 如果未指定名称,生成默认名称
|
||||
@@ -629,7 +740,7 @@ fi
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 5. Main Creation Function
|
||||
# 6. Main Creation Function
|
||||
# ==========================================
|
||||
|
||||
create_runner() {
|
||||
@@ -664,7 +775,7 @@ create_runner() {
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 5.1 Check Dependencies
|
||||
# 6.1 Check Dependencies
|
||||
# ==========================================
|
||||
|
||||
if [ "$SKIP_CHECKS" = false ]; then
|
||||
@@ -693,7 +804,7 @@ create_runner() {
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 5.2 Detect System Environment & Labels
|
||||
# 6.2 Detect System Environment & Labels
|
||||
# ==========================================
|
||||
|
||||
echo "生成 Labels..."
|
||||
@@ -778,7 +889,7 @@ create_runner() {
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 5.3 Create Runner Directory
|
||||
# 6.3 Create Runner Directory
|
||||
# ==========================================
|
||||
|
||||
echo "创建 Runner 目录..."
|
||||
@@ -791,7 +902,7 @@ create_runner() {
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 5.4 Create Configuration File
|
||||
# 6.4 Create Configuration File
|
||||
# ==========================================
|
||||
|
||||
echo "创建配置文件..."
|
||||
@@ -909,7 +1020,7 @@ EOF
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 5.5 Display Runner Info
|
||||
# 6.5 Display Runner Info
|
||||
# ==========================================
|
||||
|
||||
echo ""
|
||||
@@ -930,7 +1041,7 @@ EOF
|
||||
}
|
||||
|
||||
# ==========================================
|
||||
# 6. Main Execution Logic
|
||||
# 7. Main Execution Logic
|
||||
# ==========================================
|
||||
|
||||
echo ""
|
||||
@@ -1046,7 +1157,7 @@ echo " $labels"
|
||||
echo ""
|
||||
|
||||
# ==========================================
|
||||
# 6. Create Runner Directory
|
||||
# 7. Create Runner Directory
|
||||
# ==========================================
|
||||
|
||||
echo "创建 Runner 目录..."
|
||||
|
||||
Reference in New Issue
Block a user