Gerrit编译安装总结

Gerrit编译安装总结

一、Gerrit简介

谷歌 Android 开源项目在 Git 的使用上有两个重要的创新,一个是为多版本库协同而引入的

repo,另外一个重要的创新就是 Gerrit ――代码审核服务器。

Gerrit Git 引入的代码审核是强制性的,也就是说除非特别的授权设置,向 Git 版本库的推送

必须要经过Gerrit 服务器,修订必须经过代码审核的一套工作流之后,才可能经批准并纳入正式

代码库中。首先开发者的代码通过git 命令(或 repo 封装)推送到 Gerrit 管理下的Git 版本库,推送

的提交转化为一个一个的代码审核任务,审核任务可以通过refs/changes/下的引用访问到。

代码审核者可以通过 Web 界面查看审核任务、代码变更,通过 Web 界面做出通过代码审核或打

回等决定。测试者也可以通过refs/changes/之下的引用获取修订然后对其进行测试,如果测试通过就可以将该评审任务设置为校验通过(verified)。最后经过了审核和校验的修订可以通过Gerrit 界面中的提交动作合并到版本库对应的分支中。

摘自:http://source.android.com/source/life-of-a-patch.html

Fig1 代码贡献流程图


二、Gerrit源码编译

以下都是基于gerrit2.6.1Ubuntu12.04上的安装为例:

1.创建Gerrit用户(可选)

$ sudo adduser gerrit2

$ sudo su gerrit2

$ cd ~gerrit2


2.安装必备软件

$ sudo apt-get install openjdk-6

$ sudo apt-get install maven

$ sudo apt-get install git-core


3.下载源码

$ git clone --recursivehttps://gerrit.googlesource.com/gerrit

NOTE: --recursive参数是为了保证内嵌的plugins都能被下载到


4.源码编译

$mvn clean package [-DskipTests ] [-Dgerrit.documentation.skip]

NOTE:

1)默认的编译都会包含DoucmentationReleaseNotes,但是如果AsciiDoc没有安装或者不可用的话,编译生成的war包是不包含内嵌Documentation

2)�CDskipTests:编译过程中跳过test

3)-Dgerrit.documentation.skip:不要将doc编译到war包中

4)最后生成的结果在:gerrit-war/target/gerrit-*.war,这是一个zip包可以用解压工具直接查看


5.Release Builds

$./tools/release.sh

      $./tools/release.sh --without-documentation


三、Gerrit的安装和配置

1.初始化安装gerrit:

$ java -jargerrit-2.6war init -d your/review_site/path


2.命令行交互的安装过程:

执行完1中的命令就会出现以下交互过程,都可以使用默认配置(回头我们可以在配置文件中自行修改)

1)创建相关目录。

默认 Grerit 在安装用户主目录下创建review_site ,并把相关文件安装在这个目录之下。

Git 版本库的根路径默认位于此目录之下的git 目录中。

*** Gerrit Code Review 2.1.5.1

***

Create '/home/gerrit2/review-site' [Y/n]?


*** Git Repositories

***

Location of Git repositories [git]:


2)选择数据库类型。

选择 H2 数据库是简单的选择,无须额外的配置

*** SQL Database

***

Database server type [H2/?]:


3)设置 Gerrit Web 界面认证的类型

lOpenID模式

默认的鉴权方式为 openid,即使用任何支持OpenID 的认证源(如 GoogleYahoo!)进行身份认证。此模式支持用户自建帐号,用户通过OpenID 认证源的认证后,Gerrit 会自动从认证源获取相关属性如用户全名和邮件地址等信息创建帐号。Android 项目的 Gerrit 服务

lLDAP模式(推荐)

如果有可用的 LDAP 服务器,可以直接使用LDAP 中的已有帐号进行认证,不过此认证方式下 Gerrit 的自建帐号功能是关闭的。此安装示例选择的就是LDAP 认证方式,用户可以直接使用自己的域账户访问gerrit

*** User Authentication

***

Authentication method [OPENID/?]: ldap

LDAP server [ldap://localhost]:

LDAP username :

Account BaseDN : dc=foo,dc=bar

Group BaseDN [dc=foo,dc=bar]:

lHTTP模式

此认证方式需要配置 Apache 的反向代理,并在Apache 中配置 Web 站点的口令认证,通过口令认证后Gerrit 在创建帐号的过程中会询问用户的邮件地址并发送确认邮件,相对较为复杂。

$ sudo apt-get install apache2  安装apache2

/etc/apache2/httpd.conf中加入一下内容,注意, ProxyPass$gerrit.host最好用服务器对外的ip地址代替:

<VirtualHost *>

 ServerName  gerrit2.example.com

 ProxyRequests Off

 ProxyVia Off

 ProxyPreserveHost On


 <Proxy *>

       Order deny,allow

       Allow from all

 </Proxy>


 <Location /login/>

    AuthType Basic

    AuthName "Gerrit  Code Review"

    AuthBasicProvider file

    AuthUserFile $gerrit.home/etc/passwords

    Require valid-user

 </Location>


 ProxyPass /  http://$gerrit.host:8081/

</VirtualHost>


创建访问Gerrit的用户

由于是通过apache进行http basic认证, 故账户创建使用类似下面的命令即可:

$ htpasswordetc/passwords $username


4)发送邮件设置

*** Email  Delivery

***

SMTP server  hostname [localhost]:

SMTP server  port [(default)]:

SMTP  encryption [NONE/?]:

SMTP username  :


5)Java 相关设置。

使用 OpenJava Sun Java 均可。Gerrit war 包要复制到 review_site/bin 目录中

*** Container Process

***

Run as [gerrit2]:

Java runtime [/usr/lib/jvm/java-6-sun-1.6.0.24/jre]:

Copy gerrit.war to /home/gerrit2/review-site/bin/gerrit.war [Y/n]?

Copying gerrit.war to /home/gerrit2/review-site/bin/gerrit.war



6)SSH 服务相关设置。

Gerrit 的基于 SSH 协议的 Git 服务非常重要,默认的端口为 29418。换成其他端口也无妨,因为 repo 可以自动探测到该端口。

*** 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]?

Downloading  http://www.bouncycastle.org/download/bcprov-jdk16-144.jar ...

OK

Checksum bcprov-jdk16-144.jar OK

Generating SSH host key ... rsa... dsa... done


7)HTTP 服务相关设置。

默认启用内置的 HTTP 服务器,端口为 8080,如果该端口被占用(如 Tomcat),则需要更换为其他端口,否则服务启动失败。如下例就换成了 8081 端口。

*** HTTP  Daemon

***

Behind reverse  proxy [y/N]? y

Proxy uses SSL  (https://) [y/N]? y

Subdirectory  on proxy server [/]: /gerrit

Listen on  address [*]:

Listen on port  [8081]:

Canonical URL  [https://localhost/gerrit]:


Initialized  /home/gerrit/review_site:


*** Email  Delivery

***

SMTP server  hostname [localhost]:

SMTP server  port [(default)]:

SMTP  encryption [NONE/?]:

SMTP username  :


3.启动gerrit服务

Gerrit 服务正确安装后,运行 Gerrit 启动脚本来启动 Gerrit 服务。

$ /home/gerrit/review_site/bin/gerrit.sh start

Starting Gerrit Code Review: OK

服务正确启动之后,会看到 Gerrit 服务打开两个端口,这两个端口是在 Gerrit 安装时指定的。

您的输出和下面的示例可能略有不同。

$ sudo netstat -ltnp | grep -i gerrit

tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 26383/GerritCodeRev

tcp 0 0 0.0.0.0:29418 0.0.0.0:* LISTEN 26383/GerritCodeRev

四、Gerrit 的配置文件

Gerrit 的配置文件保存在部署目录下的etc/gerrit.conf 文件中。如果对安装时的配置不满意,可以手工修改配置文件,重启 Gerrit 服务即可。

1、全部采用默认配置时的配置文件:

[gerrit]

basePath = git

canonicalWebUrl  = http://localhost:8080/

[database]

type = H2

database =  db/ReviewDB

[auth]

type = OPENID

[sendemail]

smtpServer =  localhost

[container]

user = gerrit

javaHome =  /usr/lib/jvm/java-6-openjdk/jre

[sshd]

listenAddress  = *:29418

[httpd]

listenUrl =  http://*:8080/

[cache]

directory =  cache


2、如果采用 LDAP 认证,下面的配置文件片断配置了一个使用阿里域账户 LDAP 服务器配置,其中的用户名和密码可以使用自己的域账户

[auth]

type = LDAP

[ldap]

server = ldap://10.20.0.97:3268

username=  CN=xxxxxx,OU=service,

DC=hz,DC=ali,DC=com

password=XXXXX

accountBase =  DC=ali,DC=com

groupBase =  DC=ali,DC=com


3、下面的配置将 Web 服务架设在 Apache 反向代理的后面

[httpd]

listenUrl =  proxy-https://*:8081/gerrit


3、 如果采用 MySQL 而非默认的 H2 数据库,下面的配置文件显示了相关配置。

[database]

type = MYSQL

hostname =  localhost

database =  reviewdb

username =  gerrit

password =  xxxxx



你可能感兴趣的:(android,服务器,工作流,开发者,谷歌)