1.1 简介
Gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。它分支自Rietveld,作者为Google公司的Shawn Pearce,原先是为了管理Android计划而产生。这个软件的名称,来自于荷兰设计师赫里特·里特费尔德(Gerrit Rietveld)。最早它是由Python写成,在第二版后,改成用Java与SQL。使用Google Web Toolkit来产生前端的JavaScript。
1.2 系统环境
系统: Ubuntu 12.04.5 LTS java:java version "1.8.0_65" mysql: mysql-5.6.34 nginx: nginx-1.10.1
1.4 安装Gerrit依赖
Gerrit 的包是 java 格式,需要安装 jre。可以用OpenJDK
本文是基于OpenJDK来配置的,如果机器上存在多个JDK版本或者想依赖于Oracle JDK,则作相应修改吧
$ sudo apt-get install default-jre daemon
1.5 创建 Gerrit 数据库
安装Gitlab中已经安装了MySQL,下面只需要创建库就可以了。注意此处的 gerrituser , gerritpass 为新表拥有权限的用户名和密码
mysql -u root –p >create database gerritdb; > grant all on gerritdb.* to 'gerrituser'@'localhost' identified by 'gerritpass';
1.1 安装开始
1.1.1 创建一个gerrit的账户
useradd gerrit
1.1.2 安装gerrit
root@web01:/home/yunwei/tools# java -jar gerrit-2.8.war init -d /etc/gerrit/ *** Gerrit Code Review 2.8 *** Create '/etc/gerrit' [Y/n]? y #默认选择y *** Git Repositories *** Location of Git repositories [git]: #默认回车 *** SQL Database *** Database server type [h2]: mysql #gerrit 默认h2数据库,我们使用mysql,直接输入mysql 回车 Gerrit Code Review is not shipped with MySQL Connector/J 5.1.21 ** This library is required for your configuration. ** Download and install it now [Y/n]? y #关键一定选择y,如果这里没有下载显示OK,后面连接mysql 会报错,一定要看好选择y,并且底下显示OK,关键步骤。 Downloading http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.21/mysql-connector-java-5.1.21.jar ... OK Checksum mysql-connector-java-5.1.21.jar OK #因为采用mysql数据库下面很关键哦 Server hostname [localhost]: #默认因为gerrit和数据在一台主机 Server port [(mysql default)]: #默认3306 Database name [reviewdb]: gerritdb #前面设置的数据库名 Database username [root]: gerrituser #前面授权的用户 gerrituser's password : #连续输入两次密码gerritpass confirm password : *** User Authentication #成功了 *** #注意这个不要按回车跳过去了,否则不是HTTP认证,是需要用google的OPENID Authentication method [OPENID/?]: http Get username from custom HTTP header [y/N]? 默认 SSO logout URL : *** Email Delivery *** #因为邮箱这块没有配置默认走 SMTP server hostname [localhost]: SMTP server port [(default)]: SMTP encryption [NONE/?]: SMTP username : *** Container Process *** Run as [root]: gerrit Java runtime [/application/jdk1.8.0_65/jre]: Copy gerrit-2.8.war to /etc/gerrit/bin/gerrit.war [Y/n]? Copying gerrit-2.8.war to /etc/gerrit/bin/gerrit.war *** SSH Daemon *** Listen on address [*]: Listen on port [29418]: Gerrit Code Review is not shipped with Bouncy Castle Crypto v144 If available, Gerrit can take advantage of features in the library, but will also function without it. Download and install it now [Y/n]? y Downloading http://www.bouncycastle.org/download/bcprov-jdk16-144.jar ... !! FAIL !! error: http://www.bouncycastle.org/download/bcprov-jdk16-144.jar: 302 Found Please download: http://www.bouncycastle.org/download/bcprov-jdk16-144.jar and save as: /etc/gerrit/lib/bcprov-jdk16-144.jar Press enter to continue Continue without this library [Y/n]? Generating SSH host key ... rsa(simple)... done *** HTTP Daemon *** Behind reverse proxy [y/N]? y #选择y Proxy uses SSL (https://) [y/N]? Subdirectory on proxy server [/]: Listen on address [*]: Listen on port [8081]: 8082 #修改了端口8082 Canonical URL [http://web01/]: <a href="http://172.16.1.97">http://172.16.1.97</a> #web 设置为本机IP记得改成你自己的IP *** Plugins *** #以下都选择y Install plugin reviewnotes version v2.8 [y/N]? y # 以下都选择y Install plugin download-commands version v2.8 [y/N]? y #以下都选择y Install plugin replication version v2.8 [y/N]? y #以下都选择y Install plugin commit-message-length-validator version v2.8 [y/N]? y #以下都选择y yInitialized /etc/gerrit Executing
#稍等片刻 配置完成。
1.1.1 查看gerrit.config配置文件
备注:这个配置文件和上不设置一样,如果上步有错可以
root@web01:~# cat /etc/gerrit/etc/gerrit.config [gerrit] basePath = git canonicalWebUrl = http://172.16.1.97 [database] type = mysql hostname = localhost database = gerritdb username = gerrituser [auth] type = HTTP [sendemail] smtpServer = localhost [container] user = gerrit javaHome = /application/jdk1.8.0_65/jre [sshd] listenAddress = *:29418 [httpd] listenUrl = proxy-http://*:8082/ [cache] directory = cache
1.1.2 启动gerrit
/etc/gerrit/bin/gerrit.sh start Starting Gerrit Code Review: cat: /etc/gerrit/logs/gerrit.pid: No such file or directory FAILED error: cannot start Gerrit: exit status 1 Waiting for server on 172.16.1.97:80 ... OK Opening http://172.16.1.97/#/admin/projects/ ...FAILED Open Gerrit with a JavaScript capable browser: <a href="http://172.16.1.97/#/admin/projects/">http://172.16.1.97/#/admin/projects/</a> 查看端口 root@web01:/home/yunwei/tools# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7378/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 997/sshd tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 2152/redis-sentinel tcp6 0 0 :::22 :::* LISTEN 997/sshd tcp6 0 0 :::3306 :::* LISTEN 7144/mysqld
1.1.1 查看目录结构
root@web01:/home/yunwei/tools# cd /etc/gerrit/ root@web01:/etc/gerrit# ls bin cache data etc git lib logs plugins static tmp root@web01:/etc/gerrit# cd .. root@web01:/etc# ls X11 groff logrotate.d rc4.d acpi group lsb-base rc5.d adduser.conf group- lsb-base-logging.sh rc6.d alternatives grub.d lsb-release rcS.d apm gshadow ltrace.conf resolv.conf apparmor gshadow- magic resolvconf apparmor.d gtk-2.0 magic.mime rmt apport hdparm.conf mailcap rpc apt host.conf mailcap.order rsyslog.conf at.deny hostname manpath.config rsyslog.d bash.bashrc hosts mime.types screenrc bash_completion hosts.allow mke2fs.conf securetty bash_completion.d hosts.deny modprobe.d security bindresvport.blacklist icedtea-web modules services blkid.conf ifplugd motd sgml blkid.tab init mtab shadow byobu init.d my.cnf shadow- ca-certificates initramfs-tools nanorc shells ca-certificates.conf inputrc network skel calendar insserv networks ssh chatscripts insserv.conf newt ssl console-setup insserv.conf.d nsswitch.conf sudoers cron.d iproute2 opt sudoers.d cron.daily ipvsadm.rules os-release sysctl.conf cron.hourly iscsi pam.conf sysctl.d cron.monthly issue pam.d systemd cron.weekly issue.net passwd terminfo crontab java-6-openjdk passwd- timezone daemon.conf kbd perl ucf.conf dbus-1 keepalived pm udev debconf.conf kernel popularity-contest.conf ufw debian_version kernel-img.conf ppp update-manager default landscape profile update-motd.d deluser.conf ld.so.cache profile.d update-notifier depmod.d ld.so.conf profile.ori updatedb.conf dhcp ld.so.conf.d protocols vim dpkg ldap pulse vtrgb environment legal python w3m fonts libnl-3 python2.7 wgetrc fstab locale.alias rc.local wpa_supplicant fstab.d localtime rc0.d xml fuse.conf logcheck rc1.d zsh_command_not_found gai.conf login.defs rc2.d gerrit logrotate.conf rc3.d
1.1.2 授权
root@web01:/etc# chown -R gerrit.gerrit /etc/gerrit/
1.1.3 安装apache
root@web01:/etc# apt-get install apache
1.1.4 使用apache htpasswd 模块设置密码
备注:admin是 用户名 /application/nginx/conf/ 是路径(可以自定义) gerrit (为密码文件名可以自定义) root@web01:/application/nginx/conf# htpasswd -c /application/nginx/conf/gerrit admin New password: #输入密码 Re-type new password: #再次输入密码 Adding password for user admin #提示密码成功
1.2 nginx端口转发和访问控制
root@web01:/application/nginx/conf# cat nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { #这块是是提示语"hello auth_basic "hello!"; #/application/nginx/conf/gerrit 上面apache 定义的密码。 auth_basic_user_file /application/nginx/conf/gerrit; autoindex on; #转发IP或者域名接端口号。 proxy_pass http://172.16.1.97:8082; #优化参数 proxy_set_header host $host; proxy_set_header X-Forwarded-For $remote_addr; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 32 4k; proxy_busy_buffers_size 64k; } } }
1.3 Gerrit启动脚本
root@web01:~# cp /etc/gerrit/bin/gerrit.sh /etc/init.d/gerrit root@web01:/# vim /etc/init.d/gerrit 大概在47行书写其中,GERRIT_SITE=跟路径 GERRIT_SITE=/etc/gerrit/
1.4 启动gerrit
root@web01:/# /etc/init.d/gerrit start 也可以全路径执行 sh /etc/gerrit/bin/gerrit.sh start (任选其一 显示 OK 就好) Starting Gerrit Code Review: cat: /etc/gerrit/logs/gerrit.pid: No such file or directory OK
1.5 检查查看端口号
root@web01:/application/nginx/conf# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7378/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 997/sshd tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 2152/redis-sentinel tcp6 0 0 :::8082 :::* LISTEN 14487/GerritCodeRev tcp6 0 0 :::22 :::* LISTEN 997/sshd tcp6 0 0 :::29418 :::* LISTEN 14487/GerritCodeRev tcp6 0 0 :::3306 :::* LISTEN 7144/mysqld
1.6 访问
默认第一个登录 Gerrit 的用户是管理员
- 在浏览器 url 输入: http://172.16.1.97 (你的IP)
- 在弹出的验证框中输入刚才创建的用户名admin和你设置的密码
总结配置:多数步骤可以直接回车使用默认参数,仅有几处需要小心:
多数步骤可以直接回车使用默认参数,仅有几处需要小心:
Location of Git repositories:该路径时仓库路径,如果想包含已有的git仓库路径,那么应该使用这个路径,并且,gerrit运行用户必须具有该路径的读写权限!否则gerrit将无法登陆。
Database server type:使用的数据库类型,默认是gerrit自带的h2。
Authentication method:gerrit使用的用户认证方式,默认是OPENID,这是一种使用第三方的账户信息的认证方式,比如使用yahoo!,google,amazon等。另外一种就是http方式,这个在后面的用户会讲到。
Email Delivery:邮件服务配置,可以使用默认。
Run as:Gerrit运行用户,这里就是用到了之前新建的专属用户。
SSH Daemon:Gerrit自带一个独立的ssh服务,所以这里配置的是这个ssh服务器的监听信息,包括地址,以及端口。地址可以默认,端口也可以默认29418,自己也可以配置,但是不要低于1024.另外外部必须能够访问该端口!
HTTP Daemon:Behind reverse proxy:apache2反向代理,应该设定为y。使用反向代理时,必须确保apache2相应的组件可用!后面会讲到。
HTTP Daemon:Listen on port:http运行端口,这里使用的端口应该与反向代理的端口设定为不同的值,否则浏览器无法访问。
第1章 gerrit 使用扩展
1.1 客户端配置ssh KEY
#备注 需要下载安装git bash
打开后
xuebao@DESKTOP-8QV2RMH MINGW64 ~ #执行创建key $ ssh-keygen.exe -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/xuebao/.ssh/id_rsa): /c/Users/xuebao/.ssh/id_rsa already exists. Overwrite (y/n)? xuebao@DESKTOP-8QV2RMH MINGW64 ~ #进入路径查看,公钥 $ cd .ssh/ xuebao@DESKTOP-8QV2RMH MINGW64 ~/.ssh $ ls id_rsa id_rsa.pub known_hosts xuebao@DESKTOP-8QV2RMH MINGW64 ~/.ssh #查看公钥 $ cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnOx3fwwHOFgZBZsdW5OE4OBpA/FozsI3Bcfaz4rAwG3DkmXvVeVdbUwhrSZ+ieoBi0PfwPSR24Y7cjT0yP8ZorsS+8WYrfBhkRx/ejgOlUcVoaniYm5/0mSVB8DLhT6EBT3WXU1kI/rm7gWizgMXYbPEtZrAvsR717wUcwHS2IRWIzOC7QTMtWXxFg3XYC+dfsrlGUoxE271frKUe8Pm/fVPodBeB7jGZzwd5z/WrelnZ9zsfk4WEdAhL0i5ketnEVe9uYNpQzcckiPtLqXnJf1vjKmy0xg1+J3p+sVBeT4QoLHjpKD2szQy4/Es5iRCyWsM8vv8Y6NV4MVlwf6e1 765289948@qq.com