safety-eval-service/docs/build-tools2/README.md

237 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# GBS 镜像打包操作手册
## 目录概述
本目录包含 GBS 项目 Docker 镜像打包所需的全部配置和脚本。AI 会话加载本目录后,可立即执行打包操作,无需额外询问环境信息。
```
docs/build-tools2/
├── README.md # 本文档 (打包流程说明)
├── credentials.conf # 所有账号密码和环境配置
├── projects.conf # 各项目打包参数清单
├── build_push.py # 通用打包脚本 (Python, 本地执行)
├── Dockerfile.project # 项目自带 Dockerfile 示例 (JDK 基础镜像)
└── Dockerfile.template # 模板 Dockerfile (CentOS 7 + JDK 复制)
```
## 快速开始 (AI 会话指引)
当用户要求打包时,按以下步骤执行:
1. 读取 `credentials.conf` 获取所有连接信息
2. 读取 `projects.conf` 获取目标项目的 JAR 路径、应用名等参数
3. 确认 JAR 文件存在且为最新版本
4. 版本号递增 (基于 projects.conf 中的 latest_tag)
5. 执行 `build_push.py` 或直接用 paramiko 构建并推送
6. 返回完整镜像地址
## 打包架构
```
本地 Windows 构建服务器 (192.168.20.100) 阿里云 ACR
┌──────────┐ SSH/SFTP ┌──────────────────┐ docker push ┌────────────────────┐
│ JAR 文件 │ ─────────────────→│ Docker build │ ───────────────→│ 张家口 ACR │
│ Dockerfile│ │ - 拉取基础镜像 │ │ kilaa/zcloud-gbs- │
│ Python │ │ - COPY JAR │ │ operation │
│ 打包脚本 │ │ - docker build │ └────────────────────┘
└──────────┘ │ - docker push │
└──────────────────┘
```
## 两种打包模式
### 模式一: 项目自带 Dockerfile
适用于项目根目录有 Dockerfile 的情况(如 safety-eval-service
特点:
- Dockerfile 引用杭州 ACR 的 JDK 基础镜像: `jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/pub/jdk:1.8.0_202`
- JAR 放置路径: `{build_dir}/start/target/start.jar`
- 需要先登录杭州 ACR 拉取基础镜像
- 镜像大小约 870-910MB
远程构建目录结构:
```
/tmp/docker-build-{app_name}/
├── Dockerfile (从项目上传)
└── start/
└── target/
└── start.jar (从本地 JAR 上传,统一命名)
```
### 模式二: 模板 Dockerfile (CentOS 7 + JDK)
适用于没有项目 Dockerfile 的情况(如 zcloud-gbs-certificate
特点:
- 基础镜像: `centos:7`JDK 从主节点 `/opt/jdk1.8.0_202` 复制到构建上下文
- JAR 放置路径: `{build_dir}/target/*.jar`
- ENTRYPOINT 包含 Nacos、MySQL 等启动参数
- 镜像大小约 840-880MB
远程构建目录结构:
```
/tmp/docker-build-{app_name}/
├── Dockerfile (从 Dockerfile.template 上传)
├── jdk1.8.0_202/ (从 /opt/jdk1.8.0_202 复制)
└── target/
└── *.jar (从本地 JAR 上传)
```
## 打包流程详细步骤
### 1. 确认 JAR 文件
在本地 Windows 验证 JAR 文件存在:
```powershell
# 检查文件
Get-Item "E:\works\projects\<项目名>\...\target\*.jar" | Select-Object Name, Length, LastWriteTime
```
### 2. SFTP 上传 JAR 到构建服务器
通过 paramiko SSH 连接主节点 192.168.20.100SFTP 上传 JAR 文件。
JAR 大小通常 170-220MB上传速度约 1.0 MB/s耗时约 3-4 分钟。
### 3. 准备构建上下文
在远程服务器上:
- 创建临时目录 `/tmp/docker-build-{app_name}`
- 上传 Dockerfile
- 模板模式: 复制 JDK (`cp -r /opt/jdk1.8.0_202 {build_dir}/`)
### 4. ACR 登录
```bash
# 张家口 ACR (推送目标)
echo 'Kilaa@6666' | docker login --username=kilaa --password-stdin registry.cn-zhangjiakou.aliyuncs.com
# 杭州 ACR (拉取基础镜像,仅项目 Dockerfile 模式需要)
echo 'idurCT!rIq9EzISD' | docker login --username=10952138@qq.com --password-stdin jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com
```
### 5. Docker Build
```bash
docker build -t 'registry.cn-zhangjiakou.aliyuncs.com/kilaa/zcloud-gbs-operation:{app_name}-ota-{date}-{version}' {build_dir}
```
### 6. Docker Push
```bash
docker push 'registry.cn-zhangjiakou.aliyuncs.com/kilaa/zcloud-gbs-operation:{app_name}-ota-{date}-{version}'
```
### 7. 验证
```bash
docker pull registry.cn-zhangjiakou.aliyuncs.com/kilaa/zcloud-gbs-operation:{tag}
```
### 8. 清理
```bash
rm -rf /tmp/docker-build-{app_name}
```
## 镜像标签命名规则
格式: `{app_name}-ota-{YYYYMMDD}-{N}`
| 字段 | 说明 | 示例 |
|------|------|------|
| app_name | 应用名 (kebab-case) | jjb-saas-safety-eval |
| ota | 环境前缀 (当前统一) | ota |
| YYYYMMDD | 打包日期 | 20260703 |
| N | 当日版本号 (从 1 递增) | 12 |
完整示例: `jjb-saas-safety-eval-ota-20260703-12`
## 已打包项目
### safety-eval-service (安全评估服务)
| 配置项 | 值 |
|--------|-----|
| app_name | jjb-saas-safety-eval |
| JAR 路径 | `E:\works\projects\safety-eval-service\safety-eval-start\target\safety-eval-start-1.0-SNAPSHOT.jar` |
| Dockerfile | `E:\works\projects\safety-eval-service\Dockerfile` (项目自带) |
| 打包模式 | 项目 Dockerfile |
| 基础镜像 | `jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com/pub/jdk:1.8.0_202` |
| 最近标签 | `jjb-saas-safety-eval-ota-20260703-12` |
### zcloud-gbs-certificate (证书服务)
| 配置项 | 值 |
|--------|-----|
| app_name | zcloud-gbs-certificate |
| JAR 路径 | `E:\works\projects\zcloud_gbs_certificate\start\target\start.jar` |
| Dockerfile | 模板 (Dockerfile.template) |
| 打包模式 | 模板 Dockerfile |
| 基础镜像 | centos:7 + JDK 1.8.0_202 |
| 最近标签 | `zcloud-gbs-certificate-ota-20260701-2` |
## 通用打包脚本使用
```bash
# 使用项目自带 Dockerfile
python build_push.py \
--jar "E:\works\projects\safety-eval-service\safety-eval-start\target\safety-eval-start-1.0-SNAPSHOT.jar" \
--app jjb-saas-safety-eval \
--version 13 \
--project-dockerfile "E:\works\projects\safety-eval-service\Dockerfile"
# 使用模板 Dockerfile
python build_push.py \
--jar "E:\works\projects\zcloud_gbs_certificate\start\target\start.jar" \
--app zcloud-gbs-certificate \
--version 3
# 仅预览不执行
python build_push.py --jar <path> --app <name> --version 1 --dry-run
```
## K8s 部署命令
```bash
# 更新已有部署的镜像
kubectl set image deployment/{app_name} \
{app_name}={full_image} -n jjb-dragon
# 新建部署
kubectl create deployment {app_name} \
--image={full_image} -n jjb-dragon --replicas=1
# 查看部署状态
kubectl get pods -n jjb-dragon | grep {app_name}
# 查看 Pod 日志
kubectl logs -f deployment/{app_name}-deploy -n jjb-dragon --tail=100
```
## 常见问题
### Q: docker build 时拉取基础镜像失败
A: 确认已登录杭州 ACR: `docker login jjb-registry-registry.cn-hangzhou.cr.aliyuncs.com`
### Q: docker push 时提示 unauthorized
A: 确认已登录张家口 ACR: `docker login registry.cn-zhangjiakou.aliyuncs.com`
### Q: SSH 连接超时
A: 主节点网络偶尔不稳定,重试即可。
### Q: 应用启动后报 Nacos 连接失败
A: 项目 Dockerfile 模式下 ENTRYPOINT 不带 -D 参数Nacos 配置由 application-{profile}.yml 提供。确认 `spring.profiles.active` 对应正确环境,且 Nacos 地址在目标部署环境可达。
### Q: 如何确认镜像已推送成功
A: 在构建服务器执行 `docker pull {full_image}`,能拉取即成功。
## 环境依赖
- **Python 3.x** (本地 Windows)
- **paramiko** (Python SSH 库): `pip install paramiko`
- **构建服务器**: 192.168.20.100 (root/Zcloud@zcloud100)
- Docker 已安装
- JDK 1.8.0_202 已安装在 `/opt/jdk1.8.0_202`
- Maven 3.8.8 已安装在 `/opt/maven`