Android 源码部署到服务器(Git+GitLab+Repo)
Android 源码部署到服务器端,一共分为七个部分。
软件环境
GitLab 服务端部署
Repo Manifest.xml 生成
GitLab 建仓
Git Push 源码到服务器
Repo 同步源码
提交修改后的代码
一、软件环境
服务器端系统:Ubuntu 16.04
GitLab 软件:GitLab Community Edition
客户端系统:Ubuntu 14.04
Git 软件:Git 2.27.0
二、GitLab 服务端部署
必要组件安装
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix
在安装 postfix 时候,需要使用左右键和回车键确认,并在下拉列表选择 Internet Site 并确认。
信任 GitLab 的 GPG 公钥
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
配置镜像路径
如果没有安装 vim 先进行安装
vim /etc/apt/sources.list.d/gitlab-ce.list
打开 gitlab-ce.list 后,写入:
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main
如果 gitlab-ce.list 文件不存在,自行创建即可,并赋予权限,可在 root 权限下进行。
touch /etc/apt/sources.list.d/gitlab-ce.list
chmod 777 /etc/apt/sources.list.d/gitlab-ce.list
安装 gitlab-ce
sudo apt-get update
sudo apt-get install gitlab-ce
执行配置
sudo gitlab-ctl reconfigure
启动 GitLab
sudo gitlab-ctl start
修改 external_url
sudo gedit /etc/gitlab/gitlab.rb
修改如下路径:
external_url 'http://gitlab.example.com'
具体要换成你服务端的 IP,比如,我这里使用的是 192.168.50.10
external_url 'http://192.168.50.10'
这里一定要重新配置,再次执行配置命令
sudo gitlab-ctl reconfigure
访问你的 GitLab 服务
打开同一网段的任何电脑上的浏览器,前提是电脑可以互相访问,如果使用了虚拟机,则要配置网络类型为桥接,并将虚拟机都配置在同一网段内,并且可以互相访问,可以 ping 一下,保证网络畅通。
浏览器地址栏输入:http://192.168.50.10(需要更换为你自己的 url)。
[图片上传失败...(image-54367b-1612399398269)]
接下来可以创建 root 用户,输入密码并确认。注册其他用户等等。
三、Repo Manifest.xml 生成
为什么需要自己去生成 Manifest.xml?如果你手上的代码已经不知道哪里同步来的,或者是方案厂商提供的,总之不是使用 Repo 管理代码,可能把修改的部分作为一个单独的 git 仓上库了。如此我们就需要根据这份现有的源码去生成 Manifest.xml。
前提是基于源码修改的仓都用 git 上库了,或者是增加了一些仓但是和 Manifest.xml 不同步,这都需要修改 Manifest.xml 保持源码仓和 Manifest.xml 对等。
因为源码中每个仓都有 .git 了,所以我们需要统计所有的 .git ,这是为了找出所以的 git 仓,然后写入 Manifest.xml,如此我们就可以使用 Repo 管理这些仓了。
找出所有 git 仓库
find myandroid/ -type d -name '.git' > git_pro.txt
打开 git_pro.txt 就会看到如下行
......
/home/snake/Share/art/.git
......
使用 bash 指令“掐头去尾”(删掉前缀路径 /home/snake/Share/ 和后缀 .git)
cat git_pro.txt | cut -c 18- | sed 's/.....$//' > path.txt
得到如下路径:
art
接着需要生成清单文件。
gen_xml.sh
#!/bin/bash
echo -e "
fetch=\"..\"/>
remote=\"aosp\"
sync-j=\"4\" />" >>$1
while read line; do
echo " " >>$1
done
echo -e "\n" >>$1
运行脚本 gen_xml.sh 即可。
cat path.txt | ./gen_xml.sh default.xml
default.xml 内容如下,这就是我们要的清单文件(Manifest.xml)。
fetch=".."/>
remote="aosp"
sync-j="4" />
......
fetch 是 “…” 代表返回到上级目录,我这里将 manifest 仓库放在了 android6newc 组下面,详见下文。
revision 是 master 代表主干分支,这个要和 android6newc 组下面源码仓分支对应。
这二者配置不正确,repo 无法正常同步源码仓。
四、GitLab 建仓
源码中仓库太多了,不可能在浏览器内一个一个创建,所以需要借助 python-gitlab 库来自动完成。将 default.xml 放在和脚本同一目录,运行它。等待建仓完成,有点耗时,可能要半小时。如果没有安装 python-gitlab 可以借助 pip 进行安装。
脚本内写死了父组名(Android6NewC)