From 8fa9df03a06d35d9135a6ae15fa693b922a8b6fb Mon Sep 17 00:00:00 2001 From: voson Date: Fri, 30 Jan 2026 13:59:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(gitea):=20=E4=B8=BA=20runner=20=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=B7=BB=E5=8A=A0=E5=89=8D=E7=BD=AE=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加网络和硬件配置的前置条件检查: - 网络连接检查:确保能访问外网(google.com) - 硬件资源检查:确保满足最低配置 2C4G - 新增命令行选项用于跳过检查 - 更新文档说明前置条件要求 --- skill/gitea/create-runner.md | 141 +++++++++++++++++++++++++++++++---- 1 file changed, 126 insertions(+), 15 deletions(-) diff --git a/skill/gitea/create-runner.md b/skill/gitea/create-runner.md index 8a0663c..5a79220 100644 --- a/skill/gitea/create-runner.md +++ b/skill/gitea/create-runner.md @@ -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 目录..."