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