Spring Web Compose CI/CD
为三仓交付模型生成基于证据的配置:后端仓和前端仓只构建、测试并推送镜像;部署仓保存 Compose、入口代理和部署流程。
输入与识别
确认后端、前端和部署仓路径;仅处理当前任务明确授权的仓库。缺少部署仓时,只生成应用仓产物和部署仓初始化清单。
对每个仓库运行:
python scripts/scan_component_context.py <项目根目录>检查扫描器列出的构建文件、锁文件、Spring 配置、已有 Docker/Compose 文件、环境变量示例和本地开发 Compose。不要读取或输出秘密文件内容。
根据任务读取所需规则:组件镜像见 component-rules.md,CI/CD 与编排见 cicd-compose-rules.md,生产运维见 operations-security.md。
工作流
- 识别仓库角色、运行时、实际端口、构建产物、已有反向代理约定和本地开发中间件。
- 为后端或静态前端仓生成/补丁更新
Dockerfile、.dockerignore、必要的运行配置和 GitHub Actions 工作流;保留已有有效约定。 - 为部署仓生成/补丁更新镜像引用的
compose.yaml、环境示例、入口代理、部署/备份/恢复脚本和部署工作流。应用镜像必须通过 digest 部署。 - 将本地开发中检测到的数据库、缓存、消息队列或对象存储按实际服务名、镜像版本和持久化需求纳入 Compose。对不确定或冲突的中间件停止并请求确认。
- 验证构建配置、Dockerfile 路径和 Compose 渲染;工具可用时运行项目测试、镜像构建、Nginx/Caddy 配置检查和健康探测。
必须遵守的行为
- 后端使用项目的 Maven/Gradle 包装器、匹配的 Java 工具链、多阶段构建、非 root 用户和 exec 格式
ENTRYPOINT。 - 仅在已有 Actuator 探针时使用 Spring 存活/就绪端点。仅在需要时新增
application-prod.yml,用环境变量传递配置;不复制或烘焙秘密。 - 前端仅支持产出静态文件的构建。使用实际包管理器、构建脚本和输出目录,使用 Nginx 运行镜像;将
VITE_*、VUE_APP_*和同类变量视为公开信息。 - 对 SSR、Nuxt/Next 服务端运行、Node 常驻服务或多个无法区分的应用停止并请求明确的运行时方案。
- PR 只测试、构建和验证镜像。
main构建使用最小权限GITHUB_TOKEN推送 GHCR,并以 GitHub App 向部署仓发送repository_dispatch。 - 部署仓自动更新 staging;production 必须由人工选择已验证 digest 并通过 GitHub Environment 审批。禁止以
latest部署。 - 除入口外,不发布后端、中间件和数据服务端口。应用通过 Compose 服务名连接依赖,绝不使用
localhost。 - 不将密码、令牌、私钥、密钥库、实际
.env或生产数据提交到仓库、镜像层或日志。数据库迁移与镜像回滚是独立风险。
停止条件
出现多个可运行应用且目标不明确、Java/运行时版本冲突、前端不是静态构建、中间件版本或持久化需求冲突、或修改入口代理会改变既有生产路由时,停止并请求用户指示。