Gerrit
Gerrit,开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。它使用Git作为底层版本控制系统。原先是为了管理Android计划而产生。Gerrit最早是由Python写成,第二版之后改成用Java与SQL。使用Google Web Tookit 来产生前端的JavaScript。
Gerrit的构建系统
Gerrit在2.8版本之后,项目完全采用Buck系统构建。Buck是一个构建系统,以Google的内部构建系统“blaze”为模型,它是由前Google,现Facebook工程师开发的。在Facebook,该构建系统是开源的,基于apache许可,位于GitHub上。Buck基于Python构建,不过在Gerrit中它主要用于编译Java。
Buck语言是个DSL,使用Python作为底层构建文件。Buck相对于Maven的主要优势在于速度快。Buck构建可以跨模块并行执行,默认情况下,Buck构建会执行1.25xCPU个线程。Buck只支持Mac OS 与 Linux,不支持Windows。
Buck有三个主要的概念:
(1)构建规则
构建规则是一个程序从一组输入文件产生一个输出文件
(2)构建目标
构建目标是一个标识构建规则的字符串。
(3)构建文件
构建文件,定义了一个或多个构建规则。
Gerrit项目中Buck文件常见规则:
(1)java_library()
用于定义一组Java文件,可以一起被编译。java_library()规则的主要输出是一个单独的JAR文件,其中包含所有的编译后的类文件和资源。示例如下:
java_library(
name= 'JsonUtil',
srcs= ['JsonUtil.java'],
deps= [
'//third_party/guava:guava',
'//third_party/jackson:jackson',
],
)
(2)genrule()
从一个shell命令生生一个输出文件。示例如下:
genrule(
name= 'gen',
out= 'out.txt',
cmd= 'cp $SRCS \$(dirname $OUT)',
srcs= [
'test1.txt',
'test2.txt',
],
)
(3)remote_file()
用来从互联网上下载一些用作其他规则的依赖关系的文件。这些规则是通过运
行 buck fetch 下载,或者可以下载 buckbuild 的一部分。示例如下:
remote_file(
name = 'android-ndk-r10e-darwin-x86_64',
url ='https://dl.google.com/android/ndk/android-ndk-r10e-darwin-x86_64.bin',
sha1 ='b57c2b9213251180dcab794352bfc9a241bf2557',
)
(4)prebuilt_jar()
用来识别一个JAR文件,检查我们的库作为预编译的二进制文件,而不是一个由
buck从源代码频繁构建。这些都是用来引用第三方JAR文件(比如junit.jar)和
用作依赖性ofjava_library()规则。示例如下:
prebuilt_jar(
name = 'junit',
binary_jar = 'junit-4.8.2.jar',
source_jar = 'junit-4.8.2-sources.jar',
javadoc_url ='http://kentbeck.github.com/junit/javadoc/4.8/',
)
java_library(
name = 'tests',
srcs = glob(['tests/**/*Test.java']),
deps = [
':junit',
],
)
搭建Gerrit开发环境
Gerrit环境搭建步骤如下:
(1)下载Gerrit源码
gitclone --recursive https://gerrit.googlesource.com/gerrit
NOTE:--recursive 参数是为了保证内嵌的plugins都能被下载到
(2)IntelliJIDEA 安装buck插件
①git ②python2.6+ ③Buck for IDEA ④GWT
(3)Linux/Ubuntu安装插件
①curl 工程第一次编译时联网下载jar包
apt-get install curl
②git apt-get install git
③gerrit apt-get install gerrit
④maven apt-get install maven2
⑤ant apt-get install ant
⑥buck 用于工程编译
git clone https://github.com/facebook/buck
cd buck
ant
mkdir~/bin
PATH=~/bin:$PATH
在 ~/bin 中添加可执行文件 buck和buckd的符号链接
ln -s 'pwd'/bin/buck ~/bin/
ln -s 'pwd'/bin/buckd ~/bin/
验证buck是否可访问
which buck
⑦watchman
git clone https://github.com/facebook/watchman.git
cd watchman
./autogen.sh
(二者选其一即可)
安装在用户目录下(withoutroot privileges):
./configure --prefix $HOME/watchman
make install
安装下系统目录下:
./config
make
sudo make install
(4)所有插件安装好之后,File--> open --> 下载的gerrit源码
Gerrit源码编译
一、在IDEA终端进行如下操作:
(1)创建eclipseproject
tools/eclipse/project.py
(2)构建 gerrit web应用
①buck build gerrit
生成的是gerrit.war
②buck build all
生成的是release.war
①和②选其一执行即可,WAR包输出路径:buck-out/gen/gerrit.war
NOTE: 重新构建需要先执行: buck clean
二、Dependencies
依赖JAR在构建时会自动下载,buck也可以下载任何丢失的JAR文件,以使后续没有网络访问的情况下可以构建运行
tools/download_all.py
下载时,可能需要显式地指定使用的代理,然后curl下载
export http_proxy=http://<proxy_user_id>:<proxy_password>@<proxy_server>:<proxy_port>
搭建Gerrit服务器
以MySql数据库、HTTP验证、Apache代理为例
①安装Mysql数据库,Apache服务器
②使用root权限进入Mysql数据库,执行如下操作:
CREATE USER 'gerrit2'@'localhost'IDENTIFIED BY 'secret';
CREATE DATABASE reviewdb;
ALTER DATABASE reviewdbcharset=latin1;
GRANT ALL ON reviewdb.* TO 'gerrit2'@'localhost';
FLUSH PRIVILEGES;
③初始化网站
sudoadduser gerrit2
sudosu gerrit2
cd ~/gerrit
java -jar gerrit.war init -d review_site
(相应配置可参照:http://codexc.com/blog/2014/09/how-to-installation-and-configuration-gerrit-v2-10-with-github-oauth/)
④设置apache代理