Files
xlxumu/scripts/deploy.sh

281 lines
6.0 KiB
Bash
Raw Permalink Normal View History

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