281 lines
6.0 KiB
Bash
Executable File
281 lines
6.0 KiB
Bash
Executable File
#!/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 "$@" |