搭建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需要另外處理。
浙公网安备 33010602011771号