Files
ccdi/docs/reports/implementation/2026-05-08-ccdi-function-prod-script.md
2026-05-08 13:32:07 +08:00

3.2 KiB

生产统一脚本实施记录

保存路径确认

  • 本次为生产部署与启停脚本改动,实施记录保存到 docs/reports/implementation/,符合仓库实施文档目录规范。
  • 生产脚本保存到 deploy/ccdi_function.sh,与既有生产部署脚本位于同一目录,便于上线包或生产目录统一维护。

修改目标

  • 新增一个生产统一入口脚本 ccdi_function.sh
  • 脚本需要支持 deployrestartstop
  • deploy 集成生产备份、部署、重启流程,参考 deploy/deploy-release-prod.sh
  • restartstop 集成生产后端进程控制流程,参考 deploy/start-java-backend-prod.sh

修改内容

  • 新增 deploy/ccdi_function.sh
    • 使用 /bin/sh 写法,避免服务器执行 sh ccdi_function.sh 时出现 Bash 专属语法兼容问题。
    • 保留脚本顶部生产配置区,可直接配置 BACKEND_JAVA_HOMEAPP_HOMEJAR_NAMESPRING_PROFILES_ACTIVEJAVA_OPTSAPP_ARGSSTOP_WAIT_SECONDS
    • deploy 支持显式传入上线包路径:./ccdi_function.sh deploy /path/to/ccdi_YYYYMMDD.zip
    • deploy 未传上线包路径时,自动使用脚本同级目录下唯一的 .zip 文件,并排除 dist.zip
    • 上线包根层校验 ruoyi-admin.jardist.zip
    • dist.zip 解压后校验 dist/index.html
    • 部署前备份当前 backend/frontend/backups/YYYYMMDDHHMMSS/
    • 后端部署为原子替换 backend/ruoyi-admin.jar
    • 前端部署为清空 frontend/ 后复制 dist/ 内文件。
    • deploy 完成文件部署后直接调用脚本内 restart_action,不再依赖外部 start-java-backend-prod.sh
    • restart 流程为 stop_backendstart_backendfollow_logs
    • stop 使用 ps -ef 扫描当前生产目录对应的 backend/ruoyi-admin.jar 进程,忽略 <defunct> 行,并清理 PID 文件。
    • restartdeploy 启动成功后持续输出 backend/logs/backend-console.log,按 Ctrl+C 仅退出日志查看,不停止后端进程。

使用方式

生产目录示例:

上线目录/
├── ccdi_function.sh
├── backend/
├── frontend/
└── ccdi_YYYYMMDD.zip

部署:

./ccdi_function.sh deploy
./ccdi_function.sh deploy /path/to/ccdi_YYYYMMDD.zip

重启:

./ccdi_function.sh restart

停止:

./ccdi_function.sh stop

验证记录

  • 执行 sh -n deploy/ccdi_function.sh
    • 结果:通过
    • 说明:脚本 Shell 语法正确。
  • 执行 sh deploy/ccdi_function.sh --help
    • 结果:通过
    • 说明:帮助信息正常输出,包含 deployrestartstop 三个入口。
  • 使用 /tmp 构造最小生产目录、旧 backend/、旧 frontend/、上线压缩包、假 Java 和假日志输出命令后执行 deploy
    • 结果:通过
    • 说明:已验证旧文件备份、新 Jar 覆盖、前端 dist/ 文件部署、部署后重启流程。
  • 在同一 /tmp 验证环境执行 stop
    • 结果:通过
    • 说明:已验证 stop 可停止由统一脚本启动的后端进程。

影响范围

  • 仅新增生产统一脚本与本实施记录。
  • 不修改 Java 业务代码、前端业务代码、数据库脚本和既有生产脚本。