hookehuyr

feat(deploy): 新增部署脚本和配置文件

添加 deploy.sh 主部署脚本和 deploy-config.sh 配置文件,支持多环境批量部署
包含彩色输出、环境验证、错误处理和进度提示等功能
同时添加 DEPLOY-SHELL.md 详细说明文档
1 +# Shell 部署脚本使用说明
2 +
3 +## 概述
4 +
5 +为了简化部署流程,我们提供了两个 Shell 脚本:
6 +- `deploy.sh` - 主部署脚本,支持灵活的环境选择
7 +- `deploy-config.sh` - 配置脚本,预定义环境组合
8 +
9 +## 快速开始
10 +
11 +### 方法一:使用配置脚本(推荐)
12 +
13 +1. **编辑配置文件**
14 + ```bash
15 + # 编辑 deploy-config.sh
16 + vim deploy-config.sh
17 +
18 + # 修改 upload_array 数组
19 + upload_array=('dev' 'oa' 'mituo')
20 + ```
21 +
22 +2. **执行部署**
23 + ```bash
24 + ./deploy-config.sh
25 + ```
26 +
27 +### 方法二:直接使用主脚本
28 +
29 +```bash
30 +# 部署到指定环境
31 +./deploy.sh dev oa mituo
32 +
33 +# 部署到所有环境
34 +./deploy.sh all
35 +
36 +# 查看帮助
37 +./deploy.sh --help
38 +```
39 +
40 +## 支持的环境
41 +
42 +| 环境代码 | 环境名称 | 说明 |
43 +|---------|---------|------|
44 +| `dev` | 开发环境 | 开发测试环境 |
45 +| `oa` | OA环境 | OA系统环境 |
46 +| `mituo` | 米托环境 | 米托相关环境 |
47 +| `guanzong` | 观宗环境 | 观宗相关环境 |
48 +| `baorong` | 宝融环境 | 宝融相关环境 |
49 +| `taishan` | 泰山环境 | 泰山相关环境 |
50 +| `xys` | XYS环境 | XYS相关环境 |
51 +| `zentea` | Zentea环境 | Zentea相关环境 |
52 +
53 +## 使用示例
54 +
55 +### 1. 配置脚本示例
56 +
57 +```bash
58 +# deploy-config.sh 中的配置示例
59 +
60 +# 仅部署开发和OA环境
61 +upload_array=('dev' 'oa')
62 +
63 +# 部署三个主要环境
64 +upload_array=('dev' 'oa' 'mituo')
65 +
66 +# 部署所有环境
67 +upload_array=('all')
68 +
69 +# 部署特定的几个环境
70 +upload_array=('mituo' 'guanzong' 'baorong' 'taishan')
71 +```
72 +
73 +### 2. 直接命令示例
74 +
75 +```bash
76 +# 部署到开发环境
77 +./deploy.sh dev
78 +
79 +# 部署到开发和OA环境
80 +./deploy.sh dev oa
81 +
82 +# 部署到多个环境
83 +./deploy.sh dev oa mituo guanzong
84 +
85 +# 部署到所有环境
86 +./deploy.sh all
87 +```
88 +
89 +## 脚本功能特性
90 +
91 +### 🚀 智能部署流程
92 +1. **编译打包** - 自动执行 `npm run build` 和 `npm run tar`
93 +2. **环境验证** - 检查指定环境是否有效
94 +3. **批量部署** - 依次部署到指定环境
95 +4. **自动清理** - 部署完成后清理临时文件
96 +
97 +### 🎨 用户友好界面
98 +- **彩色输出** - 不同类型的消息使用不同颜色
99 +- **进度提示** - 实时显示部署进度
100 +- **结果汇总** - 显示部署成功/失败统计
101 +- **耗时统计** - 显示总部署时间
102 +
103 +### 🛡️ 安全特性
104 +- **确认提示** - 部署前需要用户确认
105 +- **错误处理** - 遇到错误时停止执行
106 +- **信号捕获** - 支持 Ctrl+C 中断并清理
107 +- **环境验证** - 防止部署到无效环境
108 +
109 +### 📊 详细日志
110 +- **实时状态** - 显示当前执行步骤
111 +- **错误信息** - 详细的错误提示
112 +- **成功反馈** - 明确的成功确认
113 +- **汇总报告** - 最终部署结果统计
114 +
115 +## 故障排除
116 +
117 +### 常见问题
118 +
119 +1. **权限问题**
120 + ```bash
121 + # 如果脚本无法执行,添加执行权限
122 + chmod +x deploy.sh
123 + chmod +x deploy-config.sh
124 + ```
125 +
126 +2. **环境不存在**
127 + ```bash
128 + # 检查 package.json 中是否有对应的 scp-* 和 dec-* 脚本
129 + # 例如:scp-dev, dec-dev
130 + ```
131 +
132 +3. **编译失败**
133 + ```bash
134 + # 确保项目依赖已安装
135 + npm install
136 +
137 + # 手动测试编译
138 + npm run build
139 + ```
140 +
141 +4. **网络问题**
142 + ```bash
143 + # 检查SSH连接
144 + ssh your-server
145 +
146 + # 检查SCP权限
147 + scp test.txt your-server:/path/
148 + ```
149 +
150 +### 调试模式
151 +
152 +```bash
153 +# 在脚本开头添加调试选项
154 +set -x # 显示执行的每个命令
155 +set -e # 遇到错误立即退出
156 +```
157 +
158 +## 高级用法
159 +
160 +### 自定义环境组合
161 +
162 +你可以在 `deploy-config.sh` 中定义多个不同的环境组合:
163 +
164 +```bash
165 +# 开发组合
166 +dev_array=('dev')
167 +
168 +# 测试组合
169 +test_array=('dev' 'oa')
170 +
171 +# 生产组合
172 +prod_array=('mituo' 'guanzong' 'baorong' 'taishan')
173 +
174 +# 全部组合
175 +all_array=('all')
176 +
177 +# 根据需要选择使用哪个组合
178 +upload_array=("${test_array[@]}")
179 +```
180 +
181 +### 环境变量配置
182 +
183 +```bash
184 +# 可以通过环境变量传递配置
185 +export DEPLOY_ENVS="dev,oa,mituo"
186 +./deploy.sh ${DEPLOY_ENVS//,/ }
187 +```
188 +
189 +### 集成到CI/CD
190 +
191 +```yaml
192 +# GitHub Actions 示例
193 +- name: Deploy to environments
194 + run: |
195 + chmod +x deploy.sh
196 + ./deploy.sh dev oa
197 +```
198 +
199 +## 与npm脚本的对比
200 +
201 +| 特性 | npm脚本 | Shell脚本 |
202 +|------|---------|----------|
203 +| 使用复杂度 | 中等 | 简单 |
204 +| 环境选择 | 固定 | 灵活 |
205 +| 批量部署 | 需要多个命令 | 一个命令 |
206 +| 错误处理 | 基础 | 完善 |
207 +| 用户界面 | 基础 | 友好 |
208 +| 确认机制 | 无 | 有 |
209 +| 进度显示 | 无 | 有 |
210 +
211 +## 总结
212 +
213 +Shell脚本提供了更加灵活和用户友好的部署方式:
214 +
215 +**简单易用** - 一行命令完成多环境部署
216 +**灵活配置** - 支持任意环境组合
217 +**安全可靠** - 完善的错误处理和确认机制
218 +**用户友好** - 彩色输出和详细进度提示
219 +**高效部署** - 一次编译,多环境部署
220 +
221 +推荐使用 `deploy-config.sh` 进行日常部署,使用 `deploy.sh` 进行临时的灵活部署。
...\ No newline at end of file ...\ No newline at end of file
1 +#!/bin/bash
2 +
3 +# 部署配置文件
4 +# 在这里定义你想要部署的环境组合
5 +
6 +# 使用方法:
7 +# 1. 修改下面的 upload_array 数组,添加你需要的环境
8 +# 2. 运行: ./deploy-config.sh
9 +
10 +# 定义部署环境数组 - 根据需要修改这里
11 +# upload_array=('dev' 'oa' 'mituo')
12 +
13 +# 你也可以定义多个不同的组合:
14 +# upload_array=('dev' 'oa') # 仅开发和OA环境
15 +upload_array=('oa' 'mituo' 'guanzong' 'baorong' 'taishan' 'xys') # 仅这三个环境
16 +# upload_array=('all') # 所有环境
17 +
18 +# 颜色定义
19 +GREEN='\033[0;32m'
20 +BLUE='\033[0;34m'
21 +YELLOW='\033[1;33m'
22 +NC='\033[0m'
23 +
24 +echo -e "${BLUE}=== 自动部署脚本 ===${NC}"
25 +echo -e "${YELLOW}配置的部署环境: ${upload_array[*]}${NC}"
26 +echo ""
27 +
28 +# 调用主部署脚本
29 +./deploy.sh "${upload_array[@]}"
30 +
31 +# 检查部署结果
32 +if [[ $? -eq 0 ]]; then
33 + echo -e "${GREEN}✅ 部署任务完成!${NC}"
34 +else
35 + echo -e "${RED}❌ 部署过程中出现错误${NC}"
36 + exit 1
37 +fi
1 +#!/bin/bash
2 +
3 +# 部署脚本 - 智能批量部署工具
4 +# 使用方法: ./deploy.sh [环境1] [环境2] [环境3] ...
5 +# 示例: ./deploy.sh dev oa mituo
6 +
7 +# 颜色定义
8 +RED='\033[0;31m'
9 +GREEN='\033[0;32m'
10 +YELLOW='\033[1;33m'
11 +BLUE='\033[0;34m'
12 +NC='\033[0m' # No Color
13 +
14 +# 打印带颜色的消息
15 +print_info() {
16 + echo -e "${BLUE}[INFO]${NC} $1"
17 +}
18 +
19 +print_success() {
20 + echo -e "${GREEN}[SUCCESS]${NC} $1"
21 +}
22 +
23 +print_warning() {
24 + echo -e "${YELLOW}[WARNING]${NC} $1"
25 +}
26 +
27 +print_error() {
28 + echo -e "${RED}[ERROR]${NC} $1"
29 +}
30 +
31 +# 支持的环境列表
32 +declare -A ENVIRONMENTS
33 +ENVIRONMENTS["dev"]="开发环境"
34 +ENVIRONMENTS["oa"]="OA环境"
35 +ENVIRONMENTS["mituo"]="弥陀寺环境"
36 +ENVIRONMENTS["guanzong"]="观宗寺环境"
37 +ENVIRONMENTS["baorong"]="包容寺环境"
38 +ENVIRONMENTS["taishan"]="泰山寺环境"
39 +ENVIRONMENTS["xys"]="西园寺环境"
40 +ENVIRONMENTS["zentea"]="Zentea环境"
41 +
42 +# 显示帮助信息
43 +show_help() {
44 + echo "部署脚本使用说明:"
45 + echo ""
46 + echo "使用方法:"
47 + echo " ./deploy.sh [环境1] [环境2] [环境3] ..."
48 + echo ""
49 + echo "支持的环境:"
50 + for env in "${!ENVIRONMENTS[@]}"; do
51 + echo " $env - ${ENVIRONMENTS[$env]}"
52 + done
53 + echo ""
54 + echo "示例:"
55 + echo " ./deploy.sh dev oa mituo # 部署到开发、OA、米托环境"
56 + echo " ./deploy.sh all # 部署到所有环境"
57 + echo " ./deploy.sh --help # 显示帮助信息"
58 + echo ""
59 +}
60 +
61 +# 检查环境是否有效
62 +validate_environment() {
63 + local env=$1
64 + if [[ ! ${ENVIRONMENTS[$env]+_} ]]; then
65 + print_error "不支持的环境: $env"
66 + print_info "支持的环境: ${!ENVIRONMENTS[*]}"
67 + return 1
68 + fi
69 + return 0
70 +}
71 +
72 +# 编译打包
73 +build_project() {
74 + print_info "开始编译打包..."
75 +
76 + # 检查是否存在 package.json
77 + if [[ ! -f "package.json" ]]; then
78 + print_error "未找到 package.json 文件,请在项目根目录执行此脚本"
79 + exit 1
80 + fi
81 +
82 + # 执行编译打包
83 + npm run build
84 + if [[ $? -ne 0 ]]; then
85 + print_error "编译失败"
86 + exit 1
87 + fi
88 +
89 + npm run tar
90 + if [[ $? -ne 0 ]]; then
91 + print_error "打包失败"
92 + exit 1
93 + fi
94 +
95 + # 检查打包文件是否存在
96 + if [[ ! -f "dist.tar.gz" ]]; then
97 + print_error "打包文件 dist.tar.gz 不存在"
98 + exit 1
99 + fi
100 +
101 + print_success "编译打包完成"
102 +}
103 +
104 +# 部署到指定环境
105 +deploy_to_environment() {
106 + local env=$1
107 + local env_name=${ENVIRONMENTS[$env]}
108 +
109 + print_info "开始部署到 $env_name ($env)..."
110 +
111 + # 执行上传
112 + npm run scp-$env
113 + if [[ $? -ne 0 ]]; then
114 + print_error "上传到 $env_name 失败"
115 + return 1
116 + fi
117 +
118 + # 执行解压
119 + npm run dec-$env
120 + if [[ $? -ne 0 ]]; then
121 + print_error "在 $env_name 解压失败"
122 + return 1
123 + fi
124 +
125 + print_success "部署到 $env_name 完成"
126 + return 0
127 +}
128 +
129 +# 清理临时文件
130 +cleanup() {
131 + print_info "清理临时文件..."
132 +
133 + if [[ -f "dist.tar.gz" ]]; then
134 + rm -f dist.tar.gz
135 + print_info "删除 dist.tar.gz"
136 + fi
137 +
138 + if [[ -d "front" ]]; then
139 + rm -rf front
140 + print_info "删除 front 目录"
141 + fi
142 +
143 + print_success "清理完成"
144 +}
145 +
146 +# 主函数
147 +main() {
148 + # 检查参数
149 + if [[ $# -eq 0 ]] || [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
150 + show_help
151 + exit 0
152 + fi
153 +
154 + # 解析环境参数
155 + local environments=()
156 +
157 + if [[ "$1" == "all" ]]; then
158 + # 部署到所有环境
159 + environments=("${!ENVIRONMENTS[@]}")
160 + print_info "将部署到所有环境: ${environments[*]}"
161 + else
162 + # 验证指定的环境
163 + for env in "$@"; do
164 + if validate_environment "$env"; then
165 + environments+=("$env")
166 + else
167 + exit 1
168 + fi
169 + done
170 + print_info "将部署到环境: ${environments[*]}"
171 + fi
172 +
173 + # 确认部署
174 + echo ""
175 + print_warning "即将部署到以下环境:"
176 + for env in "${environments[@]}"; do
177 + echo " - $env (${ENVIRONMENTS[$env]})"
178 + done
179 + echo ""
180 + read -p "确认继续? (y/N): " -n 1 -r
181 + echo ""
182 + if [[ ! $REPLY =~ ^[Yy]$ ]]; then
183 + print_info "部署已取消"
184 + exit 0
185 + fi
186 +
187 + # 记录开始时间
188 + local start_time=$(date +%s)
189 +
190 + # 编译打包
191 + build_project
192 +
193 + # 部署到各个环境
194 + local success_count=0
195 + local failed_environments=()
196 +
197 + for env in "${environments[@]}"; do
198 + if deploy_to_environment "$env"; then
199 + ((success_count++))
200 + else
201 + failed_environments+=("$env")
202 + fi
203 + echo "" # 添加空行分隔
204 + done
205 +
206 + # 清理临时文件
207 + cleanup
208 +
209 + # 计算耗时
210 + local end_time=$(date +%s)
211 + local duration=$((end_time - start_time))
212 +
213 + # 显示部署结果
214 + echo ""
215 + print_info "=== 部署结果汇总 ==="
216 + print_success "成功部署: $success_count/${#environments[@]} 个环境"
217 +
218 + if [[ ${#failed_environments[@]} -gt 0 ]]; then
219 + print_error "失败环境: ${failed_environments[*]}"
220 + fi
221 +
222 + print_info "总耗时: ${duration}秒"
223 +
224 + # 退出码
225 + if [[ ${#failed_environments[@]} -gt 0 ]]; then
226 + exit 1
227 + else
228 + print_success "所有环境部署完成!"
229 + exit 0
230 + fi
231 +}
232 +
233 +# 捕获中断信号,确保清理
234 +trap cleanup EXIT INT TERM
235 +
236 +# 执行主函数
237 +main "$@"