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