构建git+gerrit+repo的Android代码服务器

谷歌的Android源码是基于Git+Repo管理的,官方推荐的代码管理也是git+gerrit+repo。谷歌自己都在用的东西,各种优点,各种强大就不用说了,你懂的。关于它们的介绍可查阅极客学院的Wiki中官方翻译http://wiki.jikexueyuan.com/project/android-source/developing.html。下面结合公司搭建代码服务器的经历,说下整个搭建和使用过程,希望大家一起交流下心得。

安装git

1.建个git账户。作服务器用,最好建个git账户。指令:sudo adduser --system --shell /bin/sh  --gecos 'git version control' --group --disabled-password --home /home/git git。篇幅有限,简单指令就不解释了,请自行谷歌百度,我也是这么干的。

2.安装 ssh client 和 ssh server  (有可能ubuntu默认已经安装,重新敲下不会损失什么的)

sudo apt-get install openssh-client openssh-server

3.安装git 客户端

sudo apt-get install git-core git-gui gitk

4. 生成ssh账号的密钥

ssh-keygen -t rsa

然后切到git用户下,执行下面步骤

5. 配下环境变量

echo "PATH=$HOME/bin:$PATH" > ~/.bashrc

不行就下面这个

export PATH=/home/git/bin:$PATH

6.安装gitolite server

在/home/git下执行

git clone git://github.com/sitaramc/gitolite  #从网站上获取gitolite的代码,放在了/home/git下,是安装文件

./gitolite/install -ln  #Gitolite系统安装,安装到/home/git/bin,要在git用户下mkdir bin,否则这步报错

gitolite setup -pk /tmp/git.pub  #生成repository,仓库。其中git.pub是由第四步生成的id_rsa.pub改名的,可随意改

最后使用git config --global user.name  和 git config --global user.email 配下用户名和邮箱,至此git安装完毕

安装配置gerrit

1. 安装java。网上很多,挤客学院也有,很简单

2. 安装git。前面已经说过

3. 创建专用的用户(gerrit2)来安装gerrit

sudo adduser gerrit2

sudo su gerrit2

4. 安装gerrit,选择http认证(gerrit2用户)

java -jar ./gerrit-2.9.1.war init -d ~/gerrit_site_http

安装过程中,Authentication method [OPENID/?]:输入http,另外Behind reverse proxy [y/N]?选y 反向代理,其他的默认即可

5. 配置gerrit.config,可参考下面

[gerrit]

basePath = git

canonicalWebUrl = http://192.168.1.48:8081/

[database]

type = H2

database = db/ReviewDB

[auth]

type = HTTP

[sendemail]

smtpServer = localhost

[container]

user = gerrit2

javaHome = /usr/lib/jvm/java-6-oracle/jre

[sshd]

listenAddress = *:29418

[httpd]

listenUrl = proxy-http://192.168.1.48:8081/

[cache]

directory = cache

6. 安装配置apache2

sudo apt-get install apache2

反向代理可参考下面

/etc/apache2/httpd.conf

<VirtualHost *:80>

 ProxyRequests Off

 ProxyVia Off

 ProxyPreserveHost On

 <Proxy *>

Order deny,allow

Allow from all

 </Proxy>

 <Location /login/>

    AuthType Basic

    AuthName "Gerrit Code Review"

    AuthBasicProvider file

    AuthUserFile /home/gerrit2/gerrit_site_http1/etc/passwords

    Require valid-user

 </Location>

 ProxyPass / http://192.168.1.48:8081/

</VirtualHost>

7. 设置第一个gerrit用户(管理员)的帐号和密码

进入/home/gerrit2/review_site/etc目录下

touch passwords

htpasswd passwords admin

这里的admin就是以后用来登录gerrit的用户名。以后要为gerirt增加用户,也需要通过htpasswd命令来添加。

用htpasswd创建的用户时,并没有往gerrit中添加账号,只有当该用户通过web登陆gerrit服务器时,该账号才会被添加进gerrit数据库中。

8. 重启电脑然后重启服务

sudo /etc/init.d/apache2 restart

su gerrit2

cd /home/gerrit2/gerrit_site

./bin/gerrit.sh stop

./bin/gerrit.sh start

9. 打开浏览器,输入192.168.1.48即可登录

10. 验证下 ssh -p 29418 -i ~/.ssh/admin 192.168.1.48 -l admin

11. 设置/修改邮箱 ssh ha gerrit set-account --add-email admin@cncgroup.cn admin

    一个邮箱只能一个用户使用,否则会报错。

12.建库:ssh -p 29418 -i ~/.ssh/admin 192.168.1.48 -l admin gerrit create-project --name

      ssh ha gerrit create-project --name test --empty-commit

13.然后是分组/审查的设置,这个内容比较多,可参考帮助文档,设置能达到目标即可

以上就是gerrit的整个过程,你会发现gerrit目录结构中有git仓库,即gerrit把git集成进去了,git的操作要经过gerrit的审查。

repo安装

如果能科学上网的话,很简单,只需从官网下把那个repo脚本下下来,放/bin/下, chmod a+x repo即可。每次用它拉版本时,它会从谷歌服务器下载repo仓库(一系列脚本),之后直接用即可。可惜不行。

可采用的办法是

1. 通过其他途径下下repo.git仓库,传到本地服务器上(gerrit的git库review_site/git下)。

2. 然后修改/bin/repo脚本 os.system("git clone ssh://192.168.1.48:29418/repo %s"%dst) 先执行了下git clone把repo.git这个库从本地服务器clone下来

3. 在gerrit的git库下创建manifest.git库,其中放各个.xml文件,相关可参考

<?xml version="1.0" encoding="UTF-8"?>

<manifest>

 <remote  name="repo-server"

  fetch="ssh://192.168.1.48:29418"

  review="http://192.168.1.48"/>

 <default revision="develop"

  remote="repo-server"

  sync-j="4" />

 <project path="alps/packages" name="alps/packages" />

</manifest>

至此,构建git+gerrit+repo的Android代码服务器完成,使用中还有很多细节/技巧,后续大家一起交流。



Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐