安裝環境,基礎文件下載java
# cat /proc/version Linux version 2.6.32-279.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Fri Jun 22 12:19:21 UTC 2012
redhat系linux,查看具體型號mysql
# cat /etc/issue CentOS release 6.3 (Final)
root 權限下操做linux
建立專用下載目錄android
# mkdir -p /home/download
下載要用到的文件:nginx
# wget http://gerrit-releases.storage.googleapis.com/gerrit-2.8.6.war # wget http://www.java.net/download/jdk7u60/archive/b15/binaries/jdk-7u60-ea-bin-b15-linux-x64-16_apr_2014.tar.gz # wget http://nginx.org/download/nginx-1.6.0.tar.gz # chmod 755 nginx-1.6.0.tar.gz # tar -xzvf nginx-1.6.0.tar.gz # cd nginx-1.6.0/ # ./configure --prefix=/home/server/nginx-1.6.0 --with-http_realip_module # cd /home/server/nginx-1.6.0/ # sbin/nginx -t nginx: the configuration file /home/server/nginx-1.6.0/conf/nginx.conf syntax is ok nginx: configuration file /home/server/nginx-1.6.0/conf/nginx.conf test is successful
安裝mysqlgit
# yum install mysql-server # service mysqld start //啓動mysql
進入mysql,執行sqlweb
mysql > show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
更改mysql字符集,sql
# vi /etc/my.cnf
增長以下配置數據庫
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] character_set_server = utf8 default-collation= utf8_general_ci
重啓mysqlcentos
# service mysqld restart
查看字符集
mysql> show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
建立全新用戶,廢棄無密碼用戶:
mysql> grant all privileges on *.* to gerrit@127.0.0.1 identified by 'gerrit'; mysql> use mysql; mysql> update user set password='abc123' where password=''; mysql> quit
重啓讓配置生效:
# service mysqld restart
安裝git
# yum install git
查看git 配置,將git配置成全局utf-8的字符集
# git config --list fatal: error processing config file(s)
出錯緣由是沒有配置文件,so,建立配置文件
# touch ~/.gitconfig
對git作以下設置
# git config --global core.quotepath false # git config --global i18n.logoutputencoding utf8 # git config --global i18n.commitencoding utf8
查看配置
# git config --list core.quotepath=false i18n.logoutputencoding=utf8 i18n.commitencoding=utf8
安裝gerrit
# mkdir /home/webapp # java -jar gerrit-2.8.6.war init -d /home/webapp/gerrit-2.8.6
完成,查看配置清單
# cat /home/webapp/gerrit-2.8.6/etc/gerrit.config [gerrit] basePath = /home/repository canonicalWebUrl = http://localhost/ [database] type = mysql hostname = 127.0.0.1 port = 3306 database = gerrit_db username = gerrit [auth] type = HTTP [sendemail] smtpServer = smtp.[域名].com smtpServerPort = 25 smtpUser = fengxiao smtpEncryption = SSL [container] user = root javaHome = /usr/java/jdk1.7.0_25/jre [sshd] listenAddress = *:29418 [httpd] listenUrl = proxy-http://*:8081/ [cache] directory = cache
開啓gerrit
# /home/webapp/gerrit-2.8.6/bin/gerrit.sh start
設置反向代理
nginx配置
在conf/nginx.conf 中加入以下一行,將配置放到單獨的配置文件中
....... http{ server { ....... } include vhosts/*.com; #加入這一行
建立文件, conf目錄下,
# touch conf/vhosts/test.gerrit.[域名].com
文件裏設置內容以下
# cat conf/vhosts/test.gerrit.[域名].com upstream 10.237.39.58 { server 10.237.39.58:8081; } server{ listen 80; server_name 10.237.39.58; charset utf-8; location / { proxy_pass http://10.237.39.58; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; auth_basic "Restricted"; auth_basic_user_file vhosts/passwd_file; } }
添加basic認證
在 目錄 /home/server/nginx-1.6.0/conf/vhosts/ 下執行以下操做
# printf "USER_NAME:`openssl passwd -apr1`\n" >> passwd_file
將USER_NAME設置成想要的值
個人帳戶密碼是 fengxiao / 123456 。
測試環境暫時不須要,去掉basic認證,最終配置
# cat conf/vhosts/test.gerrit.[域名].com upstream 10.237.39.58 { server 10.237.39.58:8081; } server{ listen 80; server_name 10.237.39.58; charset utf-8; location /login/ { proxy_pass http://10.237.39.58; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; #auth_basic "Restricted"; #auth_basic_user_file vhosts/passwd_file; } location / { proxy_pass http://10.237.39.58; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; } }
至此反向代理配置完成。
gerrit基礎配置,數據庫和帳號ldap問題處理
訪問gerrit http://10.237.39.58/ , 首次登錄用戶是超級管理員。
添加新的工程,Projects -> Create New Project ,名字填寫 mytest
設置項目權限,Projects -> List -> mytest, 而後在菜單欄(與List平級)選擇 Access ,點Edit,設置權限以下
Reference: refs/heads/* Read DENY Registered Users ALLOW xms Label Code-Review -2 +2 xms Submit ALLOW xms
本地客戶端獲取遠程工程
$ git clone ssh://fengxiao@10.237.39.58:29418/mytest $ cd mytest $ touch abc $ vi abc //寫一些內容 $ git add . $ git commit -m 'recommit with Change-Id' $ git log -1 commit c5a1cd9b3d06a98fbd297be104197faab7dc2f20 Author: fengxiao <fengxiao@xiaomi.com> Date: Thu Jul 17 14:16:10 2014 +0800 disanci N/A Signed-off-by: fengxiao <fengxiao@xiaomi.com>
執行push操做,gerrit須要提交到 refs/for/master下
$ git push origin HEAD:refs/for/master
報錯,以下: remote: ERROR: missing Change-Id in commit message footer
google了一下,是由於提交到gerrit下,須要有一個change-id做爲標示,根據文檔進行了以下操做
項目根目錄,設置change-Id
$ curl -Lo .git/hooks/commit-msg http://10.237.39.58/tools/hooks/commit-msg $ chmod u+x .git/hooks/commit-msg
重置以前的提交
$ git reset --soft HEAD^ $ git add . $ git commit -m 'recommit with Change-Id' $ git log -1 commit 82e9d5376025cc3542a310081e7e8963618581df Author: fengxiao <fengxiao@xiaomi.com> Date: Thu Jul 17 14:31:28 2014 +0800 recommit with Change-Id N/A Change-Id: I38ecae805912baf187e25a6028bf1b6183ee6ef7 Signed-off-by: fengxiao <fengxiao@xiaomi.com>
這時已經存在Change-Id了,執行push
$ git push origin HEAD:refs/for/master
發現仍然報錯:
[remote rejected] HEAD -> refs/for/master (no new changes)
error: failed to push some refs to 'ssh://fengxiao@10.237.39.58:29418/mytest
到服務器上去查看gerrit日誌,
# tail -f /home/webapp/gerrit-2.8.6/logs/error_log
說是roll back 報錯(具體報錯我忘記記錄了,= =),
網上查了一下,說下要把mysql設置成auto_commit = off,而後引擎改爲innodb,innodb已經改過,修改mysql配置
# vi /etc/my.cnf ,添加下面一行 [mysqld] autocommit=0
重啓mysql
# service mysqld restart
查看mysql配置
mysql > show variables like '%commit%'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | autocommit | ON | | innodb_commit_concurrency | 0 | | innodb_flush_log_at_trx_commit | 1 | +--------------------------------+-------+
發現失效,很奇怪,繼續google,在mysql的buglist裏發現了,這是mysql5.1的一個bug,高版本會解決,我是用yum安裝,正好是mysql5.1,感受這樣下去很費時間,仍是用gerrit自帶的數據庫吧,改用h2.
# cd /home/download # java -jar gerrit-2.8.6.war init -d /home/webapp/gerrit-2.8.6 *** Gerrit Code Review 2.8.6 *** *** Git Repositories *** Location of Git repositories [/home/repository2]: *** SQL Database *** Database server type [h2]: *** User Authentication *** Authentication method [LDAP/?]: LDAP server [ldap://10.237.8.2:389]: LDAP username [個人配置]: Change CN=Xiaomi Authz AccountReadonly,OU=Other,DC=xiaomi,DC=net's password [y/N]? Account BaseDN [個人配置]: Group BaseDN [個人配置]: *** Email Delivery *** SMTP server hostname [smtp.域名.com]: SMTP server port [25]: SMTP encryption [NONE/?]: SMTP username [fengxiao]: inform Change inform's password [y/N]? y inform's password : confirm password : *** Container Process *** Run as [root]: Java runtime [/usr/java/jdk1.7.0_25/jre]: Upgrade /home/webapp/gerrit-2.8.6/bin/gerrit.war [Y/n]? Y Copying gerrit-2.8.6.war to /home/webapp/gerrit-2.8.6/bin/gerrit.war *** SSH Daemon *** Listen on address [*]: Listen on port [29418]: *** HTTP Daemon *** Behind reverse proxy [Y/n]? Y Proxy uses SSL (https://) [y/N]? N Subdirectory on proxy server [/]: Listen on address [*]: Listen on port [8081]: Canonical URL [http://10.237.39.58/]: *** Plugins *** Install plugin download-commands version v2.8.6 [y/N]? Install plugin reviewnotes version v2.8.6 [y/N]? Install plugin replication version v2.8.6 [y/N]? Install plugin commit-message-length-validator version v2.8.6 [y/N]? Initialized /home/webapp/gerrit-2.8.6
配置結束,查看最終配置
# cat /home/webapp/gerrit-2.8.6/etc/gerrit.config [gerrit] basePath = /home/repository2 canonicalWebUrl = http://10.237.39.58/ [database] type = h2 database = db/ReviewDB [auth] type = LDAP [ldap] server = ldap://10.237.8.2:389 username = 個人配置 accountBase = 個人配置 groupBase = 個人配置 [sendemail] smtpServer = smtp.xiaomi.com smtpServerPort = 25 smtpUser = inform from = inform@xiaomi.com #注意要單獨vi,加上這一行,否則會報錯 [container] user = root javaHome = /usr/java/jdk1.7.0_25/jre [sshd] listenAddress = *:29418 [httpd] listenUrl = proxy-http://*:8081/ [cache] directory = cache
配置完成。
回到客戶端,繼續進行提交操做:
$ git push origin HEAD:refs/for/master
成功
訪問gerrit https://10.237.39.58
在 My -> Changes 的 Outgoing reviews 已經看到本次提交,點review,review成功。
可是發現一個問題,郵件並未發送,回去gerrit服務器,查看日誌
# tail -f /home/webapp/gerrit-2.8.6/logs/error_log
發現以下報錯
Mail Error: Server smtp.xiaomi.com rejected message body: 550 5.7.1 Client does not have permissions to send as this sender
google後發現爲設置from,因而修改配置,增長from配置
# vi /home/webapp/gerrit-2.8.6/etc/gerrit.config [sendemail] from = inform@xiaomi.com
再次進行commit 和review操做,發現郵件已經發送。至此,server端配置完成。
repo配置
gerrit清單庫是用來配合repo使用的。清單庫中列出了gerrit服務器上的其餘版本庫。客戶端經過repo腳本下載清單庫後,腳本會解析清單庫中列出的庫並自動下載.
第一步 本地機器配置repo工具用到的倉庫
首先將repo版本庫克隆至本地並push到gerrit服務器。
$ git clone https://android.googlesource.com/tools/repo
先添加遠程倉庫
$ git add remote gerrit ssh://fengxiao@10.237.39.58:29418/repo //此時origin 已經佔用 android.googlesource.com
$ git push gerrit master
發現報錯,多是遠程倉庫不容許直接上傳?so,先添加一個
在gerrit 處操做,Projects -> Create New Project , 名字命名爲repo
第二步 配置manifest配置文件倉庫
建立一個空的清單庫manifest.git,清單庫中只有xml文件。
在清單庫中建立default.xml文件,將manifest.git經過push傳至gerrit服務器。
過程同上,爲了簡便,能夠先在gerrit上添加manifest倉庫,而後pull到本地
本地manifest文件夾下,添加文件 default.xml,內容以下:
<manifest> <remote fetch="ssh://10.237.39.58:29418" name="remote_name1" review="10.237.39.58"/> <default remote="remote_name1" revision="master" /> <project name="mytest" path="mytest" > </project> </manifest>
推送到gerrit服務器
$ git add . $ git commit -m 'configure file add' $ git push origin master
到服務器上的git倉庫目錄下查看:
# ls -ls total 16 4 drwxr-xr-x 7 root root 4096 Jul 17 16:51 All-Projects.git 4 drwxr-xr-x 7 root root 4096 Jul 21 14:46 manifest.git 4 drwxr-xr-x 7 root root 4096 Jul 17 18:01 mytest.git 4 drwxr-xr-x 7 root root 4096 Jul 21 14:41 repo.git
第三步 本地機器安裝repo
確認 ~/bin 在你當前的環境變量 PATH 裏面.
$ mkdir ~/bin $ PATH=~/bin:$PATH
從 Google 服務器下載 repo,確保其可執行
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
repo配置完成,下面是使用範例。
切換到一個全新的目錄下:
$ repo init -u ssh://fengxiao@10.237.39.58:29418/manifest.git -m default.xml --repo-url=ssh://fengxiao@10.237.39.58:29418/repo.git --repo-branch=master --no-repo-verify
fengxiao 這塊換成本身的郵箱名,例如,anshanshan
$ repo init -u ssh://anshanshan@10.237.39.58:29418/manifest.git -m default.xml --repo-url=ssh://anshanshan@10.237.39.58:29418/repo.git --repo-branch=master --no-repo-verify
若是報reject,是由於未註冊,也未加入ssh的pub key,獲取pub key內容
$ cat ~/.ssh/id_rsa.pub
訪問 http://10.237.39.58,輸入公司郵箱的用戶名密碼登錄,以後右上角,點setting -> SSH Public Keys 添加公鑰。回來繼續執行上面的repo init
會有下面的問答,確保是本身的帳號/郵箱
$ repo init -u ssh://fengxiao@10.237.39.58:29418/manifest.git -m default.xml --repo-url=ssh://fengxiao@10.237.39.58:29418/repo.git --repo-branch=master --no-repo-verify Your Name [fengxiao]: Your Email [fengxiao@xiaomi.com]: Your identity is: fengxiao <fengxiao@xiaomi.com> is this correct [y/n]? y
查看本地目錄發現有個.repo 文件夾
$ repo sync
發現 mytest項目已經下載下來。
$ cd mytest $ repo start dev . // . 不能丟,表示當前工程 $ vi myfile //隨便寫一些 $ git add . $ git commit -m 'comment message' $ repo upload
注意,這裏會自動提交到遠程的master分支,這是在 .repo/manifest.xml裏配置的<default remote="remote_name1" revision="master" />訪問,http://10.237.39.58, 在 My -> Changes -> Outgoing reviews 已經能夠看到本次提交。