Android 源码部署到服务器端,一共分为七个部分。
- 软件环境
- GitLab 服务端部署
- Repo Manifest.xml 生成
- GitLab 建仓
- Git Push 源码到服务器
- Repo 同步源码
- 提交修改后的代码
为了少采坑,少浪费时间,建议不要使用ARM版的gitlab、保证gitlab使用的磁盘容足够、涉及到的xml文件请用浏览器打开,确认可以正常显示!!
一、软件环境
服务器端系统: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://youip(需要更换为你自己的 url)。
接下来可以创建 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 //此处的18和.....根据自己的情况填写
得到如下路径:
art
接着需要生成清单文件。
gen_xml.sh
#!/bin/bash
echo -e "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<manifest>
<remote name=\"android_x\"
fetch=\"..\"/>
<default revision=\"master\"
remote=\"android_x\"
sync-j=\"4\" />" >>$1
while read line; do
echo " <project path=\"$line\" name=\"$line\" />" >>$1
done
echo -e "\n</manifest>" >>$1
运行脚本 gen_xml.sh 即可。
cat path.txt | ./gen_xml.sh default.xml
default.xml 内容如下,这就是我们要的清单文件(Manifest.xml)。
<?xml v