# CI/CD构建门禁规范 ## 🎯 规范目标 建立自动化质量门禁,确保每次代码提交都经过严格验证,防止低质量代码进入主干分支,提升系统稳定性和开发效率。 ## 🔒 门禁层级 ### 1. 提交前门禁(Pre-commit) **触发时机**:`git commit` 执行前 **验证内容**: - ESLint 代码规范检查 - Prettier 代码格式化 - 简单的单元测试(快速执行) **工具配置**: - Husky + lint-staged - 配置文件:`.husky/pre-commit` ### 2. 推送前门禁(Pre-push) **触发时机**:`git push` 执行前 **验证内容**: - 完整的单元测试套件 - 构建验证(`npm run build`) - 集成测试(核心流程) **工具配置**: - Husky pre-push hook - 配置文件:`.husky/pre-push` ### 3. CI流水线门禁(CI Pipeline) **触发时机**:代码推送到远程仓库后 **验证内容**: - 完整的测试套件(单元+集成+端到端) - 代码覆盖率检查(分阶段目标:Q1≥30%,Q2≥50%,Q3≥80%) - 安全扫描(SAST) - 构建产物验证 - 部署到测试环境 **工具配置**: - Spug CI/CD 流水线 - Gitea Webhook 触发 ### 4. 发布前门禁(Release Gate) **触发时机**:准备发布到生产环境前 **验证内容**: - 生产环境冒烟测试 - 性能基准测试 - 安全合规检查 - 回滚预案验证 ## ⚙️ 具体配置要求 ### ESLint 配置 ``` ### Java 后端配置 ```xml org.apache.maven.plugins maven-compiler-plugin 3.8.1 com.github.spotbugs spotbugs-maven-plugin 4.2.0 ``` ### 数据库迁移配置 ```yaml # application.yml Flyway配置 flyway: enabled: true locations: classpath:db/migration baseline-on-migrate: true ``` javascript // .eslintrc.js 关键配置 module.exports = { plugins: ['import'], rules: { // 确保导入的模块实际存在 'import/no-unresolved': 'error', // 确保导入的成员实际存在 'import/named': 'error', // 禁止未使用的导入 'import/no-unused-modules': 'warn' } }; ``` ### Husky 配置 ```bash # .husky/pre-commit #!/bin/sh npm run lint-staged # .husky/pre-push #!/bin/sh npm run test:unit && npm run build ``` ### lint-staged 配置 ```json // package.json { "lint-staged": { "*.{js,vue}": ["eslint --fix", "prettier --write"], "*.{css,scss}": ["stylelint --fix", "prettier --write"] } } ``` ## 🚫 失败处理机制 ### 自动处理 - **构建失败**:自动阻止 PR 合并 - **测试失败**:标记 PR 为失败状态 - **安全漏洞**:立即通知安全团队 ### 人工处理 - **紧急修复**:可申请临时绕过(需架构师批准) - **误报处理**:提交豁免申请并说明原因 - **规则调整**:通过 RFC 流程申请规则变更 ## 📊 监控与度量 ### 关键指标 - 门禁通过率 ≥ 95% - 平均修复时间 ≤ 2小时 - 误报率 ≤ 5% ### 报告机制 - 每日门禁失败统计 - 周度质量趋势报告 - 月度规则优化建议 ## 🔄 持续改进 ### 规则演进 - 每月评审门禁规则有效性 - 根据项目需求调整检查强度 - 引入新的质量检查工具 ### 团队培训 - 新成员入职培训包含门禁规范 - 定期分享最佳实践案例 - 建立常见问题解决方案库 --- **文档版本**:v1.0 **最后更新**:2026年4月24日 **负责人**:陈琳(文档专家) **技术方案**:诸葛亮(架构师) **适用范围**:HIS 系统所有项目