之前已经搭建过repo+git的仓库管理,现在再集成一下gerrit。
原料准备:
1. jdk1.8环境 jdk-8u161-linux-x64.tar.gz
2. gerrit安装包 gerrit-2.12.war
可能还需要:
1. bcpkix-jdk15on-1.52.jar
2. mysql-connector-java-5.1.21.jar
这两个是在安装gerrit的过程中会用到的jar包,过程中会提示你下载,也可手动提前下载好。
步骤:
1. 在ubuntu系统内新建gerrit账户,并切换至gerrit账户。安装java version 1.8环境,并配置gerrit账户的java环境变量为1.8。此步骤自行百度。
2. git环境搭建。执行命令:
$sudo apt-get install git-core gitweb git-daemon-run
3. APACHE安装。
3.1 在终端中执行:
$ sudo apt-get install apache2 apache2-utils
3.2 配置APACHE。开启 apache2 的 proxy 功能,在终端中执行:
$ sudo a2enmod proxy
$ sudo a2enmod proxy_balancer
$ sudo a2enmod proxy_connect
$ sudo a2enmod proxy_http
创建/etc/apache2/sites-available/gerrit.conf 文件:
$sudo vim /etc/apache2/sites-available/gerrit.conf
追加以下内容:
<VirtualHost *:8088>
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Deny From all
Allow from all
</Proxy>
<Location /login/>
AuthType Basic
AuthName "Gerrit Code Review"
Require valid-user
AuthBasicProvider file
AuthUserFile /var/www/gerrit_passwd/.gerrit.password
</Location>
AllowEncodedSlashes On
ProxyPass / http://127.0.0.1:8081/ nocanon
ProxyPassReverse / http://127.0.0.1:8081/
</VirtualHost>
编辑/etc/apache2/ports.conf 文件,在 Listen 80 的下面追加 Listen 8088。
$sudo vim /etc/apache2/ports.conf
启用/etc/apache2/sites-available/gerrit.conf 文件配置,在终端中执行:
$ sudo a2ensite gerrit.conf
创建 gerrit 管理员账号,在终端中执行:
$ sudo mkdir -p /var/www/gerrit_passwd
$ sudo htpasswd -s /var/www/gerrit_passwd/.gerrit.password xxx
其中xxx为账号名,根据提示输入密码即可。
重启 apache2,在终端中执行:
$ sudo service apache2 restart
(注:重启可能遇到错误AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message。
解决:$sudo vim /etc/apache2/apache2.conf,追加一句:ServerName localhost:8088)
4. 安装配置MYSQL+PHPMYADMIN
4.1 安装
在终端中执行:
$ sudo apt-get install mysql-server phpmyadmin
Mysql-server 安装过程中,按照提示设置管理员账户密码。
Phpmyadmin 安装过程中,按照提示设置管理员账户和密码。
4.2 配置
将 phpmyadmin 加载到 apache2 中,在终端中执行:
$ sudo cp /etc/phpmyadmin/apache.conf /etc/apache2/sites-available/phpmyadmin.conf
$ sudo a2ensite phpmyadmin.conf
$ sudo service apache2 restart
通过终端访问 mysql,创建用户和 reviewdb 的数据库如下,在终端中执行:
$ mysql -u root -p
$ Enter password: 管理员密码
此处密码为安装MYSQL时设置的密码
mysql> create user 'gerrit'@'localhost' identified by 'gerrit';
此步骤设置gerrit账号的密码为gerrit。
mysql> create database reviewdb;
mysql> alter database reviewdb charset=utf8;
mysql> grant all on reviewdb.* to 'gerrit'@'localhost';
mysql> flush privileges;
5 GERRIT
5.1 安装
自行下载 gerrit 安装包,使用 jar 安装 gerrit 包,在终端中执行:
$ java -jar tools/gerrit-2.12.war init -d review_site
5.2 配置
安装过程中,参照以下完成初步配置:
*** Gerrit Code Review 2.12
***
Create '/home/git/review_site' [Y/n]? 直接回车
*** Git Repositories
***
Location of Git repositories [git]: 代码库绝对路径
*** SQL Database
***
Database server type [h2]: 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]? 直接回车
Server hostname [localhost]:直接回车
Server port [(mysql default)]: 直接回车
Database name [reviewdb]: 直接回车
Database username [git]: gerrit
gerrit's password : mysql 中给 gerrit 账户设置的密码
confirm password : mysql 中给 gerrit 账户设置的密码
*** Index
***
Type [LUCENE/?]: 直接回车
*** User Authentication
***
Authentication method [OPENID/?]: HTTP
Get username from custom HTTP header [y/N]? 直接回车
SSO logout URL : 服务器 IP
Enable signed push support [y/N]? 直接回车
*** Review Labels
***
Install Verified label [y/N]? 直接回车
*** Email Delivery
***
SMTP server hostname [localhost]: 直接回车
SMTP server port [(default)]: 直接回车
SMTP encryption [NONE/?]: 直接回车
SMTP username : 直接回车
*** Container Process
***
Run as [gitadmin]: 直接回车
Java runtime [/usr/lib/jvm/jdk1.8.0_102/jre]: 直接回车
Copy gerrit-2.12.war to review_site_temp/bin/gerrit.war [Y/n]? 直接回车
*** SSH Daemon
***
Listen on address [*]: 直接回车
Listen on port [29418]: 直接回车
Gerrit Code Review is not shipped with Bouncy Castle Crypto SSL v152
If available, Gerrit can take advantage of features
in the library, but will also function without it.
Download and install it now [Y/n]? 直接回车
*** HTTP Daemon
***
Behind reverse proxy [y/N]? y
Proxy uses SSL (https://) [y/N]? 直接回车
Subdirectory on proxy server [/]: 直接回车
Listen on address [*]: 127.0.0.1
Listen on port [8081]: 直接回车
Canonical URL [http://127.0.0.1:8081/]: http:// 服务器 IP :8088/
*** Plugins
***
Installing plugins.
Install plugin singleusergroup version v2.12 [y/N]? y
Install plugin commit-message-length-validator version v2.12 [y/N]? y
Install plugin reviewnotes version v2.12 [y/N]? y
Install plugin replication version v2.12 [y/N]? y
Install plugin download-commands version v2.12 [y/N]? y
以上交互式配置过程结束后,可能会因为以下 jar 包和没有下载,导致 gerrit 安装后的自动启动失败。此时手动下载以下 jar 包到 review_site/lib 目录中即可。
mysql-connector-java-5.1.21.jar
bcpkix-jdk15on-152.jar
gerrit 安装后会自动启动,如果没有自动启动,可以手动启动 gerrit。
启动 gerrit,在终端中执行:
$ review_site/bin/gerrit.sh start
$ review_site/bin/gerrit.sh start
在安装过程对gerrit的配置可能并不完整 ,编辑review_site/etc/gerrit.config 文件,补充相关配置。
review_site/etc/gerrit.config 文件更新完了后,重启 gerrit,在终端中执行:
$ review_site/bin/gerrit.sh start
(注:重启gerrit可能出现FAILED的问题。解决Starting Gerrit Code Review: FAILED的问题。
执行命令:review_site/bin/gerrit.sh run查看是何原因导致的失败。
git@jim-VirtualBox:~$ review_site/bin/gerrit.sh start
Starting Gerrit Code Review: FAILED
git@jim-VirtualBox:~$ review_site/bin/gerrit.sh run
Running Gerrit Code Review:
[2018-01-25 14:41:57,630] [main] INFO com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /home/git/review_site/cache
[2018-01-25 14:41:58,788] [main] INFO com.google.gerrit.server.config.ScheduleConfig : gc schedule parameter "gc.interval" is not configured
[2018-01-25 14:41:58,788] [main] INFO com.google.gerrit.server.config.ScheduleConfig : changeCleanup schedule parameter "changeCleanup.interval" is not configured
[2018-01-25 14:41:59,798] [main] INFO org.eclipse.jetty.util.log : Logging initialized @6496ms
[2018-01-25 14:41:59,984] [main] INFO com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 456m
[2018-01-25 14:42:00,123] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loading plugins from /home/git/review_site/plugins
一月 25, 2018 2:42:00 下午 com.google.inject.servlet.GuiceFilter setPipeline
警告: Multiple Servlet injectors detected. This is a warning indicating that you have more than one GuiceFilter running in your web application. If this is deliberate, you may safely ignore this message. If this is NOT deliberate however, your application may not work as expected.
[2018-01-25 14:42:00,403] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin commit-message-length-validator, version v2.12
[2018-01-25 14:42:00,544] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin download-commands, version v2.12
[2018-01-25 14:42:00,733] [main] WARN com.googlesource.gerrit.plugins.replication.ReplicationFileBasedConfig : Config file /home/git/review_site/etc/replication.config does not exist; not replicating
[2018-01-25 14:42:00,742] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin replication, version v2.12
[2018-01-25 14:42:00,873] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin reviewnotes, version v2.12
[2018-01-25 14:42:00,947] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin singleusergroup, version v2.12
[2018-01-25 14:42:00,949] [main] ERROR com.google.gerrit.pgm.Daemon : Unable to start daemon
com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) No index versions ready; run Reindex
1 error
at com.google.gerrit.lucene.LuceneVersionManager.start(LuceneVersionManager.java:124)
at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:74)
at com.google.gerrit.pgm.Daemon.start(Daemon.java:302)
at com.google.gerrit.pgm.Daemon.run(Daemon.java:203)
at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:159)
at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:100)
at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:56)
at Main.main(Main.java:25)
根据提示需要run Reindex,执行下列命令运行Reindex后重新restart gerrit。
git@jim-VirtualBox:~$ java -jar tools/gerrit-2.12.war reindex -d /home/git/review_site
[2018-01-25 14:45:13,566] [main] INFO com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 456m
[2018-01-25 14:45:14,334] [main] INFO com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /home/git/review_site/cache
Reindexing changes: done
Reindexed 0 changes in 0.0s (0.0/s)
[2018-01-25 14:45:15,748] [DiskCache-Store-0] WARN com.google.gerrit.server.cache.h2.H2CacheImpl : Cannot build BloomFilter for jdbc:h2:file:///home/git/review_site/cache/diff: Error opening database: "Sleep interrupted" [8000-176]
[2018-01-25 14:45:15,759] [main] INFO com.google.gerrit.server.cache.h2.H2CacheFactory : Finishing 4 disk cache updates
git@jim-VirtualBox:~$
git@jim-VirtualBox:~$ review_site/bin/gerrit.sh start
Starting Gerrit Code Review: OK
至此解决问题。)
Gerrit重启后,通过浏览器访问 http://服务器IP:8088/,登录gerrit。
以上gerrit环境搭建完毕,第一个登陆gerrit的用户会默认时管理员,使用管理员账户登陆gerrit后可以在Projects项下面Create new project来创建新的git仓库,
创建gerrit工程的时候可以使用/来规定子路径工程,
仓库位置就在安装配置gerrit的时候Location of Git repositories设置的路径下面,创建完新的项目后,点击ssh,可以查看到git clone的命令,不要使用http的git clone命令,可能会不好使,复制下来ssh命令后就可以用它进行代码下载了。下载下来git库后可以将已有的代码拷贝到这个库文件夹里,然后:
$git add -f *
$git commit -m "Init codes"
$git push origin HEAD:refs/for/master
提交代码的时候如提示无changeid,解决方法为:
scp -p -P 29418 123@10.0.2.15:hooks/commit-msg .git/hooks/
123是客户端电脑配置的git的name名称,10.0.2.15是服务器ip地址。
来初始化库里的代码,然后到网页gerrit上来进行merge,到这里代码库已经基本初始化完成。
Gerrit的使用和常见错误(内网无法注册邮箱等问题)