Gerrit源碼開發環境搭建詳解

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章