Files
xlxumu/scripts/deploy.sh

281 lines
6.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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