Jenkins 流水线配置
部署跑通后的持续构建发布(一屏通读,右侧「本页目录」定位)。CI 不是首次登录验收的前置条件。凭据使用临时只读 Token,禁止管理员账号入库。
00 部署方案
| 形态 | 参考 | 典型 Job |
|---|---|---|
| Linux 单体 | 客户生产「领先」 | backend / web / uniapp / goview |
| 微服务 | ruoyi-office-ms-deploy | 单服务 / P0P1 批量 / web / uniapp |
完整 Jenkinsfile 在 ruoyi-office-customer-deploy/ 对应客户或 ms-deploy 目录;本文只写阶段结构与必改占位符。
对齐已跑通的 Ubuntu 单机生产形态(Docker 后端 + Nginx 静态)。
建议 Job
| Job | 仓库 | 产物 |
|---|---|---|
*-backend | ruoyi-office | 构建 -Pboot JAR → 宿主机目录 → docker build → compose up -d 重建 yudao-server |
*-web | ruoyi-office-vben | pnpm build:antd → /data/nginx/html/web |
*-uniapp | ruoyi-office-uniapp | H5 → /data/nginx/html/app |
*-goview(可选) | ruoyi-office-ui-go-view | → /data/nginx/html/goview |
现场必改占位符
| 项 | 说明 |
|---|---|
| Git URL / 分支 | 客户仓库与发布分支 |
| Credentials ID | 如 codeup-https(只读 Token) |
| 部署路径 | /data/app、/data/nginx/html/...、/data/compose |
| 生产 env | 建议挂载 /data/jenkins/<customer>-env/,构建时注入 VITE_* |
| 健康检查 | 容器网:http://yudao-server:48080/actuator/health |
运行约定
| 项 | 建议 |
|---|---|
| Executors | 1(与 OnlyOffice 同机时) |
| 内存 | Web 构建 Node 容器可设 7g;Jenkins 限堆;构建前可临时停 OnlyOffice |
| Compose | 使用 docker:27-cli 挂 docker.sock 执行 recreate |
| 品牌 CSS 注入 | 若 Job 覆盖 index.html,发布后需再执行客户 fix_branding_*.py(见上线文档) |
访问 Jenkins
公网仅 22/80 时:
bash
ssh -L 8080:127.0.0.1:8080 <USER>@<SERVER_IP>初始化脚本思路
交付包常提供 scripts/jenkins_setup_pipelines.py:创建 Job、绑定凭据、写入 Jenkinsfile。执行前改默认 IP / Job 名;不要把管理员密码写进脚本仓库。
对齐交付包 ruoyi-office-ms-deploy/jenkins/。
流水线资产
| 文件(示例名) | 说明 |
|---|---|
*-service.Jenkinsfile | 参数化单服务:选模块 → -P cloud -pl :artifactId → Dockerfile → sync-images.sh → SSH 到 ro-app compose up |
*-backend-cloud.Jenkinsfile | P0/P1 批量 |
*-web.Jenkinsfile | 管理端 → /data/nginx/html/web |
*-uniapp.Jenkinsfile | H5 → /data/nginx/html/app |
现场创建 Job 时,将硬编码演示 IP / 仓库改为客户 Git 与 <RO_APP_IP>。
约定
| 项 | 建议 |
|---|---|
| 部署资产 | /data/deploy/ruoyi-office-ms-deploy/ |
| 源码(可选) | /data/src/ruoyi-office;Codeup 模块不全时用 USE_LOCAL_SRC=true + tar 同步 |
| 发布目标 | <SSH_USER>@<RO_APP_IP> + scripts/sync-images.sh |
| 镜像 tag | 保留日期/BUILD_NUMBER,勿只靠 latest |
| 健康检查 | 业务多为 /admin/actuator/health;接受 200 或业务约定的 401 |
| Executors | ≥ 2,避免父子 Job 互相等待死锁 |
CI 节点要点
- Jenkins 容器挂载宿主机
/data+docker.sock - Jenkins → ro-app:SSH 密钥 +
rocky对 docker 的 NOPASSWD(按交付包) SPRING_CLOUD_NACOS_CONFIG_IMPORT_CHECK_ENABLED=false(若流水线已约定)- compose 各服务
SERVER_PORT与 discovery IP 正确
与首次部署关系
无 Jenkins 时用 scripts/build-images-from-jars.sh 即可完成登录验收。Jenkins 用于后续迭代发布。
| 现象 | 处理 |
|---|---|
| 子 Job 一直排队 / 死锁 | 独立 Job;executors ≥ 2;勿在唯一 executor 上 wait 自身 |
| 构建 OOM(单体同机 OO) | executor=1;构建前停 OnlyOffice;限制 Node/Jenkins 堆 |
| workspace 路径错 | 容器内路径 ≠ 宿主机;脚本应用宿主机 /data/jenkins/home/workspace/$JOB_NAME |
| Git 鉴权失败 | 检查 Credentials ID;轮换临时 Token;禁止管理员账号 |
| Codeup 缺模块 | USE_LOCAL_SRC + 运维机 tar 同步源码到 ro-ci |
| 部署后 web 演示条又出现 | 构建 env 未关 VITE_GLOB_DEMO_ENABLE;或需改 _app.config.js |
| 品牌 Logo 丢失 | Jenkins 覆盖 index.html 后需重跑 branding 注入脚本 |
| 健康检查失败 | 单体走容器服务名;微服务注意 actuator 路径差异 |
| sync-images / SSH 失败 | 核对 <SSH_USER>@RO_APP、密钥、docker 权限、防火墙私网 |
发布后检查
- 对应容器 / 静态目录已更新
curl登录或 health- 走 上线文档 抽查演示开关与租户品牌
