【 运维这些事儿 】- Gerrit代码审查详

文章目录

    • 背景
    • 作用
    • 代码审查工具
      • Gerrit
        • 镜像构建
          • Dockerfile
        • 部署
        • 配置
      • Gitlab代码同步
        • ssh-agent
    • 相关概念
    • 常用命令
    • Git 配置
    • 使用 Git Review
      • 针对已有项目添加commit-msg,用于自动添加changeId
      • 添加源
      • 配置 `.gitreview`
      • 备注
        • 指定审核人
        • 自定义git命令
    • 开发使用
      • 代码审查

背景

团队成员需要对彼此的代码进行检查和评审,以确保代码质量和项目的稳健性。

作用

  • 发现自身代码缺陷
  • 提高团队整体代码质量
  • 互相了解业务
  • 保障业务稳定
  • 文档和标准化

代码审查工具

Gerrit

镜像构建

Dockerfile
FROM gerritcodereview/gerrit:3.8.1
MAINTAINER ycloud
ADD entrypoint.sh .
ADD reviewers.jar /var/gerrit/plugins/reviewers.jar
USER root
RUN chmod +x entrypoint.sh  && ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa -q && sudo sed -i '1i StrictHostKeyChecking no \nPubkeyAuthentication yes' /etc/ssh/ssh_config
ADD config /root/.ssh

拉取replication插件,

[root@ycloud gerrit]# ll
total 76
-rw-r--r-- 1 root root    77 Aug  8 09:57 config
-rw-r--r-- 1 root root   342 Aug  8 10:17 Dockerfile
-rw-r--r-- 1 root root   569 Aug  8 10:17 entrypoint.sh启动脚本调整-rw-rw-rw- 1 root root 64363 Jul 31 16:09 reviewers.jar
---
## 拉取replication插件
wget https://gerrit-ci.gerritforge.com/job/plugin-reviewers-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/reviewers/reviewers.jar---
## entrypoint.sh启动脚本调整
[root@ycloud gerrit]# cat entrypoint.sh 
#!/bin/bash -eexport JAVA_OPTS='--add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED'if [ ! -d /var/gerrit/git/All-Projects.git ] || [ "$1" == "init" ]
thenecho "Initializing Gerrit site ..."java $JAVA_OPTS -jar /var/gerrit/bin/gerrit.war init --batch --install-all-plugins -d /var/gerritjava $JAVA_OPTS -jar /var/gerrit/bin/gerrit.war reindex -d /var/gerrit
fiif [ "$1" != "init" ]
thenecho "Running Gerrit ..."exec /var/gerrit/bin/gerrit.sh run
fi
git clone --bare git@gitlab/***/*.git   ### 尝试拉取gitlab---
## ssh配置
[root@ycloud gerrit]# cat config 
Host *IdentityFile ~/.ssh/id_rsaPreferredAuthentications publickey

部署

部署方式是根据容器运行时,针对服务编写 Helm Chart 并运行在k8s集群,详细内容查看 where

配置

这里使用Ldap做权限控制,方便集中管理用户。

[ldap]server = ldap://openldap:389username=cn=admin,dc=ycloud,dc=netaccountBase = dc=ycloud,dc=netaccountPattern = (&(objectClass=person)(cn=${username}))accountFullName = displayNameaccountEmailAddress = mailaccountSshUserName = uidpassword = $DLo6XV1OSqmbZe8Ih%l!sFYU8

Gitlab代码同步

​ 通常使用 git 命令行工具来进行代码同步和管理。依赖的是 replication 插件, 这个插件允许在 Gerrit 中配置自动同步规则,以将代码自动同步到其他远程仓库。

创建 Gerrit 项目: 在 Gerrit 中创建一个项目,用于同步 GitLab 的代码。可以使用 Gerrit 的 Web 界面或命令行工具来创建项目。

配置 SSH 密钥: 确保 Gerrit 和 GitLab 能够正常通信。这里有两个问题

  • 如果使用pod创建的密钥对,那再pod重启之后将无效
  • 在宿主机上使用ssh-agent在pod内,也可以正常使用认证密钥,但是gerrit的jgit认证无法通过

同步代码到 Gerrit: 使用 Gerrit 插件实现同步。

进行代码审查: 在 Gerrit 中进行代码审查,团队成员可以对同步到 Gerrit 中的代码进行审查、添加评论和建议修改。

合并代码: 审查通过后,将代码合并到 GitLab 主仓库。这可以通过 Gerrit 提供的 “Submit” 功能来实现,也可以使用其他自动化方式来将代码合并到 GitLab。

保持同步: 确保继续同步 Gerrit 和 GitLab 之间的代码,以保持代码库的一致性。

ssh-agent

相关概念

:::info
Change
:::

一个Change包含一个Change-Id,这个Id就是通过我们拉取代码库的时候所拷贝的hooks(hooks/commit-msg)自动生成的;

包含一个或多个Patch Set,以及诸如Owner,Project,Target branch,Comments等信息;

:::info
Change-Id
:::

Change-Id是一串SHA-1字符串。有hooks自动生成在我们的commit message下面:

移除冗余代码Change-Id: I77033b4bb1ac72855a719bfee364e55eeb71e713

在一个project的每个branch中Change Id是唯一的。

:::info
Patch Set
:::

一个Patch Set就是一次commit,Gerrit会将其生成一个Branch暂存。Change中的每提交一个Patch Set表示这个Change的一个新的版本,自动覆盖前一个Patch Set, 默认情况下,仅最后一个Patch Set是有意义的。Code Review通过时,也仅仅是最后一个Patch Set会合并到指定的branch中。

Git工作原则:

  • 永远是基于远程库的最新代码工作,尽量每一步操作(特别是add/commit/push)都通过git pull --rebase获取一下当前最新版本;
  • 尽可能保证每一个Change的完整性以及独立性,且越小越好;

常用命令

  • clone 初始化项目
export PROJECT_NAME=ycloud
git clone "ssh://ycloud@review.7c.net/${PROJECT_NAME}" && (cd "${PROJECT_NAME}" && mkdir -p `git rev-parse --git-dir`/hooks/ && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://review.7c.net/tools/hooks/commit-msg && chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
  • 提交 review topic
git push origin HEAD:refs/for/refs/heads/main

:::note
需要特别注意,for 后面是待合并到的远端分支名。
:::

  • 下载 patchset(具体命令可以在 change 页面右侧 EDIT 右侧的符号点击后看到)

场景,如果前面提交请求被拒绝,或者还需要在原来的基础上修改,那么就需要下载原来的patchset,修改后再提交。

git fetch ssh://ycloud@review.7c.net:29418/buf refs/changes/69/469/1 && git checkout -b change-469 FETCH_HEAD

特别注意:在修改 patchset 后重新提交的时候一定要用 amend 提交,且不能修改 change id。

Git 配置

由于当前是使用的 IP 和端口直接访问 Gerrit 中的代码仓库,因此需要进行相关配置才可无缝使用 Git 。

:::info
为了便于直接使用网页中提供的 git 地址,可以在 gitconfig 文件中添加类似如下配置:
:::

[url "ssh://ycloud@review.7c.net/"]insteadOf =  http://ycloud@review.7c.net/a/insteadOf = https://ycloud@review.7c.net/a/insteadOf = ssh://ycloud@review.7c.net:29418/

加上以上配置后,拉取 git 的时候都会转换成 ssh 协议。

使用 Git Review

关于 Git Review 的介绍可以参见:https://www.mediawiki.org/wiki/Gerrit/git-review#

针对已有项目添加commit-msg,用于自动添加changeId

curl -Lo .git/hooks/commit-msg http://review.7c.net/tools/hooks/commit-msg
chmod u+x .git/hooks/commit-msg

添加源

git remote add gerrit ssh://review.7c.net/ycloud

配置 .gitreview

[gerrit]
host=review.7c.net# 项目名
project=ycloud# 目标分支
defaultbranch=develop

正常开发,注意commit功能聚合changeId(rebase处理)

需要小范围review或到dev上线前review时无需push

执行 git review,通过后几分钟后同步本地dev分支

git fetch -p
git rebase

无效分支删除后本地执行 git remote prune origin 进行同步

备注

指定审核人

git review --reviewers 1xxxx@163.com 2xxxx@163.com

自定义git命令

git config alias.reviewers "review --reviewers 1xxxx@163.com 2xxxx@163.com"

--global 可针对全部项目设置审核人
后续使用 git reviewers 命令即可

开发使用

gerrit在使用上,主要已git进行操作,在开发人员使用时,管理员用户需要提前将项目添加好,可以

1、所有用户: setting --> New SSH key

在这里插入图片描述

2、admin:主页点击BROWSE–>Repositories ,右上角有CREATE NEW按钮,新增项目
在这里插入图片描述

可以看到项目已经创建成功,但是需要替换为gitlab的git配置,所以直接将目录中 ops-system-menifest.git 删除,然后拉取gitlab上的项目,

⚡️: 查看gerrit中ops项目内容

在这里插入图片描述

这里的地址先改用 ip:port 来使用

4、admin: 新建项目想要同步gitlab,需要调整replication 配置信息

在这里插入图片描述

代码审查

⚡️: 这里用devops项目做测试,拉取项目调整并推送

在这里插入图片描述

📑: NOTE

需要注意的是,提交的时候多了个 for,如下所示推送到main分支:

git push origin HEAD:refs/for/refs/heads/main

查看Gerrit页面,可以看到一条需要我们去review的信息

在这里插入图片描述

在这里插入图片描述

审查无误确认 Code-Review +2 之后,点击 submit ,合并到master分支,合并成功之后replication,会同步到gitlab

在这里插入图片描述

Gitlab 查看提交记录确认无误

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89323.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx基于主机和用户访问控制以及缓存简单例子

一.基于主机访问控制 1.修改nginx.conf文件 2.到其他主机上测试 (1)191主机 (2)180主机 二.基于用户访问控制 1.修改nginx.conf文件 2.使用hpasswd为用户创建密码文件,并指定到刚才指定的密码文件webck 3.测试…

item_get_desc获得TB/TM商品描述

一、接口参数说明: item_get_desc-获得TB/TM商品描述,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_desc 名称类型必须描述keyString是调用key(…

Pytorch基于VGG cosine similarity实现简单的以图搜图(图像检索)

代码如下: from PIL import Image from torchvision import transforms import os import torch import torchvision import torch.nn.functional as Fclass VGGSim(torch.nn.Module):def __init__(self):super(VGGSim, self).__init__()blocks []blocks.append(t…

Python Opencv实践 - 图像缩放

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg_cat cv.imread("../SampleImages/cat.jpg", cv.IMREAD_COLOR) plt.imshow(img_cat[:,:,::-1])#图像绝对尺寸缩放 #cv.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) #指定Size大…

企业服务器数据库遭到malox勒索病毒攻击后如何解决,勒索病毒解密

网络技术的发展不仅为企业带来了更高的效率,还为企业带来信息安全威胁,其中较为常见的就是勒索病毒攻击。近期,我们公司收到很多企业的求助,企业的服务器数据库遭到了malox勒索病毒攻击,导致系统内部的许多重要数据被加…

大数据课程I3——Kafka的消息流与索引机制

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的消息流处理; ⚪ 掌握Kafka的索引机制; ⚪ 掌握Kafka的消息系统语义; 一、Kafka消息流处理 1. Producer 写入消息 流程说明: 1. producer 要向Kafka生产消息,需要先通过…

使用node搭建服务器,前端自己写接口,将vue或react打包后生成的dist目录在本地运行

使用node.jsexpress或者使用node.jspm2搭建服务器,将vue或react打包后生成的dist目录在本地运行 vue项目打包后生成的dist目录如果直接在本地打开index.html,在浏览器中会报错,无法运行起来。 通常我是放到后端搭建的服务上面去运行,当时前端…

命令模式(C++)

定义 将一个请求(行为)封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 应用场景 在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合——比…

jmeter提取token方式以及设置成全局变量(跨线程组传token值)方式

前言 今天Darren洋教大家如何使用jmeter中的插件来进行token值的提取与调用,今天Darren洋介绍两种jmeter提取token值的方式,一种是在当前线程组中直接提取token值,一种是跨线程组的方式进行token值的提取并调用给不同线程组里的HTTP接口使用。…

软件测试工程师的职业发展方向

一、软件测试工程师大致有4个发展方向: 1资深软件测试工程师 一般情况,软件测试工程师可分为测试工程师、高级测试工程师和资深测试工程师三个等级。 达到这个水平比较困难,这需要了解很多知识,例如C语言,JAVA语言,…

每天一道leetcode:1466. 重新规划路线(图论中等广度优先遍历)

今日份题目: n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以…

el-tree-select那些事

下拉菜单树形选择器 用于记录工作及日常学习涉及到的一些需求和问题 vue3 el-tree-select那些事 1、获取el-tree-select选中的任意层级的节点对象 1、获取el-tree-select选中的任意层级的节点对象 1-1数据集 1-2画面 1-3代码 1-3-1画面代码 <el-tree-selectv-model"s…

React antd tree树组件 - 父子节点没有自动关联情况下 - 显示半选、全选状态以及实现父子节点互动

实现的效果图如下&#xff1a; 如Ant Design Vue 中所示&#xff0c;并没有提供获取半选节点的方法&#xff0c;当设置checked和checkStrictly时&#xff0c;父子节点也不再自动关联了 前提&#xff1a;从后端可以获取的数据分别是完整的树型数据、所有选中的节点数据&#…

教你如何为博客网站申请阿里云的免费域名HTTPS证书

如何为博客网站申请阿里云的免费域名HTTPS证书 文章目录 如何为博客网站申请阿里云的免费域名HTTPS证书前置条件&#xff1a;步骤1 例如阿里云控制台&#xff0c;选择SSL证书步骤2 申请购买免费证书步骤3 创建证书步骤3.1 证书申请步骤3.2 DNS域名验证 步骤4 等待证书审核成功&…

徐明君:品牌定位塑造独特价值与关键差异的新思维

在当今竞争激烈的市场环境中&#xff0c;品牌定位已成为企业生存与发展的关键要素。近年来&#xff0c;随着消费者需求的不断变化和市场的持续发展&#xff0c;品牌定位的内涵和方法也在不断演进。本文将探讨品牌定位的核心概念、作用以及如何有效运用品牌定位策略&#xff0c;…

如何将区块链新闻稿发布到海外媒体?

随着区块链技术的不断发展&#xff0c;越来越多的区块链项目涌现出来&#xff0c;各大媒体也开始关注和报道区块链新闻。然而&#xff0c;如何将区块链新闻稿发布到海外媒体成为了许多区块链项目所面临的难题。本文将介绍一些有效的方法&#xff0c;帮助区块链项目将新闻稿发布…

Kafka API与SpringBoot调用

文章目录 首先需要命令行创建一个名为cities的主题&#xff0c;并且创建该主题的订阅者。 1、使用Kafka原生API1.1、创建spring工程1.2、创建发布者1.3、对生产者的优化1.4、批量发送消息1.5、创建消费者组1.6 消费者同步手动提交1.7、消费者异步手动提交1.8、消费者同异步手动…

【Vue-Router】路由模式

1. WebHashHistory index.ts import { createRouter, createWebHistory, RouteRecordRaw, createWebHashHistory } from "vue-router";// 路由模式 //vue2 mode history -> vue3 createWebHistory //vue2 mode hash -> vue3 createWebHashHistory //vue2 m…