4.4 KiB
4.4 KiB
项目变更日志 (LogBook)
2025-05-23 (基于对话日期推断)
CI/CD 方案最终确定与配置
- CI/CD 平台选择:
- 最终确定使用 OneDev 作为CI/CD平台,以获得更佳的可视化管理和操作体验。
- 代码仓库将使用 OneDev 内置的 Git 服务,不再依赖外部 Gitea。
- OneDev Agent 配置:
- Agent 将在部署服务器上以 Docker 容器模式运行。
- 采用 Docker-out-of-Docker (DooD) 模式,通过将宿主机的
/var/run/docker.sock挂载到 Agent 容器,使 Agent 能够控制宿主机 Docker 来执行镜像构建和docker-compose操作。 DEPLOYMENT_GUIDE.md已更新,包含 Dockerized Agent 的详细配置步骤,包括数据持久化和作为服务运行的方法。
- 部署流水线 (
.onedev-buildspec.yml):- 流水线将负责:
- 从 OneDev 内置 Git 仓库检出代码。
- 从 OneDev 项目 Secrets 中获取敏感配置 (如数据库密码)。
- 动态生成
.env文件供docker-compose.yml使用。 - 在 Agent 所在的宿主机上本地构建后端和前端应用的 Docker 镜像。
- 使用项目根目录下的
docker-compose.yml和本地构建的镜像,通过docker-compose up -d命令启动或更新所有服务 (MySQL, EMQX, Backend App, Frontend App)。
- 流水线将负责:
- 数据库自动初始化:
- 修改了
docker-compose.yml文件中mysql-db服务的配置。 - 通过卷挂载,将项目中的
springboot-init-main/sql/mqtt_power.sql脚本映射到 MySQL 容器的/docker-entrypoint-initdb.d/init_schema.sql。 - 这将确保在 MySQL 容器首次启动且数据目录为空时,自动执行 SQL 脚本以创建所有必要的数据库表结构。
- 修改了
- 相关文件更新:
DEPLOYMENT_GUIDE.md:已全面更新以反映纯 OneDev 方案、Dockerized Agent 配置及数据库自动初始化。.onedev-buildspec.yml:已创建,定义了上述本地构建和部署的流水线。docker-compose.yml:已修改,支持数据库自动初始化脚本挂载。deploy.sh:已被删除 (原 Gitea + 脚本方案的产物)。
2024-08-13
- 调整 CI/CD 方案至 OneDev (本地构建):
- 用户反馈 OneDev builds 页面无内容,怀疑配置文件问题。
- 分析现有
.onedev-buildspec.yml包含多个冲突的 Job 定义 (部分推送外部 registry,部分本地构建,部分通过 SSH 部署)。 - 决策: 简化
.onedev-buildspec.yml为单个 Job (Build and Deploy mqtt_power on myagent)。 - 新 Job 逻辑:
- 在用户指定的 OneDev Agent (
myagent) 上运行。 - 由
main或master分支的代码推送触发。 - 检出代码。
- 从 OneDev Job Secrets 生成
.env文件,包含数据库和 MQTT 连接信息。 - 使用项目根目录的
docker-compose.yml在 Agent 本地构建后端 (springboot-app) 和前端 (nextjs-app) Docker 镜像。 - 使用
docker-compose up -d启动所有服务 (MySQL, EMQX, 后端应用, 前端应用)。
- 在用户指定的 OneDev Agent (
- 操作: 完全重写了
.onedev-buildspec.yml以实现上述逻辑。 - 强调了用户需要检查 Agent 名称匹配、OneDev Job Secrets 配置、
docker-compose.yml的构建上下文和镜像名、Agent 环境(Docker, Docker Compose, sh/bash shell),以及触发器分支的正确性。
2025-05-24 (基于对话日期推断)
- 修复 OneDev 构建规范 (
.onedev-buildspec.yml):- 问题: OneDev 报错 "Malformed build spec"。
- 原因分析:
- Job 未显式声明其需要访问的 Job Secrets。
- 在 Shell 脚本中访问 Job Secrets 的语法不正确 (使用了
${get_job_secret('...')}而非 OneDev Shell 环境推荐的@secret:...@)。
- 解决方案:
- 在
.onedev-buildspec.yml的 Job 定义中添加了jobSecrets列表,明确列出所有必需的 Secret 名称 (如DB_ROOT_PASSWORD,DB_NAME等)。 - 修改了 Shell 脚本中的命令,将所有 Secrets 访问方式从
${get_job_secret('...')}更改为@secret:SECRET_NAME@。
- 在
- 影响: 修正后的构建规范现在应该能被 OneDev 正确解析和执行。
- 提醒用户检查 OneDev Job Secrets 配置与构建脚本中声明的名称一致性,以及 Agent 和服务名称的配置。