Files
novalon-website/scripts/monitoring/cicd-monitor.sh
T
张翔 34ce9fb968 fix: 修复CI/CD流程问题并建立监控机制
- 禁用Git LFS(项目未使用LFS)
- 修复企业微信通知环境变量展开问题
- 创建CI/CD诊断脚本
- 建立持续监控机制
- 添加预防措施文档

问题根本原因:
1. Woodpecker CI Git插件默认启用LFS,导致不必要的LFS命令执行
2. Shell脚本heredoc块内变量展开时机问题导致环境变量丢失

修复方案:
1. 在clone配置中添加 lfs: false
2. 将环境变量赋值移到单独的命令行,heredoc仅用于生成JSON

验证方法:
- 运行 diagnose-cicd-issues.sh 进行诊断
- 运行 scripts/monitoring/cicd-monitor.sh 进行监控
2026-03-29 08:48:31 +08:00

166 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e
echo "=========================================="
echo "CI/CD 持续监控脚本"
echo "=========================================="
echo ""
MONITOR_DIR="./logs/cicd-monitor"
mkdir -p "$MONITOR_DIR"
TIMESTAMP=$(date "+%Y%m%d_%H%M%S")
LOG_FILE="$MONITOR_DIR/monitor_${TIMESTAMP}.log"
echo "监控日志: $LOG_FILE"
echo ""
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
log "开始 CI/CD 监控..."
log ""
log "=========================================="
log "1. 检查 Git LFS 配置"
log "=========================================="
if [ -f ".gitattributes" ]; then
log "✅ .gitattributes 存在"
log "内容:"
cat .gitattributes | tee -a "$LOG_FILE"
else
log "✅ .gitattributes 不存在(项目未使用LFS"
fi
if grep -q "lfs: false" .woodpecker.yml; then
log "✅ Woodpecker CI 配置已禁用 LFS"
else
log "⚠️ Woodpecker CI 配置未禁用 LFS"
fi
log ""
log "=========================================="
log "2. 检查 Woodpecker CI 配置语法"
log "=========================================="
if command -v yamllint &> /dev/null; then
if yamllint .woodpecker.yml > /dev/null 2>&1; then
log "✅ YAML 语法正确"
else
log "❌ YAML 语法错误"
yamllint .woodpecker.yml | tee -a "$LOG_FILE"
fi
else
log "⚠️ yamllint 未安装,跳过语法检查"
fi
log ""
log "=========================================="
log "3. 检查企业微信通知配置"
log "=========================================="
if grep -q "WECHAT_WEBHOOK" .woodpecker.yml; then
log "✅ 企业微信通知已配置"
if grep -q 'BRANCH="${CI_COMMIT_BRANCH' .woodpecker.yml; then
log "✅ 环境变量展开格式正确"
else
log "⚠️ 环境变量展开格式可能有问题"
fi
else
log "⚠️ 企业微信通知未配置"
fi
log ""
log "=========================================="
log "4. 检查 Secrets 配置"
log "=========================================="
REQUIRED_SECRETS=(
"registry_password"
"ssh_private_key"
"wechat_webhook"
)
for secret in "${REQUIRED_SECRETS[@]}"; do
if grep -q "from_secret: $secret" .woodpecker.yml; then
log "✅ Secret '$secret' 已配置"
else
log "❌ Secret '$secret' 未配置"
fi
done
log ""
log "=========================================="
log "5. 检查分支保护规则"
log "=========================================="
BRANCHES=("main" "dev" "release" "release/**")
for branch in "${BRANCHES[@]}"; do
if grep -q "branch:" .woodpecker.yml && grep -A 5 "branch:" .woodpecker.yml | grep -q "$branch"; then
log "✅ 分支 '$branch' 已配置触发规则"
else
log "⚠️ 分支 '$branch' 未配置触发规则"
fi
done
log ""
log "=========================================="
log "6. 检查部署配置"
log "=========================================="
if grep -q "deploy-production" .woodpecker.yml; then
log "✅ 生产部署步骤已配置"
if grep -q "Health check" .woodpecker.yml; then
log "✅ 健康检查已配置"
else
log "⚠️ 健康检查未配置"
fi
if grep -q "rolling back" .woodpecker.yml; then
log "✅ 回滚机制已配置"
else
log "⚠️ 回滚机制未配置"
fi
else
log "⚠️ 生产部署步骤未配置"
fi
log ""
log "=========================================="
log "7. 性能指标检查"
log "=========================================="
if [ -d "node_modules" ]; then
NODE_MODULES_SIZE=$(du -sh node_modules | cut -f1)
log "node_modules 大小: $NODE_MODULES_SIZE"
fi
if [ -d "dist" ]; then
DIST_SIZE=$(du -sh dist | cut -f1)
log "dist 目录大小: $DIST_SIZE"
fi
GIT_OBJECTS=$(find .git/objects -type f | wc -l | tr -d ' ')
log "Git 对象数量: $GIT_OBJECTS"
log ""
log "=========================================="
log "监控完成"
log "=========================================="
log ""
log "📊 监控报告已保存到: $LOG_FILE"
log ""
echo ""
echo "💡 建议操作:"
echo " 1. 定期运行此监控脚本(建议每小时一次)"
echo " 2. 将日志文件纳入版本控制"
echo " 3. 设置告警机制(如连续3次失败则发送通知)"
echo ""