跳转至

代码提交审核流程策划

一、 总体设计流程

二、 代码提交操作

在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