在docker中安装gerrit
操作环境:
在vmware11.5中安装centos7,以下操作都是在centos7系统中操作的
vmware11.5下载地址:http://mirrors.huaweicloud.com/centos/7.9.2009/isos/x86_64/
vmware11.5永久注册码:XKZYV-PK9CC-A1Y0X-K5HZL-Y65ZV (百度查到的,如有侵权请联系删除)
centos7下载地址:http://mirrors.huaweicloud.com/centos/7.9.2009/isos/x86_64/
安装自行百度,按步骤操作即可
1.安装docker
使用 Docker 仓库进行安装
①Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r命令查看你当前的内核版本是否支持安账docker
②更新yum包:yum update
③设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。(即安装docker依赖)
yum install -y yum-utils device-mapper-persistent-data lvm2
④设置yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

5⃣️可以查看所有仓库中所有docker版本,并选择特定版本安装:
yum list docker-ce --showduplicates | sort -r
6⃣️安装docker:yum install docker-ce-17.12.0.ce
⑦启动docker:systemctl start docker
设置开启开机启动:systemctl enable docker—此项非必须,根据自己需求设置
验证安装是否成功(有client和service两部分表示docker安装启动都成功了):docker version

8⃣️查看docker启动状态:systemctl status docker
拓展:卸载docker
①查询docker安装过的包: yum list installed | grep docker
②删除安装包:yum –y remove docker.x86_64
在步骤①中查到的包都要删除掉
③删除镜像/容器等
rm -rf /var/lib/docker
2.docker安装gerrit–development_become_any_account
dockerhub官网-docker安装gerrit
①下载gerrit镜像:docker pull gerritcodereview/gerrit
②创建一个容器,并且运行这个容器:docker run -ti -p 18080:8080 -p 29418:29418 gerritcodereview/gerrit
③查看启动的容器:docker ps
[root@centos7 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e3a1ba6ed82 gerritcodereview/gerrit "/entrypoint.sh" 2 minutes ago Up 2 minutes 0.0.0.0:18080->8080/tcp, 0.0.0.0:29418->29418/tcp lucid_gates
修改names:docker rename lucid_gates(旧名字) gerrit(新名字)
启动容器后,访问地址:http://172.16.207.135:18080/ 进入gerrit web。
系统会默认初始有一个admin的管理员账户。点击“new account”可以注册一个账号,注册之后可以进行一些简单的配置,但要注意的一点是“Email Address”一定要配置,否则后面code review之后push到远程仓库的时候会有认证问题。(可以在push的时候去配置)
④配置gerrit.config

docker知识拓展:
①查看所有容器,包括停止的:docker ps -a
②docker start 启动一个已停止的容器:docker start 容器名称
③docker stop 停止一个运行的容器:docker stop 容器名称/容器id
④删除容器:docker rm 容器名称/容器id
删除镜像:docker rmi 镜像名称:tags
⑤我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式:$ docker run -itd --name gerrit1 /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
⑥docker cp ==本地与容器之间进行文件拷贝
–从本地拷贝文件到容器中: docker cp 本地文件 容器名称:容器中的路径
–从容器中拷贝文件到本地: docker cp 容器名称:容器中的文件路径 本地路径 【注意:如果本地路径想要是当前路径使用$PWD】
3.设置本地终端公钥,并添加到gerrit web页面的SSH Key
3.1在自己本地终端生成公钥和私钥
[admin@admindeMBP ~ %] cd ~/.ssh
[admin@admindeMBP .ssh %] ls
known_hosts
[admin@admindeMBP .ssh %] git config --global user.name “admin”
[admin@admindeMBP .ssh % ] git config --global user.email “25******93@qq.com”
[admin@admindeMBP .ssh %] git config --list
credential.helper=osxkeychain
user.name=“admin”
user.email=“2573135193@qq.com”
[admin@admindeMBP .ssh %] ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/admin/.ssh/id_rsa.
Your public key has been saved in /Users/admin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YR0yA3pdFNbG05zQ4qscGN3g2KrUvX9K4N7FbztZd3I admin@admindeMBP.lan
The key's randomart image is:
+---[RSA 3072]----+
| ..+.*+.= . |
| . . B..* = |
| . . +=.= o |
| . .o.+ o |
| .S=. . |
| . +.o.... E|
| . . ..+. oo=|
| . .+o ..+.|
| ..+o o+|
+----[SHA256]-----+
[admin@admindeMBP .ssh %] ls
id_rsa id_rsa.pub known_hosts
3.2将本地公钥id_rsa.pub内容添加到gerrit的ssh keys后,克隆 gerrit的项目代码到本地:
[admin@admindeMBP .ssh %] git clone "ssh://admin@d6612fcb89aa:29418/work-mac-test" && scp -p -P 29418 admin@d6612fcb89aa:hooks/commit-msg "work-mac-test/.git/hooks/"
ssh: Could not resolve hostname d6612fcb89aa: nodename nor servname provided, or not known
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.------错误提示:不能识别hostname:d6612fcb89aa,这显示的是gerrit容器的id
解决方法1:手动将gerrit容器id:d6612fcb89aa修改为服务器ip:172.16.207.135——每次都要手动修改
git clone "ssh://admin@172.16.207.135:29418/work-mac-test" && scp -p -P 29418 admin@172.16.207.135:hooks/commit-msg "work-mac-test/.git/hooks/"
解决方法2:修改本地hosts文件,将容器id指向ip————一劳永逸,推荐此方法
我的是mac,hosts文件位置etc/hosts,添加以下内容;windows修改hosts文件可以百度

再次clone,成功!!

3.3将本地代码提交到gerrit:

提交成功后,gerrit可以看到:

4、服务器生成私钥和公钥
安装git:yum install git
验证:git --version
Git初始化并生成授权证书:
[root@centos7 ~]# git config --global user.name "admin"
[root@centos7 ~]# git config --global user.email “25******93@qq.com”
[root@centos7 ~]# git config --list
user.name=admin
user.email=“25******93@qq.com”
[root@centos7 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:yOxQL+nlv4UcgrPtVCViymvyOmMEtvTNxV/wMU64cfo root@centos7
The key's randomart image is:
+---[RSA 2048]----+
| . |
| + = |
| ..o .X.o |
| + = Bo.oo+ |
| o +.o@.S.oo |
| . o+oO +.oE |
| .. * + o . |
| ++ o . . |
| ..+. . o. |
+----[SHA256]-----+
[root@centos7 .ssh]# ls
id_rsa id_rsa.pub
[root@centos7 .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3A76l23YXqSUa6KfavmhQSV6pRmIFmtv/yZNdiNiLMSaQ6RXbU6cYld5yGrgsLYhfQBrv4+yJAPl41md4NnjnM2hTcGnnq+joWSkRAZOW+zhvrhC/prscBb9aW8KqFUJJreJ1cN6oniLhYlKiR8cTShhUrOWD6PKIgnsWr60iix6v113pbjdRmExU3ruGKFhyaQEpWepn8IvZCvarvO2nTP/rYkxsr6V+Fe28XUr8WQO+6aBrKjQJ9GZ+7GbwKvkkWlVbd5o8HqXzzCtC/khlXRvHkQMkuY9n8TOpFy2pc3M5gbLQ7cLY2GAHpty7kByhMNFnhVnf7Ky9/06B7uOd root@centos7
将服务器的公钥添加到gerrit web页面的ssh key.

将服务器公钥内容添加到gitlab的ssh keys中,添加后验证是否和gitlab互通:

[root@centos7 .ssh]# ssh git@gitlab.com
The authenticity of host 'gitlab.com (172.65.251.78)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
ECDSA key fingerprint is MD5:f1:d0:fb:46:73:7a:70:92:5a:ab:5d:ef:43:e2:1c:35.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitlab.com,172.65.251.78' (ECDSA) to the list of known hosts.
PTY allocation request failed on channel 0
Welcome to GitLab, @jingjingwangg!
Connection to gitlab.com closed.
将gitlab的公钥内容加入服务器的know_hosts中:
ssh-keyscan -t rsa gitlab.com >> ~/.ssh/known_hosts

5、在docker容器中生成公钥和私钥:
bash-4.4$ cd ~/.ssh
bash-4.4$ ls
known_hosts
#初始化
bash-4.4$ git config --global user.name "admin"
bash-4.4$ git config --global user.email "25******93@qq.com"
bash-4.4$ git config --list
user.name=admin
user.email=25*******93@qq.com
#生成公钥和私钥
bash-4.4$ ssh-keygen -t rsa -C '25******93@qq.com'
Generating public/private rsa key pair.
Enter file in which to save the key (/var/gerrit/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/gerrit/.ssh/id_rsa.
Your public key has been saved in /var/gerrit/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:v0lgnrK4MtGZUXLWm7UYbsURf4wEjgk0iERlccktUzk 2573135193@qq.com
The key's randomart image is:
+---[RSA 3072]----+
| ooo+===.o++. |
| ..o.OoE++o o |
| = +oO..o o |
| . * . . |
| . + .S |
| . + o + |
| . . o o |
| o . o . o |
| oo.. o |
+----[SHA256]-----+
bash-4.4$ ls
id_rsa id_rsa.pub known_hosts
③将gerrit容器的公钥id_rsa.pub的内容添加到gitlab的ssh keys中,添加后验证是否和gitlab互通:

[bash-4.4]$ ssh git@gitlab.com #验证与gitlab是否互通
The authenticity of host 'gitlab.com (172.65.251.78)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitlab.com,172.65.251.78' (ECDSA) to the list of known hosts.
PTY allocation request failed on channel 0
Welcome to GitLab, @jingjingwangg!
Connection to gitlab.com closed.
6、配置gerrit
配置replication.confing,gerrit审查通过submit代码后触发此配置元件同步代码到gitlab
进入一个正在运行的容器:docker exec -it 容器名称/bin/bash
[root@centos7 ~]# docker exec -it gerrit /bin/bash
vi /var/gerrit/etc/replication.config
[remote "work-mac-test"]
projects = work-mac-test
url = git@gitlab.com:jingjingwangg/work-mac-test.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
timeout = 30
threads = 3
mirror = true
replicationMaxRetries = 3
重启docker
replication 配置热加载:ssh -p 29418 admin@172.16.207.135 gerrit plugin reload replication
注意:服务器的公钥要添加到gerrit web页面的ssh key,否则执行上述命令会提示被阻止
7.审查代码并提交,在gitlab查看提交的代码
成功!!!!!
拓展:nginx–用于做反向代理,暂时不用
拉取nginx镜像:docker pull nginx
启动:docker run --name nginx -p 4030:80 -d nginx
web访问172.16.207.135:4030(或者80),进入nginx欢迎页。

–name:后跟你给容器取的名字,任意即可
-p:后面跟端口映射规则,比如
4030:80表示把外部宿主机的4030映射到容器的80即可,容器内部使用80访问nginx,宿主机使用4030访问容器,
-d表示后台运行;
配置:
首先需要进入容器:docker exec -it nginx bin/bash
切换到配置文件夹:cd etc/nginx/conf.d
安装vim:
apt-get update
apt-get install vim
对default.conf配置文件进行编辑:

重启nginx的docker容器,访问172.16.207.135:4030会跳转到gerrit的web页面
总结:以上使用的是development_become_any_account认证,如果你选择了development_become_any_account,在页面顶端会有一个Become链接,通过它可以进入注册/登录页面;仅用于测试和学习
如果使用http认证呢?下面进行了尝试–http认证:
1.在gerrit容器中修改:vi /var/gerrit/etc/gerrit.config:

以root身份登陆gerrit容器:docker exec -it --user root gerrit /bin/bash
安装httpd工具:yum -y install httpd-tools
用httpd生成账号密码:htpasswd -c gerrit.password admin
给gerrit.password文件赋权限:chmod 777 gerrit.password,这样其他用户登陆gerrit容器也能生成新账户了
2.安装nginx1容器
创建并启动nginx1容器:docker run --name nginx1 -p 4030:80 -p 4031:81 -d nginx
浏览器访问ip:4030,进入nginx欢迎页
将gerrit容器生成的gerrit.password文件拷贝到nginx1容器内以下位置:/etc/nginx/conf.d/gerrit.password
进入nginx1容器:docker exec -it nginx1 /bin/bash
在default.conf文件的同级目录下新建处理gerrit的文件:vi gerrit.conf
root@f1ca43168d61:/etc/nginx/conf.d# ls
default.conf default.conf.cp gerrit.conf gerrit.password
root@f1ca43168d61:/etc/nginx/conf.d# cat gerrit.conf
server {
listen *:81;
#server_name gerrit.microwu.com;
server_name gerrit1;
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file /etc/nginx/conf.d/gerrit.password;
location / {
proxy_pass http://172.17.0.3:8080; # gerrit容器ip,通过命令:docker inspect 容器名 获得容器ip
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
root@f1ca43168d61:/etc/nginx/conf.d#
3.重启nginx1
4.浏览器访问
浏览器访问地址:服务器ip:4031,弹出输入账号密码框
输入admin提示forbidden,各种尝试没有找到解决方法
生成的其他用户可以正常登陆
有解决办法的小伙伴欢迎私聊~~
更多推荐
所有评论(0)