安装环境,基础文件下载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 已经能够看到本次提交。