Gerrit是一个基于 Web 的代码审查系统,适于采用 Git 版本控制系统开发的项目进行在线代码审查。
快速启动
快速启动一个gerrit server,启动后在浏览器中访问 http://localhost:8080
即可进入gerrit code reviewer界面
1
|
docker run -ti -p 8080:8080 -p 29418:29418 gerritcodereview/gerrit
|
生产环境部署
在生产环境中部署gerrit,结合OpenLDAP使用,可以更好的做身份验证。
环境配置
创建一个外部目录,来存放配置文件以及存储文件。
1
2
3
4
5
6
7
8
9
|
git clone https://github.com/GerritCodeReview/docker-gerrit.git
cd docker-gerrit
mkdir -p ./external/gerrit/etc/
touch ./external/gerrit/etc/gerrit.config
touch ./external/gerrit/etc/secure.config
|
./external/gerrit/etc/gerrit.config
配置示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
[gerrit]
basePath = git
[index]
type = LUCENE
[auth]
type = ldap
gitBasicAuth = true
[ldap]
server = ldap://ldap
username=cn=admin,dc=example,dc=org
accountBase = dc=example,dc=org
accountPattern = (&(objectClass=person)(uid=${username}))
accountFullName = displayName
accountEmailAddress = mail
[sendemail]
smtpServer = localhost
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = http://*:8080/
[cache]
directory = cache
[container]
user = root
|
./external/gerrit/etc/secure.config
配置示例如下:
1
2
|
[ldap]
password = secret
|
docker-compose.yaml
如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
version: '3'
services:
gerrit:
image: gerritcodereview/gerrit
ports:
- "29418:29418"
- "80:8080"
depends_on:
- ldap
volumes:
- ./external/gerrit/etc:/var/gerrit/etc
- ./external/gerrit/git:/var/gerrit/git
- ./external/gerrit/db:/var/gerrit/db
- ./external/gerrit/index:/var/gerrit/index
- ./external/gerrit/cache:/var/gerrit/cache
environment:
- CANONICAL_WEB_URL=http://localhost
# command: init
# entrypoint: /entrypoint.sh init
ldap:
image: osixia/openldap
ports:
- "389:389"
- "636:636"
environment:
- LDAP_ADMIN_PASSWORD=secret
volumes:
- ./external/gerrit/ldap/var:/var/lib/ldap
- ./external/gerrit/ldap/etc:/etc/ldap/slapd.d
ldap-admin:
image: osixia/phpldapadmin
ports:
- "6443:443"
environment:
- PHPLDAPADMIN_LDAP_HOSTS=ldap
|
启动初始化
启动时取消docker-compose.yaml
中的entrypoint: /entrypoint.sh init
注释,
然后运行命令docker-compose up gerrit
进行初始化,初始化成功后容器就会退出。
后台启动
初始化完成后,重新注释掉init指令,再执行启动命令后台运行。
1
|
> docker-compose -f docker-compose.yaml up -d
|
查看启动状态
1
2
3
4
5
6
|
> docker-compose -f docker-compose.yaml ps
Name Command State Ports
---------------------------------------------------------------------------------------------------------
docker-gerrit_gerrit_1 /entrypoint.sh Up 0.0.0.0:29418->29418/tcp, 0.0.0.0:80->8080/tcp
docker-gerrit_ldap-admin_1 /container/tool/run Up 0.0.0.0:6443->443/tcp, 80/tcp
docker-gerrit_ldap_1 /container/tool/run Up 0.0.0.0:389->389/tcp, 0.0.0.0:636->636/tcp
|
使用 PhpLdapAdmin
登录 OpenLDAP
浏览器打开 https://localhost:6443/
登录,账号为配置文件中设置的username
, 密码配置为password
,如下:
账号:cn=admin,dc=example,dc=org
密码:secret
登录 OpenLDAP
创建 gerrit 管理员账号
点击 Create a child entry
后选择账号模板,点击 Courier Mail Account
填写账号信息,示例如下:
Given Name: Gerrit
Last Name: Admin
Common Name: Gerrit Admin
User ID: gerritadmin
Email: gerritadmin@localdomain
Password: secret
同样的方式创建其他子账号
用管理员账号登录gerrit
浏览器中打开 http://localhost
,使用在LDAP中创建的账号密码登录
Login: gerritadmin
Password: secret
登录成功后,打开 http://localhost/settings/#SSHKeys
设置ssh keys
创建项目
选择 BROWSE
-> Repositories
-> CREATE NEW
创建存储仓库,示例如下:
Repository name: rstt
创建成功后,点击仓库名称进入设置页面
第一步下载 commit-msg hook,脚本位置存放在.git/hooks/commit-msg,提交审核时会执行这个脚本来生成Change-ID。
1
|
git clone "ssh://gerritadmin@localhost:29418/rstt" && scp -p -P 29418 gerritadmin@localhost:hooks/commit-msg "rstt/.git/hooks/"
|
clone 项目
1
|
git clone "ssh://gerritadmin@localhost:29418/rstt"
|
创建分支,提交修改,推送提交审核
1
2
3
|
git checkout -b dev master
git push origin HEAD:refs/for/master
|
提交后会创建引用 `.git/refs/changes/01/1/1
审核过程中提交推送修改
查看引用提交列表
1
2
3
4
5
6
7
8
9
10
11
|
> git ls-remote origin
74d72f4e31eb984bd852a2ef327a43ca4a244fc9 HEAD
5a30f5e7b6343e785c0ed9ffa0188ee08c9c36fb refs/changes/01/1/1
06c425732aa90317272f1dcaf72b0198e061738d refs/changes/01/1/2
471393b7402a031acd0d69a15b7d63808f3d1ee3 refs/changes/01/1/3
3a48c8c89a35b6161bf654b8889281f4f7d2f978 refs/changes/01/1/4
c3319ba7d1f26275661b3b39cd2108e3c4318b26 refs/changes/01/1/5
374956310ca8a5f595aab7197ee48db6adfef195 refs/changes/01/1/meta
74d72f4e31eb984bd852a2ef327a43ca4a244fc9 refs/changes/02/2/1
d426a8f985dd1fc9fdcd887c37d255bf319e3727 refs/changes/02/2/meta
74d72f4e31eb984bd852a2ef327a43ca4a244fc9 refs/heads/master
|
提交审核通过合并后即可更新master
谷歌工程实践
Google 有许多通用工程实践,几乎涵盖所有语言和项目。此文档为长期积累的最佳实践,是集体经验的结晶。
下面引用Google代码审查两则指南:
代码审查是除了代码作者之外,其他人检查代码的过程。
Google 通过 Code Review 来维护代码和产品质量。
此文档是 Google Code Review 流程和政策的规范说明。
此页面是我们进行 Code Review 流程的概述。本指南还有另外两套文档:
代码审查者指南
本节是基于过往经验编写的 Code Review 最佳方式建议。其中分为了很多独立的部分,共同组成完整的文档。虽然您不必阅读文档,但通读一遍会对您自己和团队很有帮助。
代码开发者指南
本节页面的内容为开发人员进行代码审查的最佳实践。这些指南可帮助您更快地完成审核并获得更高质量的结果。您不必全部阅读它们,但它们适用于每个 Google 开发人员,并且许阅读全文通常会很有帮助。
参考