搭建android项目的repo server记录

在公司服务器.9上搭建了android的repo server,过程记录

需求:

一. 实现正常的code下载,sync

二. 账户权限管理

三. 上传code后邮件推送给mail loop中的人

四. merge的考虑

 

需求一:实现正常的code下载,sync。

1. 将android source code部署好,无需source code,只要.git仓库即可。(.repo/projects中)

 可在source rootdir创建指向.repo/projects中各目录的symbol link。以xxx.git命名。

2. 在服务器端新建目录manifest.git(如已有则创建symbol link即可),在目录中创建default.xml。

3. 修改default.xml中的参数和project路径。

=========================================================

~/.ssh/config的配置

host dian9ssh
user 用户名
hostname 192.168.130.9
port 22

default.xml的内容

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <manifest>
 3   <!-- remote是配置远程服务器的一些参数 -->
 4   <!-- fetch指定远程服务器 -->
 5   <remote fetch="dian4ssh:/git/w70ka/msm8212" name="remote-dian4" review="1404amd64"/>
 6   <!-- default是project标签的默认配置 -->
 7   <!-- revision指定branch的名字 -->
 8   <default remote="remote-dian4" revision="W70KA"/>
 9   <project name="device/common"/>
10   <!-- project标签 -->
11   <!-- name指定了project在服务器上的路径 ${fetch}/${name}.git ;如果name中以/结尾,则路径${fetch}/${name} -->
12   <!-- path指定了存到本地的路径 -->
13   <project groups="pdk" name="device/generic/armv7-a-neon"/>
14   <project groups="pdk" name="device/generic/common"/>
15   <project groups="pdk" name="device/generic/goldfish"/>
16   <project groups="pdk" name="device/generic/mini-emulator-armv7-a-neon"/>
17   <project groups="pdk" name="device/generic/mini-emulator-mips"/>
18   <project groups="pdk" name="device/generic/mini-emulator-x86"/>
19   <project groups="pdk" name="device/generic/mips"/>
20   <project groups="pdk" name="device/generic/x86"/>
21   <project groups="device" name="device/google/accessory/arduino"/>
22   <project groups="device" name="device/google/accessory/demokit"/>
23   <project name="device/qcom/common">
24     <copyfile dest="build.sh" src="build.sh"/>
25     <copyfile dest="vendor/qcom/build/tasks/generate_extra_images.mk" src="generate_extra_images.mk"/>
26   </project>
27   <project name="external/apache-harmony" path="external/apache-harmony"/>
28   <project name="external/apache-http" path="external/apache-http"/>
29   <project name="external/apache-qp" path="external/apache-qp"/>
30   <project name="external/apache-xml" path="external/apache-xml"/>
31   <project name="external/arduino" path="external/arduino"/>
32   <project groups="pdk" name="external/bison" path="external/bison"/>
33   <project name="external/blktrace" path="external/blktrace"/>
34 ......

PS:client执行repo init后,会自动创建default.xml的symbol link,名为manifest.xml。

PS:repo init有时无法连接google服务器,将repo脚本的REPO_URL改为一个可以访问到的repo.git即可,可指向本地已有的repo仓库。

 

需求二:账户权限管理

1. .9上新建david和joan的账户,并新建组android,将david、joan、daniel、ken四个用户加入git、android组。

  adduser david

  usermod -a -G android david(将用户加入某组,如不加-a则将用户从其他组移除)

  usermod -a -G git david

  [PS: 删除用户 userdel -r david]

2. 进入android source root dir,chmod -R g+w,g+s *。确保有每个目录的设置组ID位已置。

3. chown -R git:android *。将组设为android

 

需求三:上传code后邮件推送给mail loop中的人

1. 将post-receive和post-receive-email两个文件放置到每一个project下的hooks目录中,post-receive文件中指向post-receive-email。

2. 在project.git目录下执行git config命令或者直接修改config文件进行配置。

3. 可用脚本的方式为每一个project设定

=========================================================

 1 #! /bin/sh
 2 
 3 PATH_ORIGIN=$PWD
 4 
 5 for line in `cat .repo/project.list`
 6 do
 7         echo ${PWD}/.repo/projects/${line}.git/>> .repo/project.list.abs
 8 done
 9 
10 for line in `cat .repo/project.list.abs`
11 do
12         cd $line
13         git config hooks.envelopsender gitRepo
14         git config hooks.emailprefix "[git] "
15         git config hooks.showrev "git show -C %s; echo"
16         git config hooks.maillist "此处设置mailloop"
17 #       echo $line
18         echo ============= ok ==================
19 done
20 
21 cd $PATH_ORIGIN
22 rm .repo/project.list.abs


4. 这样只要有人提交code到git servre,就会触发hooks进行邮件推送了。

 

PS:邮件推送使用的是sendmail,所以需要保证系统中的sendmail可用。

============================================================

附上sendmail的使用方法

/usr/local/bin/sendEmail –f sender@163.com –t receiver@163.com –s smtp.163.com –u “from nagios” –xu sender –xp 123456 –m happy
解释:
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 表示邮件的内容
如果你不带-m参数的话,就会提示你自行输入
Reading message body from STDIN because the ‘-m’ option was not used.
If you are manually typing in a message:
- First line must be received within 60 seconds.
- End manual input with a CTRL-D on its own line
输入完成后使用CTRL-D来结束

 

需求四:merge的考虑

merge code是利用repo forall的指令對所有的git project中的branch進行merge。需要注意的地方就是Conflict需要另外處理。

posted on 2014-08-13 15:23  mimamo  阅读(866)  评论(0)    收藏  举报

导航