Gerrit源码开发环境搭建详解

本文深入探讨了开源代码审查工具Gerrit的使用方式及功能,特别是如何利用Buck构建系统提高开发效率。文章详细介绍了Gerrit的网页界面及其与Android计划的关系,以及Buck构建系统的速度优势和主要概念,包括构建规则、构建目标和构建文件,并提供了Gerrit项目中常用的Buck规则示例。此外,文章还指导了如何搭建Gerrit开发环境,包括下载源码、安装相关插件和配置Linux/Ubuntu系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值