开发代码放置在外部git服务器,使用repo进行代码更新,由于代码量大、库多、公司网络环境等影响,从服务器获取整体代码速度缓慢,将借助jenkins及gitlab,在本地linux服务器创建repo版本库,将外部服务器代码整体保存到本地局域网服务器,编译开发时从本地服务器取得代码使用。
1.取得外部服务器的镜像库 (your_url 为外部库地址)
因为整体代码由200多个代码库组成,直接使用repo获取镜像库,追加--mirror参数,将下面标红字体替换为你的repo路径
eg:
mkdir repo_mirror
cd repo_mirror
初始化版本库:
repo init --mirror -u your_url/manifests.git--repo-urlyour_url/repo.git -mmanifest.xml
同步:
repo sync
同步完成后,将在下面将所有repo代码库的镜像库放置到repo_mirror目录下。
2.取得所有代码库文件名,方便批量创建project
repo_mirror目录执行:ls >../projects_list.txt
打开projects_list.txt将projects_list.txt 内所有.git 替换为 \
替换前:
pro1.git
pro2.git
pro3.git
替换后:
pro1 \
pro2 \
pro3 \
3.使用gitlab api批量在指定groups下创建project。(gitlab环境之前已配置ok,此处不详细说明)
浏览器访问http://your_ip/api/v3/projects 查找需要groups的ID ,对应为namespace的id,取得本次创建需要的组id值为2。
ps:具体应该可以使用gitlab的api命令获取,没有仔细研究.....见谅......
"namespace": {
"id": 2,
"name": "git",
"path": "git",
"owner_id": null,
"created_at": "2016-12-24T08:56:03.582Z",
"updated_at": "2017-09-25T10:30:52.538Z",
"description": "",
"avatar": {
"url": null
},
4.创建gitlab的projects
使用第二步取得的库名及第三步的groups id 创建 project。
private_token从gitlab中获取,
另注意path的值不要使用默认,测试时候发现如果库名中有"."的情况默认会替换为"-",被这个坑了好久。
创建脚本:
projects="pro1 \
pro2 \
pro3 "
for project in $projects
do
info="name=$project&path=$project&wiki_enabled=no&public_jobs=true&public=true&namespace_id=2&default_branch=master&private_token=your_private_token"
curl -d $info "http://your_ip/api/v3/projects"
done
执行结束后到登录到gitlab,确定库创建完成。
5.将镜像库上传到本地gitlab上
创建脚本:
dir_name="$PWD"
all=`ls ${dir_name}`
for i in $all
do
if [ -d $i ]
then
echo "[$i]"
cd $i
git push --mirror git@your_ip:git/$i
cd ..
fi
done
执行脚本,确定版本库push无误。
6.可以使用本地库进行repo代码取得 (your_local_url为本地gitlab库地址)
repo init -u your_local_url/manifests.git--repo-urlyour_local_url/repo.git -mmanifest.xml
同步:后记:利用Jenkins自动更新及上传代码库到本地,缩小和外部服务器的代码差异。
参考内容:
gitlab api:https://docs.gitlab.com/ee/api/README.html