描述
最近新接了一个需求,有两个不同的gitlab仓库,隶属于不同的部门,我们需要将其他部门的gitlab代码仓库实时或定时同步到我们的gitlab代码仓库上.
思路
网上调研了下实现方案, 大概有两种
- 方案一
直接设置镜像仓库 - 方案二
通过gitlab webhooks + jenkins + rsync或者git命令同步
实现方式
1. 设置镜像镜像仓库
进入代码仓库之后点击仓库 =>镜像仓库 =>展开 =>Git仓库URL =>填入http://<用户名>@<仓库域名.git>格式 =>在密码框输入对应用户的密码 =>点击镜像仓库 保存设置
需要注意的是,镜像仓库需要该用户又读写分支的权限,具体权限可以在分支保护 选项下面设置, 另外gitlab的CE版只能做Push镜像,而EE则支持Push和Pull镜像两种,所以依据仔细需求选择
通过gitlab webhooks + jenkins + git命令同步
webhooks喝Jenkins设置请参考 Gitlab利用Webhook实现Push代码后的jenkins自动构建 其中的shell脚本可自己替换城git命令方式实现
Git如何同步多个远程仓库
新增关联远端库
git remote add gitlab_origin git@gitlab.com:opendvd/dual_push.git
使用使用git remote -v 来查看关联
gitlab_origin git@gitlab.com:opendvd/dual_push.git (fetch)
gitlab_origin git@gitlab.com:opendvd/dual_push.git (push)
origin git@github.com:opendvd/dual_push.git (fetch)
origin git@github.com:opendvd/dual_push.git (push)
push
git add dual_push.txt
git commit -m "First commit."
git push -u origin master
git push -u gitlab_origin master
合并push
上面的方法表明如果要push两个库,需要分别push两次,下面介绍的方法,可以一次性push到两个仓库。 方法:将另一个远程库的URL添加到现有的远程仓库的URL
git add dual_push.txt
git commit -m "First commit."
git remote add origin git@github.com:opendvd/dual_push.git
git remote set-url --add origin git@gitlab.com:opendvd/dual_push.git
git push -u origin master
更多详情请参考 Git如何同步多个远程仓库
其他
我在镜像仓库同步的时候还遇到了Url is blocked: Requests to the local network are not allowed 的错
解决方案:
进入 admin => area
进入 settings =>network
保存设置后,重新进入项目并设置 webhook 保存即可成功
参考
1.实用小帖:利用Gitlab备份代码仓库,以及镜像同步 2. Gitlab利用Webhook实现Push代码后的jenkins自动构建 3. Git如何同步多个远程仓库 4. gitlab - 解决添加webhook提示Url is blocked: Requests to the local network are not allowed的问题.
|