#!/bin/bash # 智慧畜牧业小程序矩阵部署脚本 # 用于自动化部署小程序到各个平台 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查必要的工具 check_dependencies() { log_info "检查依赖工具..." if ! command -v node &> /dev/null; then log_error "Node.js 未安装,请先安装 Node.js" exit 1 fi if ! command -v npm &> /dev/null; then log_error "npm 未安装,请先安装 npm" exit 1 fi log_success "依赖工具检查完成" } # 安装依赖 install_dependencies() { log_info "安装项目依赖..." cd mini_program if [ -f "package-lock.json" ]; then npm ci else npm install fi log_success "依赖安装完成" cd .. } # 构建项目 build_project() { local platform=$1 local app_name=$2 log_info "构建 ${app_name} (${platform})..." cd mini_program case $platform in "mp-weixin") npm run build:mp-weixin ;; "mp-alipay") npm run build:mp-alipay ;; "mp-baidu") npm run build:mp-baidu ;; "mp-toutiao") npm run build:mp-toutiao ;; "mp-qq") npm run build:mp-qq ;; "h5") npm run build:h5 ;; "app-plus") npm run build:app-plus ;; *) log_error "不支持的平台: $platform" exit 1 ;; esac log_success "${app_name} 构建完成" cd .. } # 部署到服务器 deploy_to_server() { local platform=$1 local server_path=$2 log_info "部署到服务器..." if [ -z "$server_path" ]; then log_warning "未指定服务器路径,跳过服务器部署" return fi # 这里可以添加具体的部署逻辑 # 例如:rsync、scp、ftp 等 log_success "服务器部署完成" } # 生成版本信息 generate_version_info() { log_info "生成版本信息..." local version=$(date +"%Y%m%d%H%M%S") local git_commit=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown") local build_time=$(date "+%Y-%m-%d %H:%M:%S") cat > mini_program/version.json << EOF { "version": "$version", "gitCommit": "$git_commit", "buildTime": "$build_time", "environment": "${ENVIRONMENT:-production}" } EOF log_success "版本信息生成完成" } # 清理构建文件 cleanup() { log_info "清理构建文件..." cd mini_program # 清理各平台构建文件 rm -rf dist/ rm -rf unpackage/ log_success "清理完成" cd .. } # 验证构建结果 validate_build() { local platform=$1 log_info "验证构建结果..." cd mini_program case $platform in "mp-weixin") if [ ! -d "dist/build/mp-weixin" ]; then log_error "微信小程序构建失败" exit 1 fi ;; "h5") if [ ! -d "dist/build/h5" ]; then log_error "H5 构建失败" exit 1 fi ;; esac log_success "构建结果验证通过" cd .. } # 发送通知 send_notification() { local status=$1 local message=$2 # 这里可以添加通知逻辑 # 例如:钉钉、企业微信、邮件等 log_info "发送通知: $message" } # 主函数 main() { local platform=${1:-"mp-weixin"} local app_name=${2:-"智慧畜牧业小程序"} local environment=${3:-"production"} local server_path=$4 export ENVIRONMENT=$environment log_info "开始部署 ${app_name}" log_info "平台: $platform" log_info "环境: $environment" # 检查依赖 check_dependencies # 清理旧文件 cleanup # 生成版本信息 generate_version_info # 安装依赖 install_dependencies # 构建项目 build_project $platform $app_name # 验证构建结果 validate_build $platform # 部署到服务器 deploy_to_server $platform $server_path log_success "部署完成!" # 发送成功通知 send_notification "success" "${app_name} 部署成功" } # 显示帮助信息 show_help() { echo "智慧畜牧业小程序矩阵部署脚本" echo "" echo "用法:" echo " $0 [平台] [应用名称] [环境] [服务器路径]" echo "" echo "参数:" echo " 平台 目标平台 (mp-weixin|mp-alipay|mp-baidu|mp-toutiao|mp-qq|h5|app-plus)" echo " 应用名称 应用名称 (默认: 智慧畜牧业小程序)" echo " 环境 部署环境 (development|testing|production)" echo " 服务器路径 服务器部署路径 (可选)" echo "" echo "示例:" echo " $0 mp-weixin 养殖管理小程序 production" echo " $0 h5 牛肉商城 testing /var/www/html" echo " $0 mp-alipay 银行监管小程序 production" echo "" echo "支持的平台:" echo " mp-weixin 微信小程序" echo " mp-alipay 支付宝小程序" echo " mp-baidu 百度小程序" echo " mp-toutiao 字节跳动小程序" echo " mp-qq QQ小程序" echo " h5 H5网页版" echo " app-plus 原生App" } # 错误处理 error_handler() { local line_number=$1 log_error "脚本在第 $line_number 行出错" send_notification "error" "部署失败,请检查日志" exit 1 } # 设置错误处理 trap 'error_handler $LINENO' ERR # 检查参数 if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then show_help exit 0 fi # 执行主函数 main "$@"