Ubuntu 上基于 GitLab 的代码审查实践
一 环境与基础配置
- 运行环境建议:Ubuntu 20.04 LTS+,Git ≥ 2.30,Docker ≥ 20.10,GitLab ≥ 14.0。这些版本在 GitLab CI、Runner 与流水线能力上更稳定,便于落地审查与自动化。
- Ubuntu 安装与初始化 GitLab CE(示例):
- 安装包:sudo dpkg -i gitlab-ce_14.5.2-ce.0_amd64.deb
- 配置 external_url:编辑 /etc/gitlab/gitlab.rb
- 使配置生效:sudo gitlab-ctl reconfigure && sudo gitlab-ctl restart
- 初始密码:查看 /etc/gitlab/initial_root_password(首次 reconfigure 后 24 小时自动删除),或进入 Rails 控制台设置 root 密码。
二 分支策略与保护规则
- 推荐分支模型:以 Git Flow 为参考,长期分支包含 main/master、develop、release/,特性开发使用 feature/,缺陷修复使用 hotfix/。
- 保护关键分支(Settings → Repository → Protected Branches):
- 禁止直接向 main/master、develop、release/ 推送;仅允许通过 Merge Request 合并。
- 仅授予 Maintainers/Masters 合并权限;必要时将 Allowed to push 设为 No one,强制评审后合并。
- 可结合 Approvals 设置最少批准数、指定必需审批人/组,确保关键路径受控。
三 代码审查流程与日常操作
- 开发提交与推送
- 从 develop 创建特性分支:git checkout -b feature/xxx
- 编码与本地自测后提交:git add . && git commit -m “feat(xxx): add …” && git push origin feature/xxx
- 创建合并请求 MR(Merge Request)
- 源分支:feature/xxx → 目标分支:develop
- 填写 Title/Description,使用模板说明变更背景、测试步骤、影响范围;指派 Assignee/Reviewers,关联 Issue/Milestone/Label
- 评审要点:逻辑正确性、边界与异常、性能与安全、可测试性与覆盖率、命名与风格一致性
- 评审与迭代
- 评审者在 Changes 逐行评论、提出改进建议或批准;作者根据反馈 amend/rebase 后推送,形成闭环
- 冲突处理:本地 rebase/merge 解决后再次推送,MR 会自动更新差异
- 合并与发布
- 当 CI 流水线通过、审批满足且 讨论已解决,由 Maintainer 执行合并;必要时启用 Squash and merge 保持目标分支提交历史整洁。
四 自动化质量门禁与报告
- 使用 GitLab CI 运行测试、静态检查、构建等,并在 MR 小部件中展示结果,未通过则禁止合并。示例 stages:
- stages: [test, build, security, deploy]
- 在关键作业设置 allow_failure: false,作为“质量门禁”
- 集成 SonarQube 进行代码质量与重复度分析(Ubuntu + Docker 示例)
- 部署 Postgres 与 SonarQube(注意 vm.max_map_count ≥ 262144、fs.file-max ≥ 65536 等系统参数)
- Community 版如需多分支分析,可安装社区分支插件(如 sonarqube-community-branch-plugin),并在 sonar.properties 配置 Java Agent 后重启
- GitLab CI 中调用 sonar-scanner,上传报告;可在项目设置 SONAR_TOKEN 等变量,结合质量门禁策略控制合并
- 安全扫描与合规
- 启用 SAST/Secret Detection/Dependency Scanning 等内置安全模板,报告作为 MR 审批参考;旗舰版可将 SAST 结果纳入评审流程与自动化建议。
五 提效工具与团队规范
- IDE 与 CLI 提效
- JetBrains 系列 IDE内置 GitLab 插件,支持在 IDE 内查看 MR、评论、冲突解决与直接提交变更
- 使用 glab(GitLab CLI)创建与管理 MR:glab auth login → glab mr create;可配置 git 别名如 git config --global alias.mr ‘!glab mr create’
- 团队规范与自动化
- Commit Message 规范:采用 Angular 规范(type(scope): subject),如 feat(user): add login validation
- .gitlab/merge_request_templates/ 统一 MR 描述模板;使用 .gitlab-ci.yml 统一流水线
- CODEOWNERS 指定目录/文件的必需审批组,保障合规与架构关注点受审
- 引入 Dangerbot 自动检查:提交信息格式、单测覆盖阈值、变更文件规模等,减少人工巡检成本。