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

feat(container): 重构容器更新脚本并增强交互式部署功能

- 引入全局变量和日志函数,支持控制台和文件双重日志输出
- 新增容器描述映射,提升用户选择体验
- 重构交互式模式为四步骤流程:容器选择、文件检查、平台检测、容器停止
- 增强镜像文件搜索逻辑,支持多路径查找和手动输入
- 自动检测服务器平台类型(新统一平台/传统平台)
- 优化容器命名逻辑,自动递增容器编号避免冲突
- 增加部署前信息确认和日志记录功能
- 补充说明文档和需求文档,完善操作指引和功能描述
上级 079adfda
# -*- coding: utf-8 -*-
"""
根据模板用例 Excel,在同一个工作簿中新建 Sheet,并从 JSON 配置文件中读取用例数据写入。
后续只需要维护 JSON 文件即可复用。
"""
import os
import json
from copy import copy
from openpyxl import load_workbook
from openpyxl.styles import Alignment
# ===== 1. 配置路径(改为相对当前脚本的路径) =====
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_PATH = os.path.join(BASE_DIR, "用例文件", "兰州中石化项目测试用例20251203.xlsx")
NEW_SHEET_NAME = "兰州登录MQTT用例" # 新建的 Sheet 名
CASES_FILE = os.path.join(BASE_DIR, "config", "兰州用例.json") # 用例配置文件(JSON)
# 与你表头对应的顺序(根据截图)
headers_order = [
"序号", "功能模块", "功能类别", "用例编号", "功能描述", "用例等级",
"功能编号", "用例名称", "预置条件", "操作步骤", "JSON", "预期结果",
"测试结果", "测试结论", "日志截屏", "备注",
]
def load_cases():
"""从 JSON 配置文件加载用例列表。"""
if not os.path.exists(CASES_FILE):
raise FileNotFoundError(f"找不到用例配置文件: {CASES_FILE}")
with open(CASES_FILE, "r", encoding="utf-8") as f:
data = json.load(f)
if not isinstance(data, list):
raise ValueError("用例配置文件的根节点必须是列表(List)")
return data
def main():
if not os.path.exists(TEMPLATE_PATH):
print("找不到模板文件:", TEMPLATE_PATH)
return
try:
cases = load_cases()
except Exception as e:
print("加载用例配置失败:", e)
return
wb = load_workbook(TEMPLATE_PATH)
# 以第一个sheet作为模板
template_sheet = wb.worksheets[0]
# 如果新sheet已存在就先删除
if NEW_SHEET_NAME in wb.sheetnames:
ws_new = wb[NEW_SHEET_NAME]
wb.remove(ws_new)
ws_new = wb.create_sheet(NEW_SHEET_NAME)
# ===== 复制表头(仅值 + 简单样式) =====
# 假设模板表头在第3行(根据截图),如有偏差可以改成2或其它
header_row_index = 3
for col_idx, cell in enumerate(template_sheet[header_row_index], start=1):
new_cell = ws_new.cell(row=1, column=col_idx, value=cell.value)
if cell.has_style:
new_cell.font = copy(cell.font)
new_cell.fill = copy(cell.fill)
new_cell.border = copy(cell.border)
new_cell.alignment = copy(cell.alignment)
new_cell.number_format = cell.number_format
ws_new.freeze_panes = "B2"
# ===== 写入用例数据(预置条件/操作步骤自动换行,JSON列统一留空) =====
row = 2
for case in cases:
for col_idx, header in enumerate(headers_order, start=1):
val = case.get(header, "")
if header in ("预置条件", "操作步骤") and isinstance(val, str):
# 把分号+空格变成换行,Excel 中会显示为多行
val = val.replace("; ", "\n")
if header == "JSON":
# JSON 列统一留空
val = ""
ws_new.cell(row=row, column=col_idx, value=val)
row += 1
# ===== 对“预置条件”和“操作步骤”开启自动换行 =====
col_idx_pre = headers_order.index("预置条件") + 1
col_idx_steps = headers_order.index("操作步骤") + 1
for r in range(1, row):
cell_pre = ws_new.cell(row=r, column=col_idx_pre)
cell_steps = ws_new.cell(row=r, column=col_idx_steps)
cell_pre.alignment = Alignment(wrap_text=True, vertical="top")
cell_steps.alignment = Alignment(wrap_text=True, vertical="top")
# 调整列宽
for col in ws_new.columns:
max_len = 0
col_letter = col[0].column_letter
for c in col:
v = c.value
if v is None:
continue
l = len(str(v))
if l > max_len:
max_len = l
ws_new.column_dimensions[col_letter].width = min(max_len + 2, 60)
wb.save(TEMPLATE_PATH)
print("已在原文件中创建新Sheet:", NEW_SHEET_NAME)
if __name__ == "__main__":
main()
\ No newline at end of file
# 容器升级需求说明文档
## 📋 概述
本系统由三个核心 Shell 脚本组成,用于实现容器化服务的远程部署与升级管理:
1. **`remote_update.sh`**:远程升级控制脚本,负责从主服务器向目标服务器传输镜像和部署脚本,并触发远端部署流程,路径:E:\GithubData\自动化\ubains-module-test\辅助工具\脚本工具\远程容器更新\remote_update.sh
2. **`container_update.sh`**:容器部署执行脚本,支持交互式和命令行两种模式,可单独执行进行本地容器部署,路径:E:\GithubData\自动化\ubains-module-test\辅助工具\脚本工具\远程容器更新\container_update.sh
3. **`upload_to_nas.sh`**:镜像打包上传脚本,负责将容器镜像打包并上传至公司 NAS 网盘,路径:E:\GithubData\自动化\ubains-module-test\辅助工具\脚本工具\远程容器更新\upload_to_nas.sh
### 背景
目前系统支持多种容器服务(Java、Redis、EMQX、Python、Nacos、Nginx)的部署与升级,需要区分两种平台环境:
- **新统一平台**:使用 `/data/` 目录结构
- **传统平台**:使用 `/var/www/` 目录结构
**现有功能**
- ✅ 远程升级指定服务器的容器版本 `[已实现]`
1. java容器远程更新(传统平台和新统一平台已验证通过)
2. uemqx容器(传统平台和新统一平台已验证通过)
3. uredis容器(传统平台和新统一平台已验证通过)
4. upython容器()
5. nacos容器(新统一平台已验证通过)
6. nginx容器(新统一平台已验证通过)
7. mysql容器(未验证)
- ✅ 自动校验目标服务器架构(仅支持 x86)`[已实现]`
- ✅ 自动递增容器编号避免命名冲突 `[已实现]`
- ✅ 支持多种容器类型的差异化部署 `[已实现]`
- ✅ 支持预设服务器和手动输入服务器信息(IP/端口/用户名/密码)`[已实现]`
- ✅ EMQX 文件同步(配置、数据、日志目录)`[已实现]`
- ✅ Nginx 文件同步(配置、HTML、证书目录)`[已实现]`
- ✅ 自动校验目标服务器是新统一平台目录还是传统平台目录,通过宿主机上的目录来判断,存在/data/services目录的是新统一平台,不存在的则是传统平台 `[已实现]`
- ✅ 自动校验目标服务器上的容器是否已更新 `[已实现]`
- ✅ 远程更新完成后需要将目标服务器上的镜像包清理 `[已实现]`
- ⏸️ Python 文件同步 `[功能保留,暂不启用]`
- ✅ 将主服务器上的容器镜像及部署脚本打包上传至网盘 `[已实现]`
- ✅ container_update.sh 支持单独执行(交互式模式)`[已实现]`
**待实现功能**
- ❌ 最终将sh脚本改为电脑命令行工具上可执行的脚本格式 `[待最后开发]`
---
## 🎯 功能实现总览
> 最后更新时间:2025-12-07
### 远程升级功能 (`remote_update.sh`)
| 功能模块 | 描述 | 状态 |
|----------|------|------|
| 服务器选择 | 支持预设服务器列表和手动输入(IP/端口/用户名/密码) | ✅ 已实现 |
| 自定义端口 | 支持自定义 SSH 端口(默认 22) | ✅ 已实现 |
| 架构校验 | 校验目标服务器是否为 x86 架构 | ✅ 已实现 |
| 镜像传输 | 自动传输镜像文件和部署脚本 | ✅ 已实现 |
| 容器停止 | 自动停止远端旧容器 | ✅ 已实现 |
| 平台识别 | 自动检测目标服务器平台类型(检测 /data/services 目录) | ✅ 已实现 |
| 版本校验 | 自动校验远端容器镜像版本是否已更新 | ✅ 已实现 |
| EMQX 同步 | 同步 EMQX 配置、数据、日志目录 | ✅ 已实现 |
| Python 同步 | 同步 Python 代码和配置 | ⏸️ 暂停 |
| Nginx 同步 | 同步 Nginx 配置、HTML、证书 | ✅ 已实现 |
| 容器编号 | 自动递增容器编号 | ✅ 已实现 |
| 远端执行 | 调用远端部署脚本 | ✅ 已实现 |
| 镜像清理 | 部署完成后自动清理远端镜像包和部署脚本 | ✅ 已实现 |
### 容器部署功能 (`container_update.sh`)
| 容器类型 | 新平台 | 传统平台 | 备注 |
|----------|--------|----------|------|
| Java (ujava) | ✅ | ✅ | 完整端口映射和目录挂载 |
| Redis (uredis) | ✅ | ✅ | 支持配置迁移和端口释放 |
| EMQX (uemqx) | ✅ | ✅ | 多端口映射,完整目录挂载 |
| Python (upython) | ✅ | ✅ | 容器部署正常,暂不同步文件 |
| Nacos (unacos) | ✅ | ❌ | 仅支持新平台,单机模式 |
| Nginx (unginx) | ✅ | ❌ | 仅支持新平台,完整目录挂载 |
### 交互式部署功能 (`container_update.sh` 交互式模式)
| 步骤 | 功能描述 | 状态 |
|------|----------|------|
| 步骤1 | 询问更新哪个容器 | ✅ 已实现 |
| 步骤2 | 检查压缩包中是否存在所需镜像和配置文件 | ✅ 已实现 |
| 步骤3 | 判断当前服务器是传统平台还是新统一平台 | ✅ 已实现 |
| 步骤4 | 检查并停止正在运行的同类型容器(不删除) | ✅ 已实现 |
| 步骤5 | 备份原有配置文件 | ❌ 待开发 |
| 步骤6 | 更新配置文件并替换IP地址为当前服务器IP | ❌ 待开发 |
| 步骤7 | 执行容器部署操作 | ✅ 已实现 |
| 步骤8 | 验证容器部署是否成功 | ✅ 已实现 |
| 步骤9 | 记录操作日志到当前目录(日志审计) | ✅ 已实现 |
### 镜像上传功能 (`upload_to_nas.sh`)
| 功能模块 | 描述 | 状态 |
|----------|------|------|
| 目录打包 | 将指定目录压缩为 tar.gz 格式 | ✅ 已实现 |
| NAS 挂载 | 自动挂载公司 SMB 网盘 | ✅ 已实现 |
| 进度显示 | 打包和上传过程显示进度条 | ✅ 已实现 |
| 密码加密 | 网盘密码使用 base64 加密存储 | ✅ 已实现 |
### 待开发功能
| 功能 | 描述 | 状态 |
|------|------|------|
| 批量部署 | 一次升级多台服务器 | ❌ 待开发 |
| 版本管理 | 记录部署版本和时间 | ❌ 待开发 |
---
\ No newline at end of file
## 📝 业务操作流程
### 一、远程容器升级操作流程
### 二、镜像打包上传网盘操作流程
以下是将容器镜像打包并上传至公司 NAS 网盘的完整操作步骤:
#### 步骤 1:启动打包上传脚本
在镜像目录下执行上传脚本:
```bash
cd /path/to/container-images
./upload_to_nas.sh
```
或指定要打包的目录:
```bash
./upload_to_nas.sh /data/temp/container-images
```
#### 步骤 2:等待目录打包
脚本会自动将目录压缩为 tar.gz 格式,并显示打包进度:
```
[2025-12-08 10:30:00] [INFO] ==================================================================
[2025-12-08 10:30:00] [INFO] 容器镜像打包上传工具
[2025-12-08 10:30:00] [INFO] ==================================================================
[2025-12-08 10:30:00] [INFO] 源目录: /data/temp/container-images
[2025-12-08 10:30:00] [INFO] 打包文件: /tmp/container-images_20251208_103000.tar.gz
[2025-12-08 10:30:00] [INFO] 目标网盘: \\192.168.9.9\home\容器镜像包
[2025-12-08 10:30:00] [INFO] ==================================================================
[2025-12-08 10:30:01] [INFO] [步骤 1/3] 打包目录...
[2025-12-08 10:30:01] [INFO] 开始打包目录: /data/temp/container-images
1.2GiB 0:00:24 [50.0MiB/s] [================================>] 100%
[2025-12-08 10:30:25] [INFO] ✅ 打包完成,文件大小: 1.2G
```
#### 步骤 3:等待 NAS 挂载
脚本自动挂载公司 NAS 网盘:
```
[2025-12-08 10:30:26] [INFO] [步骤 2/3] 挂载 NAS...
[2025-12-08 10:30:26] [INFO] 正在挂载 NAS: //192.168.9.9/home
[2025-12-08 10:30:27] [INFO] ✅ NAS 挂载成功
```
#### 步骤 4:等待文件上传
上传过程会显示进度条:
```
[2025-12-08 10:30:28] [INFO] [步骤 3/3] 上传文件...
[2025-12-08 10:30:28] [INFO] 开始上传文件到 NAS...
[2025-12-08 10:30:28] [INFO] 源文件: /tmp/container-images_20251208_103000.tar.gz
[2025-12-08 10:30:28] [INFO] 目标: //192.168.9.9/home/容器镜像包/container-images_20251208_103000.tar.gz
1.2GiB 0:01:30 [13.6MiB/s] [================================>] 100%
[2025-12-08 10:32:00] [INFO] ✅ 上传完成!
[2025-12-08 10:32:00] [INFO] 文件路径: \\192.168.9.9\home\容器镜像包\container-images_20251208_103000.tar.gz
[2025-12-08 10:32:00] [INFO] 文件大小: 1.2G
```
#### 步骤 5:确认上传结果
```
[2025-12-08 10:32:01] [INFO] 清理临时文件...
[2025-12-08 10:32:01] [INFO] ==================================================================
[2025-12-08 10:32:01] [INFO] 🎉 全部完成!
[2025-12-08 10:32:01] [INFO] ==================================================================
```
#### 网盘信息
| 配置项 | 值 |
|--------|-----|
| 服务器地址 | `\\192.168.9.9\home` |
| 账号 | 陈泽键 |
| 上传目录 | 容器镜像包/ |
| 协议 | SMB/CIFS |
#### 命令行选项
```bash
# 显示帮助
./upload_to_nas.sh -h
# 指定打包文件名
./upload_to_nas.sh -n java_container_v6 /data/temp/java
# 指定上传子目录
./upload_to_nas.sh -d 测试包 /data/temp/test
```
---
\ No newline at end of file
## 📝 业务操作流程
### 一、远程容器升级操作流程
以下是运维人员在主服务器上执行远程容器升级的完整操作步骤:
#### 步骤 1:启动远程升级脚本
在主服务器的镜像目录下,执行远程升级脚本:
```bash
cd /path/to/container-images
./remote_update.sh
```
#### 步骤 2:选择要升级的容器类型
脚本会显示可选的容器列表,根据提示输入对应编号:
```
可选择的容器:
[1] ujava - Java 服务容器
[2] uemqx - EMQX 消息队列容器
[3] uredis - Redis 缓存容器
[4] upython - Python 服务容器
[5] nacos - Nacos 注册中心容器
[6] unginx - Nginx 反向代理容器
请输入容器编号: _
```
#### 步骤 3:选择目标服务器
脚本提供两种方式选择目标服务器:
**方式一:选择预设服务器**
```
可选择的目标服务器:
[1] 标准版预定运维服务器 (192.168.5.48 root)
[2] 阿曼项目预定服务器 (192.168.5.67 root)
[3] 标准版预定运维测试发布服务器 (192.168.5.47 root)
[0] 手动输入服务器信息
请输入服务器编号: _
```
**方式二:手动输入服务器信息(输入 0)**
```
请输入目标服务器 IP 地址: 192.168.1.100
请输入 SSH 端口号 [默认 22]: 22
请输入登录用户名 [默认 root]: root
请输入登录密码: ********
```
#### 步骤 4:等待架构校验
脚本会自动连接目标服务器,校验其 CPU 架构是否为 x86 系列:
```
[2025-12-07 10:30:00] [INFO] 开始校验远端架构 (192.168.1.100)
[2025-12-07 10:30:02] [INFO] 远端架构 x86_64 校验通过
```
> ⚠️ 如果目标服务器为 ARM 架构,脚本将终止执行并提示错误。
#### 步骤 5:等待文件传输
脚本自动将镜像文件和部署脚本传输到目标服务器:
```
[2025-12-07 10:30:05] [INFO] 创建远端目录 /home/containerUpdate
[2025-12-07 10:30:06] [INFO] 传输镜像与部署脚本到远端目录
java1.8.0_472.tar.gz 100% 1.2GB 50.0MB/s 00:24
container_update.sh 100% 45KB 10.0MB/s 00:00
```
#### 步骤 6:确认旧容器处理
脚本会自动检测并停止远端的旧版本容器:
```
[2025-12-07 10:31:00] [INFO] 查找并停止远端旧容器
[2025-12-07 10:31:02] [INFO] 检测到旧容器 ujava2,执行停止
[2025-12-07 10:31:05] [INFO] ✅ 旧容器 ujava2 已停止
```
#### 步骤 7:自动检测平台类型
脚本会自动检测目标服务器的平台类型(通过检查 `/data/services` 目录是否存在):
```
[2025-12-07 10:30:10] [INFO] 自动检测目标服务器平台类型...
[2025-12-07 10:30:11] [INFO] ✅ 检测到 /data/services 目录存在,自动识别为新统一平台
```
| 检测结果 | 平台类型 | 目录结构 |
|----------|----------|----------|
| 存在 `/data/services` | 新统一平台 | `/data/` 目录 |
| 不存在 `/data/services` | 传统平台 | `/var/www/` 目录 |
> 💡 如果自动检测失败,脚本会回退到手动确认模式。
#### 步骤 8:等待资产同步(部分容器)
根据容器类型,脚本会同步相关配置文件和数据目录:
| 容器 | 同步内容 | 状态 | 备注 |
|------|----------|------|------|
| EMQX | 配置文件、数据目录、日志目录 | ✅ 已实现 | 自动备份远端现有目录 |
| Python | ~~代码目录、配置文件~~ | ⏸️ 暂停 | **暂不同步,功能保留待后续启用** |
| Nginx | 配置文件、HTML、证书目录 | ✅ 已实现 | 仅支持新统一平台 |
```
[2025-12-07 10:31:10] [INFO] 准备同步 EMQX 目录
[2025-12-07 10:31:12] [INFO] 远端目录已备份到 /data/middleware/emqx_backup_20251207_103112
[2025-12-07 10:31:15] [INFO] 使用 rsync 同步 EMQX 目录
[2025-12-07 10:31:30] [INFO] EMQX 目录同步完成
```
#### 步骤 9:等待远端部署执行
脚本在远端服务器上执行容器部署:
```
[2025-12-07 10:31:35] [INFO] 新容器名称确定为 ujava3
[2025-12-07 10:31:36] [INFO] 开始执行远端部署脚本
[2025-12-07 10:31:40] [INFO] 🔍 检查 Java 镜像是否存在...
[2025-12-07 10:31:42] [INFO] ❌ 镜像不存在,开始加载离线包...
[2025-12-07 10:32:00] [INFO] 🎉 镜像加载成功
[2025-12-07 10:32:02] [INFO] 🚀 正在启动 Java 容器: ujava3 ...
[2025-12-07 10:32:10] [INFO] ✅ Java 容器启动成功,等待初始化...
[2025-12-07 10:32:18] [INFO] 🎉 Java 服务部署完成!
```
#### 步骤 10:确认部署结果
部署完成后,脚本会输出容器状态信息:
```
NAMES STATUS PORTS
ujava3 Up 8 seconds 0.0.0.0:8085->8085/tcp, ...
[2025-12-07 10:32:20] [INFO] 远端部署执行完成
```
#### 步骤 11:自动清理远端镜像包
部署完成后,脚本会自动清理远端服务器上的镜像包和部署脚本:
```
[2025-12-07 10:32:21] [INFO] 开始清理远端镜像包...
[2025-12-07 10:32:22] [INFO] ✅ 远端镜像包清理完成
[2025-12-07 10:32:22] [INFO] 已删除镜像包: /home/containerUpdate/java1.8.0_472.tar.gz
[2025-12-07 10:32:22] [INFO] 已删除部署脚本: /home/containerUpdate/container_update.sh
[2025-12-07 10:32:22] [INFO] 远程升级流程结束
```
> 💡 清理过程会自动删除镜像包、部署脚本,如果目录为空还会删除整个目录。
---
\ No newline at end of file
## 📝 业务操作流程
### 一、远程容器升级操作流程
### 三、本地容器部署操作流程(交互式模式)
#### 业务场景
技术人员拿到运维人员通过 `upload_to_nas.sh` 脚本上传到网盘的压缩文件后,在项目服务器上解压缩,解压缩后执行 `./container_update.sh` 命令进行容器更新操作。
**典型使用流程**
1. 运维人员在主服务器执行 `upload_to_nas.sh` 打包上传镜像到网盘
2. 技术人员从网盘下载压缩包到项目服务器
3. 解压缩:`tar -xzf container-images_xxx.tar.gz`
4. 进入解压目录:`cd container-images_xxx`
5. 执行部署脚本:`./container_update.sh`
#### 交互式模式需求流程
| 步骤 | 功能描述 | 状态 |
|------|----------|------|
| 步骤1 | 询问更新哪个容器 | ✅ 已实现 |
| 步骤2 | 判断压缩包中是否存在该容器更新所需的镜像以及新增文件 | ✅ 已实现 |
| 步骤3 | 判断当前服务器是传统平台还是新统一平台 | ✅ 已实现 |
| 步骤4 | 判断当前服务器上是否存在容器在运行,如果有就先停止(不做删除操作) | ✅ 已实现 |
| 步骤5 | 备份原有配置文件 | ❌ 待开发 |
| 步骤6 | 更新新的配置文件到指定目录,并将新配置文件内的IP地址改为当前服务器的IP地址 | ❌ 待开发 |
| 步骤7 | 进行容器更新部署操作 | ✅ 已实现 |
| 步骤8 | 查看容器是否部署完成 | ✅ 已实现 |
| 步骤9 | 记录所有操作的日志信息保存到当前目录下为日志审计文件 | ✅ 已实现 |
#### 交互式模式(推荐)
直接运行脚本,无需参数:
```bash
./container_update.sh
```
##### 步骤 1:选择要更新的容器
```
[2025-12-08 10:00:00] [INFO] ==================================================================
[2025-12-08 10:00:00] [INFO] 容器部署工具 - 交互式模式
[2025-12-08 10:00:00] [INFO] ==================================================================
[2025-12-08 10:00:00] [INFO] 日志文件: /path/to/container_update_20251208_100000.log
[2025-12-08 10:00:00] [INFO] 脚本目录: /path/to/container-images
[2025-12-08 10:00:00] [INFO] ==================================================================
[2025-12-08 10:00:00] [INFO] ==================================================================
[2025-12-08 10:00:00] [INFO] 步骤 1/4:选择要更新的容器
[2025-12-08 10:00:00] [INFO] ==================================================================
[2025-12-08 10:00:00] [INFO] 可选择的容器类型:
[1] ujava - Java 服务容器
[2] uemqx - EMQX 消息队列容器
[3] uredis - Redis 缓存容器
[4] upython - Python 服务容器
[5] unacos - Nacos 注册中心容器
[6] unginx - Nginx 反向代理容器
请输入容器编号 (1-6): 1
[2025-12-08 10:00:02] [INFO] ✅ 已选择容器类型: ujava (Java 服务容器)
```
##### 步骤 2:检查所需镜像和配置文件
```
[2025-12-08 10:00:02] [INFO] ==================================================================
[2025-12-08 10:00:02] [INFO] 步骤 2/4:检查所需镜像和配置文件
[2025-12-08 10:00:02] [INFO] ==================================================================
[2025-12-08 10:00:02] [INFO] 检查 ujava 容器所需文件...
[2025-12-08 10:00:02] [INFO] 所需镜像文件: java1.8.0_472.tar.gz
[2025-12-08 10:00:02] [INFO] ✅ 找到镜像文件: /path/to/java1.8.0_472.tar.gz
[2025-12-08 10:00:02] [INFO] 文件大小: 1.2G
[2025-12-08 10:00:02] [INFO] ✅ 部署脚本存在: /path/to/container_update.sh
```
##### 步骤 3:检测服务器平台类型
```
[2025-12-08 10:00:03] [INFO] ==================================================================
[2025-12-08 10:00:03] [INFO] 步骤 3/4:检测服务器平台类型
[2025-12-08 10:00:03] [INFO] ==================================================================
[2025-12-08 10:00:03] [INFO] 自动检测平台类型...
[2025-12-08 10:00:03] [INFO] 检测依据: /data/services 目录是否存在
[2025-12-08 10:00:03] [INFO] ✅ 检测到 /data/services 目录存在
[2025-12-08 10:00:03] [INFO] ✅ 识别为: 新统一平台 (使用 /data/ 目录结构)
当前识别为 [新统一平台],是否正确? (y/n) [默认 y]: y
[2025-12-08 10:00:04] [INFO] ✅ 平台类型确认: new
```
##### 步骤 4:检查并停止正在运行的容器
```
[2025-12-08 10:00:04] [INFO] ==================================================================
[2025-12-08 10:00:04] [INFO] 步骤 4/4:检查并停止正在运行的容器
[2025-12-08 10:00:04] [INFO] ==================================================================
[2025-12-08 10:00:04] [INFO] 检查是否存在 ujava 类型的容器在运行...
[2025-12-08 10:00:04] [INFO] 发现以下 ujava 类型的容器:
- ujava1 (状态: exited)
- ujava2 (状态: running)
[2025-12-08 10:00:04] [WARN] ⚠️ 检测到容器 ujava2 正在运行
是否停止该容器以便进行更新? (y/n) [默认 y]: y
[2025-12-08 10:00:05] [INFO] 正在停止容器 ujava2...
[2025-12-08 10:00:08] [INFO] ✅ 容器 ujava2 已停止
[2025-12-08 10:00:08] [INFO] ✅ 新容器将命名为: ujava3
```
##### 步骤 5:确认并执行部署
```
[2025-12-08 10:00:08] [INFO] ==================================================================
[2025-12-08 10:00:08] [INFO] 部署信息确认
[2025-12-08 10:00:08] [INFO] ==================================================================
[2025-12-08 10:00:08] [INFO] 容器类型: ujava (Java 服务容器)
[2025-12-08 10:00:08] [INFO] 新容器名: ujava3
[2025-12-08 10:00:08] [INFO] 平台类型: new
[2025-12-08 10:00:08] [INFO] 镜像文件: /path/to/java1.8.0_472.tar.gz
[2025-12-08 10:00:08] [INFO] 旧容器: ujava2 (已停止)
[2025-12-08 10:00:08] [INFO] ==================================================================
确认开始部署? (y/n) [默认 y]: y
[2025-12-08 10:00:10] [INFO] ==================================================================
[2025-12-08 10:00:10] [INFO] 开始执行部署
[2025-12-08 10:00:10] [INFO] ==================================================================
[2025-12-08 10:00:10] [INFO] 开始部署 ujava (容器: ujava3, 平台: new)
```
##### 步骤 6:部署完成
```
[2025-12-08 10:01:00] [INFO] ==================================================================
[2025-12-08 10:01:00] [INFO] 部署流程结束
[2025-12-08 10:01:00] [INFO] ==================================================================
[2025-12-08 10:01:00] [INFO] 日志文件已保存到: /path/to/container_update_20251208_100000.log
```
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论