提交 b3330b4c authored 作者: 陈泽健's avatar 陈泽健

feat(add):调整deploy函数增加参数接收,处理后续分包时的菜单隐藏无关服务选择项;调整new_auto_monitor.sh脚本,增加中间件与主服务调用传参,去除无关服务部署操作;

上级 786bdf84
# deploy服务部署脚本优化
## 代码路径
- deploy服务部署脚本:[自动化部署脚本/x86架构/新统一平台/auto_deploy_services.sh]
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto.sh]
## 功能需求
### 功能目标
**目标:** 当前脚本无接收传参方式,需增加接收传参方式来过滤交互菜单中的某些选项。
### 需求描述
#### 调用逻辑
- 调用方式:
- 在主脚本中调整`deploy_services`调用传参
```bash
# 传入所需部署的服务:meeting,monitor,voice,cardtable,paperless
# 默认全部(不传参或空)
deploy_services ""
# 指定服务
deploy_services "meeting,monitor,voice"
deploy_services "$deploy_services_type"
```
例子:
```ignorelang
# 场景1:不传参,显示所有服务选项
deploy_services ""
# 场景2:只部署预定系统和运维系统
deploy_services "meeting,monitor"
# 场景3:部署语音系统(包含两个服务python_voice_x86和iListen_x86)
deploy_services "voice"
```
- 如果没用传参,则默认全部。
- 传参说明:
- meeting:java_x86
- monitor:python_x86
- voice:python_voice_x86、iListen_x86
- cardtable:cardtable_x86
- paperless:paperless_x86
- 建立映射关系吧。
- 交互菜单:
- 通过接收到的参数显示服务,需用户自行勾选部署。
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# deploy服务部署脚本优化 - 计划执行文档
## 需求概述
`deploy_services` 函数增加接收传参方式,通过参数过滤交互菜单中的服务选项。
---
## 代码路径
- **目标脚本**`自动化部署脚本/x86架构/新统一平台/auto_deploy_services.sh`
- **调用脚本**`自动化部署脚本/x86架构/新统一平台/new_auto.sh`
---
## 服务名称映射关系
| 服务名称 | 对应函数 | 菜单编号 |
|---------|---------|---------|
| meeting | java_x86 | 1 |
| monitor | python_x86 | 2 |
| voice | python_voice_x86, iListen_x86 | 3 |
| cardtable | cardtable_x86 | 4 |
| paperless | paperless_x86 | 5 |
---
## 实现步骤
### 步骤1:修改 deploy_services 函数签名
**文件**`auto_deploy_services.sh`
**修改内容**
```bash
# 修改前
function deploy_services() {
# 修改后
function deploy_services() {
local filter_services="$1" # 接收过滤参数
```
### 步骤2:建立服务名称到菜单编号的映射
**位置**:函数内部,SERVICE_MAP 定义之后
**新增内容**
```bash
# 服务名称到菜单编号的映射
declare -A SERVICE_NAME_MAP=(
[meeting]="1"
[monitor]="2"
[voice]="3"
[cardtable]="4"
[paperless]="5"
)
```
### 步骤3:解析过滤参数,确定允许的菜单编号
**位置**:函数内部,SERVICE_NAME_MAP 定义之后
**新增内容**
```bash
# 解析过滤参数
local allowed_numbers=()
if [ -n "$filter_services" ]; then
# 将逗号分隔的服务名称转换为对应的菜单编号
IFS=',' read -ra SERVICE_ARRAY <<< "$filter_services"
for service in "${SERVICE_ARRAY[@]}"; do
# 去除空格
service=$(echo "$service" | xargs)
if [[ -n "${SERVICE_NAME_MAP[$service]}" ]]; then
allowed_numbers+=("${SERVICE_NAME_MAP[$service]}")
else
log "WARN" "未知服务名称: $service,已忽略"
fi
done
# 如果没有有效的服务名称,则显示全部
if [ ${#allowed_numbers[@]} -eq 0 ]; then
log "INFO" "未检测到有效的服务名称,显示全部服务选项"
allowed_numbers=({1..5})
fi
else
# 未传参或空参数,显示全部服务
allowed_numbers=({1..5})
fi
```
### 步骤4:根据过滤结果构建菜单选项
**位置**:替换原有的菜单构建代码
**修改内容**
```bash
# 根据允许的编号构建菜单选项
local options=()
for num in "${allowed_numbers[@]}"; do
if [[ -n "${SERVICE_LABEL[$num]}" ]]; then
options+=(
"$num"
"${SERVICE_LABEL[$num]} (${SERVICE_DESC[$num]})"
"off"
)
fi
done
# 检查是否有可选项
if [ ${#options[@]} -eq 0 ]; then
log "ERROR" "没有可用的服务选项"
return 1
fi
```
### 步骤5:更新主脚本调用方式(可选)
**文件**`new_auto.sh`
**调用示例**
```bash
# 默认显示全部服务
deploy_services ""
# 指定服务
# deploy_services "meeting,monitor"
# deploy_services "$deploy_services_type"
```
---
## 测试场景
### 场景1:不传参(默认全部)
```bash
deploy_services ""
```
**预期结果**:显示全部5个服务选项
### 场景2:指定单个服务
```bash
deploy_services "meeting"
```
**预期结果**:只显示"预定系统"选项
### 场景3:指定多个服务
```bash
deploy_services "meeting,monitor,voice"
```
**预期结果**:只显示"预定系统"、"运维集控系统"、"语音转录系统"选项
### 场景4:包含无效服务名
```bash
deploy_services "meeting,invalid,monitor"
```
**预期结果**:警告无效服务名,只显示"预定系统"和"运维集控系统"选项
### 场景5:全部无效服务名
```bash
deploy_services "invalid1,invalid2"
```
**预期结果**:警告并显示全部服务选项
---
## 实施状态
- [x] 步骤1:修改函数签名,添加参数接收
- [x] 步骤2:建立服务名称映射
- [x] 步骤3:实现参数解析逻辑
- [x] 步骤4:修改菜单构建逻辑
- [x] 步骤5:更新主脚本调用(可选)
- [ ] 测试验证各场景
---
## 备注
- 保持原有交互流程不变
- 参数分隔符使用英文逗号
- 未知服务名称输出警告但继续执行
# 单运维系统部署主脚本需求文档
## 代码路径
- 主脚本:[自动化部署脚本/x86架构/新统一平台/new_auto_monitor.sh]
## 功能需求
### 功能目标
**目标:** 当前主脚本只部署运维系统所需相关服务,需去除无关的容器部署。
### 需求描述
#### 调用逻辑
- 调用方式:
- 在主脚本中调整`middleware_type`调用传参
```bash
# 运维系统部署中间件只需部署mysql、redis、emqx、fdfs、ngrok、nginx
middleware_type="mysql redis emqx fdfs ngrok nginx" install_middleware
```
- 在主脚本调整`deploy_services`调用传参
```ignorelang
# 默认全部(不传参或空)
deploy_services ""
# 指定服务
deploy_services "monitor,cardtable,paperless"
deploy_services "$deploy_services_type"
```
## 规范文档
- 代码规范: `Docs/PRD/01规范文档/_PRD_规范文档_代码规范.md`
- 问题总结: `Docs/PRD/01规范文档/_PRD_问题总结_记录文档.md`
- 方法总结: `Docs/PRD/01规范文档/_PRD_方法总结_记录文档.md`
- 文档规范: `Docs/PRD/01规范文档/_PRD_规范文档_文档规范.md`
- 测试规范: `Docs/PRD/01规范文档/_PRD_规范文档_测试规范.md`
---
\ No newline at end of file
# 独立运维系统部署主脚本 - 计划执行文档
## 需求概述
调整 `new_auto_monitor.sh` 脚本中的传参,使其专门用于部署运维系统。
---
## 代码路径
- **目标脚本**`自动化部署脚本/x86架构/新统一平台/new_auto_monitor.sh`
---
## 实现步骤
### 步骤1:确认中间件传参
**位置**:脚本中间件部署调用部分
**当前状态**
```bash
# 部署中间件服务(mysql, redis, emqx, fdfs, ngrok, nginx)
middleware_type="mysql redis emqx fdfs ngrok nginx" install_middleware
```
**状态**:✅ 已符合需求(去除 nacos)
### 步骤2:调整 deploy_services 传参
**位置**:脚本服务部署调用部分
**修改前**
```bash
deploy_services
```
**修改后**
```bash
# 指定运维系统服务
deploy_services "monitor,cardtable,paperless"
```
**服务说明**
- `monitor` → 运维集控系统 (python_x86)
- `cardtable` → 电子桌牌服务 (cardtable_x86)
- `paperless` → 无纸化信令服务 (paperless_x86)
---
## 运维系统服务列表
| 服务名称 | 菜单编号 | 对应函数 | 描述 |
|---------|---------|---------|------|
| monitor | 2 | python_x86 | 运维集控系统 |
| cardtable | 5 | cardtable_x86 | 电子桌牌服务 |
| paperless | 4 | paperless_x86 | 无纸化信令服务 |
---
## 运维系统中间件列表
| 中间件 | 用途 |
|-------|------|
| mysql | 数据库 |
| redis | 缓存 |
| emqx | MQTT 消息队列 |
| fdfs | 分布式文件存储 |
| ngrok | 内网穿透 |
| nginx | 反向代理 |
**说明**:去除了 `nacos`(服务注册中心,预定系统需要)
---
## 调用示例
```bash
# 方式1:直接指定服务
deploy_services "monitor,cardtable,paperless"
# 方式2:通过变量传递
deploy_services_type="monitor,cardtable,paperless"
deploy_services "$deploy_services_type"
# 方式3:只部署运维集控系统
deploy_services "monitor"
```
---
## 实施状态
- [x] 步骤1:确认中间件传参(已符合需求)
- [x] 步骤2:调整 deploy_services 传参
---
## 备注
- 其他函数(malan、deploy_jdk_host、start_java_meeting_service、ntp_uos、add_crontab_job)保持不变
- 交互菜单会根据传参只显示指定的服务选项
...@@ -795,6 +795,7 @@ function cardtable_x86() { ...@@ -795,6 +795,7 @@ function cardtable_x86() {
#-------------------------------服务部署选择-start-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- #-------------------------------服务部署选择-start--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function deploy_services() { function deploy_services() {
local filter_services="$1" # 接收过滤参数(服务名称列表,逗号分隔)
local IP=$(hostname -I | awk '{print $1}' | cut -d' ' -f1) local IP=$(hostname -I | awk '{print $1}' | cut -d' ' -f1)
# ======================================== # ========================================
...@@ -825,6 +826,17 @@ function deploy_services() { ...@@ -825,6 +826,17 @@ function deploy_services() {
[5]="电子桌牌通信服务" [5]="电子桌牌通信服务"
) )
# ========================================
# 📋 服务名称到菜单编号的映射
# ========================================
declare -A SERVICE_NAME_MAP=(
[meeting]="1"
[monitor]="2"
[voice]="3"
[paperless]="4"
[cardtable]="5"
)
log "INFO" "🔍 正在检查 SERVICE_MAP 中引用的所有函数..." log "INFO" "🔍 正在检查 SERVICE_MAP 中引用的所有函数..."
local all_funcs=() local all_funcs=()
...@@ -850,22 +862,64 @@ function deploy_services() { ...@@ -850,22 +862,64 @@ function deploy_services() {
return 1 return 1
fi fi
# 构建 whiptail 选项 # ========================================
# 🎯 解析过滤参数,确定允许的菜单编号
# ========================================
local allowed_numbers=()
if [ -n "$filter_services" ]; then
log "INFO" "📋 收到服务过滤参数: $filter_services"
# 将逗号分隔的服务名称转换为对应的菜单编号
IFS=',' read -ra SERVICE_ARRAY <<< "$filter_services"
for service in "${SERVICE_ARRAY[@]}"; do
# 去除空格
service=$(echo "$service" | xargs)
if [[ -n "${SERVICE_NAME_MAP[$service]}" ]]; then
allowed_numbers+=("${SERVICE_NAME_MAP[$service]}")
log "INFO" "✅ 添加服务: $service → 编号 ${SERVICE_NAME_MAP[$service]}"
else
log "WARN" "⚠️ 未知服务名称: $service,已忽略"
fi
done
# 如果没有有效的服务名称,则显示全部
if [ ${#allowed_numbers[@]} -eq 0 ]; then
log "INFO" "📋 未检测到有效的服务名称,显示全部服务选项"
allowed_numbers=(1 2 3 4 5)
fi
else
# 未传参或空参数,显示全部服务
log "INFO" "📋 未传过滤参数,显示全部服务选项"
allowed_numbers=(1 2 3 4 5)
fi
# ========================================
# 📝 根据允许的编号构建菜单选项
# ========================================
local options=() local options=()
for i in {1..5}; do for num in "${allowed_numbers[@]}"; do
if [[ -n "${SERVICE_LABEL[$num]}" ]]; then
options+=( options+=(
"$i" "$num"
"${SERVICE_LABEL[$i]} (${SERVICE_DESC[$i]})" "${SERVICE_LABEL[$num]} (${SERVICE_DESC[$num]})"
"off" "off"
) )
fi
done done
# 检查是否有可选项
if [ ${#options[@]} -eq 0 ]; then
log "ERROR" "❌ 没有可用的服务选项"
return 1
fi
# 显示多选菜单(第一级界面) # 显示多选菜单(第一级界面)
# 根据选项数量动态调整高度
local menu_height=$((12 + ${#options[@]} * 2))
local choices local choices
choices=$(whiptail --title "🔹 服务部署中心" \ choices=$(whiptail --title "🔹 服务部署中心" \
--backtitle "当前服务器 IP: $IP" \ --backtitle "当前服务器 IP: $IP" \
--checklist "\n请选择要部署的服务(使用空格勾选,支持多选):" \ --checklist "\n请选择要部署的服务(使用空格勾选,支持多选):" \
18 80 6 \ "$menu_height" 80 6 \
"${options[@]}" \ "${options[@]}" \
3>&1 1>&2 2>&3) 3>&1 1>&2 2>&3)
......
...@@ -1204,7 +1204,11 @@ function getLatestVersion() { ...@@ -1204,7 +1204,11 @@ function getLatestVersion() {
middleware_type="mysql redis emqx fdfs ngrok nacos nginx" install_middleware middleware_type="mysql redis emqx fdfs ngrok nacos nginx" install_middleware
ntp_uos ntp_uos
malan malan
deploy_services # deploy_services 调用方式:
# 1. 默认显示全部服务:deploy_services ""
# 2. 指定服务:deploy_services "meeting,monitor,voice"
# 3. 通过变量:deploy_services "$deploy_services_type"
deploy_services ""
log "INFO" "正在重启docker服务,请耐心等待。" log "INFO" "正在重启docker服务,请耐心等待。"
$sudoset systemctl restart docker $sudoset systemctl restart docker
sleep 120 sleep 120
......
...@@ -1206,7 +1206,11 @@ function getLatestVersion() { ...@@ -1206,7 +1206,11 @@ function getLatestVersion() {
deploy_jdk_host deploy_jdk_host
start_java_meeting_service start_java_meeting_service
malan malan
deploy_services # deploy_services 调用方式:
# 默认全部(不传参或空)
# deploy_services ""
# 指定运维系统服务
deploy_services "monitor,cardtable,paperless"
add_crontab_job add_crontab_job
#检查中间件版本 #检查中间件版本
getLatestVersion getLatestVersion
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论