代码提交审核流程策划
一、 总体设计流程¶
二、 代码提交操作¶
在gitlab上创建的项目设置成Private,普通用户对这个项目就只有pull权限,不能直接进行push。
开发人员通过git pull gitlab 仓库代码修改,修改完成后必须先push到Gerrit远程仓库的refs/for/*分支上,等待审核。
Bash
### 代码开发提交实例
# 1. 克隆 GitLab 仓库
git clone https://gitlab.com/your_project/repo.git
# 2. 添加 Gerrit 作为远程仓库
cd repo #进入项目目录
git remote add gerrit https://gerrit.yourcompany.com/your_project/repo.git
git remote -v # git remote -v 命令可以检查是否添加成功
# 3. 提交代码到 Gerrit 进行评审
# 完成开发后,可以将本地的修改推送到 Gerrit 进行代码评审。Gerrit 通常会使用 refs/for/ 前缀将修改提交到特定分支进行审核,而不是直接合并。
#假设要提交到 master 分支,可以这样操作:
git push gerrit HEAD:refs/for/master #这条命令会将当前分支的更改推送到 Gerrit 的 refs/for/master,然后触发代码评审流程。
三、 Gerrit 触发 jenkins 自动构建¶
需要Gerrit + jenkins 集成,使用如下插件:
3.1. Gerrit Trigger Plugin¶
Gerrit Trigger Plugin 是 Gerrit 和 Jenkins 集成的核心插件,主要用于在 Gerrit 中发生某些事件时触发 Jenkins 构建任务。
- 功能:
- 监听 Gerrit 的事件,如代码提交、变更更新、代码评审状态等。
- 根据特定的 Gerrit 项目和分支自动触发 Jenkins 构建任务。
- 支持多种触发条件,如提交到特定分支、代码提交人、提交内容等。
3.2. Git Plugin¶
Git Plugin 是 Jenkins 中的核心插件,用于在构建任务中从 Git 仓库(如 Gerrit 或 GitLab)中拉取代码。
3.3. Gerrit Code Review Plugin¶
Gerrit Code Review Plugin 允许 Jenkins 直接与 Gerrit 进行交互,如将 Jenkins 构建的结果反馈到 Gerrit 的代码评审系统中。
- 功能:
- 构建完成后,Jenkins 可以将测试结果自动提交到 Gerrit,更新评审的状态(如验证通过/未通过)。
- Jenkins 可以自动在 Gerrit 中给代码变更打标签(如 "+1 Verified" 或 "-1 Verified")。
四、 jenkins job 反馈到gerrit¶
Jenkins执行构建并反馈结果:
- Jenkins 执行构建任务(如编译、单元测试等)。
- 构建完成后,Jenkins 使用 Gerrit Trigger Plugin、Gerrit Code Review Plugin 将构建结果(如 "+1 Verified" 或 "-1 Verified")反馈到 Gerrit 的代码评审中。
五、 Gerrit 触发静态代码检查工具¶
六、 Gerrit 进行人工审核¶
当jenkin 自动构建成功后,将由人工进行审核,审核通过后,将投票进行merge。
七、 Gerrit merge 代码同步到gitlab¶
需要使用Gerrit replication plugin插件:
插件功能:
- 在 Gerrit 中的代码变更(如合并)后,自动将变更推送到 GitLab。
- 支持通过 SSH 或 HTTP 将代码推送到 GitLab 远程仓库。
- 可以配置多个远程 Git 仓库同步,适用于需要同步到多个目标仓库的场景。
Bash
# Step1: SSH 配置 Gerrit 和 gitlab 互信:
# 确保 Gerrit 服务器有正确的 SSH 凭据,用于访问 GitLab 仓库。
# 将 Gerrit 的 SSH 公钥添加到 GitLab 项目的 Deploy Keys,以便 Gerrit 可以通过 SSH 推送代码到 GitLab。
# step2: 配置 replication.config 文件:
# 在 Gerrit 的配置目录下(通常位于 $GERRIT_SITE/etc/replication.config),配置同步到 GitLab 的目标仓库。
# 示例 replication.config 配置文件内容:
[remote "gitlab"]url = git@gitlab.com:your_group/your_repo.git # GitLab 仓库的 SSH 地址
push = +refs/heads/*:refs/heads/* # 将 Gerrit 中的所有分支推送到 GitLab。
push = +refs/tags/*:refs/tags/*
mirror = true # 将所有本地的推送反映到 GitLab,确保代码完全同步。
timeout = 30
threads = 3
authGroup = Registered-Users #定义哪些用户的提交会触发同步
# step3: 测试同步:
# 完成配置后,当在 Gerrit 中合并代码时,replication 插件会自动触发,将代码同步推送到 GitLab。
八、待讨论问题¶
- Gerrit 和 Gitlab 服务器同一网段
部署服务器现在有125 和251 两个网段,需要解决跨网段访问?
- Gerrit 和Gitlab 是否部署在不同的实体机, 实现代码冗余备份?
- 目前的方案很依赖于Gerrit
九、参考文档¶
Gerrit+jenkins 集成: https://blog.csdn.net/qq_37733540/article/details/124059401
https://www.cnblogs.com/kevingrace/p/5651447.html