From d581d986c7ee011c3389f7562d6a5276199a6c9c Mon Sep 17 00:00:00 2001 From: hu xiaotong <416314413@163.com> Date: Tue, 8 Jul 2025 09:00:03 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=B7=BB=E5=8A=A0=20Epic=20UI=20?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=92=8C=E9=83=A8=E7=BD=B2=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 CI/CD 工作流文件,实现前端项目的自动构建和部署 - 支持 main、master 和 develop 分支的自动构建- 包含代码检出、环境安装、依赖管理、项目构建等步骤 - 实现构建产物的自动部署和 Docker 容器重启 --- .gitea/workflows/ci.yaml | 166 +++++++++++++++++++++++++++++++++------ 1 file changed, 144 insertions(+), 22 deletions(-) diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 72ee0a2..6e2fde6 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -115,23 +115,60 @@ jobs: echo "✅ pnpm安装完成: $(pnpm --version)" fi + - name: 检查缓存目录权限 + shell: bash + run: | + echo "🔍 检查缓存目录权限和状态..." + echo "=== /toolcache 目录检查 ===" + ls -la /toolcache/ 2>/dev/null || echo "/toolcache 目录不存在或无法访问" + echo "=== /shared/cache 目录检查 ===" + ls -la /shared/cache/ 2>/dev/null || echo "/shared/cache 目录不存在或无法访问" + echo "=== /tmp 目录检查 ===" + ls -la /tmp/ | head -10 + echo "=== 当前工作目录 ===" + pwd + ls -la + - name: 恢复依赖缓存 shell: bash run: | echo "📦 检查并恢复依赖缓存..." - echo "🔍 检查缓存目录状态:" - ls -la /toolcache/ 2>/dev/null || echo "/toolcache 目录不存在" - ls -la /shared/cache/ 2>/dev/null || echo "/shared/cache 目录不存在" - # 尝试从 /toolcache 恢复 - CACHE_FILE="/toolcache/node_modules_$(md5sum pnpm-lock.yaml | cut -d' ' -f1).tar.gz" - if [ -f "$CACHE_FILE" ]; then - echo "✅ 从 /toolcache 找到缓存文件,正在恢复..." - tar -xzf "$CACHE_FILE" - echo "📦 恢复的 node_modules 大小:" - du -sh node_modules || echo "node_modules 目录不存在" + # 生成缓存键 + CACHE_KEY=$(md5sum pnpm-lock.yaml | cut -d' ' -f1) + echo "缓存键: $CACHE_KEY" + + # 定义多个可能的缓存位置 + CACHE_LOCATIONS=( + "/toolcache/node_modules_${CACHE_KEY}.tar.gz" + "/shared/cache/node_modules_${CACHE_KEY}.tar.gz" + "/tmp/node_modules_${CACHE_KEY}.tar.gz" + "/var/cache/node_modules_${CACHE_KEY}.tar.gz" + ) + + CACHE_RESTORED=false + for cache_file in "${CACHE_LOCATIONS[@]}"; do + echo "🔍 检查缓存文件: $cache_file" + if [ -f "$cache_file" ]; then + echo "✅ 找到缓存文件: $cache_file" + echo "📦 缓存文件大小: $(du -sh "$cache_file" | cut -f1)" + echo "正在恢复缓存..." + if tar -xzf "$cache_file"; then + echo "✅ 缓存恢复成功" + CACHE_RESTORED=true + break + else + echo "❌ 缓存恢复失败: $cache_file" + continue + fi + fi + done + + if [ "$CACHE_RESTORED" = false ]; then + echo "📥 未找到有效缓存,将重新安装依赖" else - echo "📥 未找到缓存,将重新安装依赖" + echo "📦 恢复的 node_modules 大小:" + du -sh node_modules 2>/dev/null || echo "node_modules 目录不存在" fi - name: 安装依赖 @@ -140,23 +177,108 @@ jobs: echo "📦 开始安装依赖..." export PATH=$PATH:/usr/local/bin echo "开始时间: $(date)" - pnpm install --frozen-lockfile - echo "✅ 依赖安装完成" + + # 检查是否已有node_modules + if [ -d "node_modules" ] && [ -f "node_modules/.pnpm-debug.log" ]; then + echo "✅ 检测到已存在的node_modules,跳过安装" + else + echo "📥 执行pnpm install..." + pnpm install --frozen-lockfile + echo "✅ 依赖安装完成" + fi + echo "📦 node_modules 目录大小:" - du -sh node_modules || echo "node_modules 目录不存在" + du -sh node_modules 2>/dev/null || echo "node_modules 目录不存在" - name: 保存依赖缓存 shell: bash run: | echo "💾 保存依赖缓存..." - mkdir -p /toolcache - CACHE_FILE="/toolcache/node_modules_$(md5sum pnpm-lock.yaml | cut -d' ' -f1).tar.gz" - tar -czf "$CACHE_FILE" node_modules - echo "✅ 缓存已保存到: $CACHE_FILE" - echo "📦 缓存文件大小:" - du -sh "$CACHE_FILE" - echo "🔍 缓存目录内容:" - ls -la /toolcache/ + + # 生成缓存键 + CACHE_KEY=$(md5sum pnpm-lock.yaml | cut -d' ' -f1) + echo "缓存键: $CACHE_KEY" + + # 检查node_modules是否存在 + if [ ! -d "node_modules" ]; then + echo "❌ node_modules 目录不存在,跳过缓存保存" + exit 0 + fi + + # 尝试多个缓存位置 + CACHE_LOCATIONS=( + "/toolcache" + "/shared/cache" + "/tmp" + "/var/cache" + ) + + CACHE_SAVED=false + for cache_dir in "${CACHE_LOCATIONS[@]}"; do + echo "🔍 尝试保存到: $cache_dir" + if [ -w "$cache_dir" ] 2>/dev/null; then + mkdir -p "$cache_dir" + CACHE_FILE="$cache_dir/node_modules_${CACHE_KEY}.tar.gz" + echo "📦 正在创建缓存文件: $CACHE_FILE" + + if tar -czf "$CACHE_FILE" node_modules; then + echo "✅ 缓存已保存到: $CACHE_FILE" + echo "📦 缓存文件大小: $(du -sh "$CACHE_FILE" | cut -f1)" + CACHE_SAVED=true + + # 显示缓存目录内容 + echo "🔍 缓存目录内容:" + ls -la "$cache_dir/" | head -10 + break + else + echo "❌ 保存到 $cache_dir 失败" + continue + fi + else + echo "❌ 目录 $cache_dir 不可写" + fi + done + + if [ "$CACHE_SAVED" = false ]; then + echo "⚠️ 警告:所有缓存位置都无法保存,缓存功能可能不可用" + fi + + echo "⏰ 等待30秒,让你检查缓存是否成功写入..." + echo "🕐 当前时间: $(date)" + echo "📊 缓存状态检查:" + + # 每5秒检查一次缓存状态,持续30秒 + for i in {1..6}; do + echo "=== 第 $i 次检查 (第 $((i*5)) 秒) ===" + echo "时间: $(date)" + + for cache_dir in "${CACHE_LOCATIONS[@]}"; do + if [ -d "$cache_dir" ]; then + echo "📁 $cache_dir 目录内容:" + ls -la "$cache_dir/" 2>/dev/null | head -5 || echo "无法访问 $cache_dir" + + CACHE_FILE="$cache_dir/node_modules_${CACHE_KEY}.tar.gz" + if [ -f "$CACHE_FILE" ]; then + echo "✅ 缓存文件存在: $CACHE_FILE" + echo "📦 文件大小: $(du -sh "$CACHE_FILE" 2>/dev/null | cut -f1 || echo '无法获取大小')" + echo "📅 修改时间: $(stat -c %y "$CACHE_FILE" 2>/dev/null || echo '无法获取时间')" + else + echo "❌ 缓存文件不存在: $CACHE_FILE" + fi + else + echo "❌ 目录不存在: $cache_dir" + fi + echo "---" + done + + if [ $i -lt 6 ]; then + echo "⏳ 等待5秒..." + sleep 5 + fi + done + + echo "✅ 30秒等待完成,缓存检查结束" + echo "🕐 结束时间: $(date)" - name: 验证依赖 shell: bash