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