#!/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 ""