gerrit官网上有最新的release,但是下载服务器应该是在国外的缘故,无法访问(不是慢...),所以只能放弃该方法。另外从网上冲浪得知安装release版还需要准备各种环境,比如Java,jdk,玛利亚数据库(mariaDB),反向代理之类的,还是比较麻烦。种种理由坚定了我曲线review的决心。
1、先搜索一下gerrit的docker镜像
sudo docker search gerrit
2、下载镜像
我找了个标星第二的版本:gerritcodereview/gerrit,描述说是官方镜像,别的不说,官方的感觉就正规一点。
命令:sudo docker pull gerritcodereview/gerrit
默认下载latest版,即最新版。
3、运行(和开机一样简单)
sudo docker run --name gerrit_test -d -p 8090:8080 gerritcodereview/gerrit:latest
-p后面带的是端口映射,这个自行设定,视网络环境而定,有的机器设置了端口的限制。
简单之处在于:不用java环境、数据库、反向代理的设置等。
然后就可以访问gerrit的web页面,比如http://localhost:8090/dashboard/self,http://localhost:8090/login 则是登录界面,系统会默认初始有一个admin的管理员账户。点击“new account”可以注册一个账号,注册之后可以进行一些简单的配置,但要注意的一点是“Email Address”一定要配置,否则后面code review之后push到远程仓库的时候会有认证问题。(可以在push的时候去配置)
4、另一个port
准备结合git玩一下了,这时发现一个问题:现在一般会通过ssh鉴权来clone repository,然而,ssh是tcp协议的,是有端口的,配完ssh的config发现用不了。
.ssh/下的的config配置要如下(ssh访问)
每次远程登录Linux的时候,Linux都要检查一下,当前访问的计算机公钥是不是在~/.ssh/know_hosts中,这个文件时OpenSSH记录的。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的。默认情况下,StrictHostKeyChecking=ask。简单所下它的三种配置值:
1.StrictHostKeyChecking=no
最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。
2.StrictHostKeyChecking=ask #默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。
3.StrictHostKeyChecking=yes #最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。
一般设为“no”。
UserKnownHostsFile /dev/null 表示忽略known host文件
port就是gerrit ssh服务监听的端口,所以在运行docker时的端口映射还需要加上-p 8091:29418,至于8091,是我们随便取的一个docker,而29418则是gerrit监听的默认端口,因为gerrit服务是用docker起的,不能更改默认端口了,所以我们映射的时候需要写成“out_port:29418”.
这样运行docker之后,在客户端执行ssh gerrit -l {username} ,则可以ssh到gerrit了:
5、克个隆
git clone ssh://gerrit/All-Projects, 因为ssh里的Host配的gerrit,所以在ssh://的后面,要写成gerrit,而系统给用户提供的是“git clone ssh://ddcdf266ab73:29418/All-Projects”,一开始我是一头雾水...
这节是个重点,直接来干货:
gerrit本身是有代码仓库功能的,不够现在互联网大小公司一般都会用一些代码版本控制系统,比如,svn,git,更有gitlab来托管代码,所以有必要讲一讲集成应用这一块,这里用gitlab来实操一把。
重点:本地的ssh公钥需要配置在git和gerrit服务器上,gerrt服务器的ssh公钥需要配置在git服务器上!
红框内写项目名,和gitlab里的项目对应。
replication配置:
[remote "git.example.cc"]
projects = gerritttest
url = [email protected]:user/${name}.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
threads = 3
timeout = 30
replicationMaxRetries = 3
projects就是项目的名字,${name}会自动识别成“gerritttest”,timeout是推送的超时时长,replicationMaxRetries是一次push重试的最大次数,如果重试次数打到配置值,则放弃该次push。
表示成功推送到git仓库
可以看到修改内容已经推送到了git服务器上