docker部署codereview/gerrit

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/selfhttp://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”,一开始我是一头雾水...

6、集成gitlab

这节是个重点,直接来干货:

gerrit本身是有代码仓库功能的,不够现在互联网大小公司一般都会用一些代码版本控制系统,比如,svn,git,更有gitlab来托管代码,所以有必要讲一讲集成应用这一块,这里用gitlab来实操一把。

重点:本地的ssh公钥需要配置在git和gerrit服务器上,gerrt服务器的ssh公钥需要配置在git服务器上!

  • 先在gerrit上新建一个项目比如就叫gerritttest,创建方法很简单:

红框内写项目名,和gitlab里的项目对应。

  • 此时,gitlab上也有一个“实体”的项目,也叫gerritttest,(也可以说是在gerrit里建gerritttest之前,gitlab就已经建好的)
  • 可以执行$git branch -av 来查看分支情况
  • 在gerrit里创建同名仓库后,需要删掉仓库目录,然后执行‘git clone --bare git@git.campany.com:{username}/gerritttest.git’
  • 然后可以执行$git clone "ssh://yourname@gerrit/gerritttest" && scp -p -P 8091 yourname@gerrit:hooks/commit-msg "gerritttest/.git/hooks/",来从gerrit克隆仓库了。
  • 删除gerrit项目命令:ssh -p 8091 admin@ip delete-project delete --yes-really-delete gerritttest,这些命令都有对应的REST的API,可自行百度。
  • sudo docker exec -ti -u root ddcdf266ab73 bash   可获取docker的root权限
  • replication:一个用于自动同步gerrit仓库到gitlab的工具,可以执行ssh -p 8091 admin@ip gerrit plugin ls|grep replication 来查看插件情况,注:用户需要是admin,其他用户没有查看插件权限。ssh -p 8091 admin@ip gerrit plugin reload replication, 重启replication插件。

       replication配置:

        [remote "git.example.cc"]
                projects = gerritttest
                url = git@git.example.cc: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。

  • 修改、提交、推送一套带走:
  • add和commit和以前操作git一样,push的时候用’git push -u origin HEAD:refs/for/master‘命令

        

        

  • 此时的状态是将修改推倒了gerrit里的仓库,等待其他人codereview。
  • 这时就可以在gerrit 的web页面里看到一个“change”,就可以进行codereview了,规则是所有组内的成员都可以review代码,并且评论,但是只有admin可以最终确认这份代码是否可以合并到git远程仓库,先点“code_review”,然后再点“submit”,submit表示真正提交并push到git仓库。
  • 查看/var/gerrit/logs/replication_log 

       

      表示成功推送到git仓库

  • 查看git仓库

        

        可以看到修改内容已经推送到了git服务器上

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值