gitlab数据迁移-同步两个gitlab之间的项目

前提:

公司两个部门使用了两个不通的gitlab,公司目前需要统一项目管理,把项目同步到同一个gitlab里面。

前提

同步gitlab版本:

参考:Gitlab之间数据迁移的5种方式_gitlab迁移-CSDN博客 五种方式

因为版本不同采用官方[Congregate]工具

Files · master · GitLab.org / Professional Services Automation / Tools / Migration / Congregate · GitLab

https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/-/blob/master/docs/using-congregate.md#quick-start

先备份源gitlab和目标gitlab的原始数据,命令:

sudo gitlab-rake gitlab:backup:create

得到 /var/opt/gitlab/backups/xxxxxxx_gitlab_backup.tar的备份包
备份包中包含了 gitlab仓库、数据库、用户、用户组、用户密钥、权限等信息。

迁移步骤

 拉取最新迁移工具的镜像

docker pull registry.gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate:rolling-centos

获取镜像id

docker images

运行容器

docker run \
-v /run/docker.sock:/run/docker.sock \   #  可以提前修改docker.sock的权限,修改为666
-v /etc/hosts:/etc/hosts \   #  引用DNS相关信息
-p 8000:8000 \  #  映射相关端口,为了可以访问ui界面,防火墙记得关闭
-it xxxxxx \  # 这个为image id
/bin/bash 

进入容器

docker exec -it congregate   /bin/bash

修改data/congregate.conf文件内的内容

创建data/congregate.conf写入以下内容

[DESTINATION]
dstn_hostname = http://39.174.90.190:7017
dstn_access_token = xxxxx
import_user_id = 1
shared_runners_enabled = False
project_suffix = False
max_import_retries = 3
username_suffix = migrated
mirror_username =
max_asset_expiration_time = 24

[SOURCE]
src_type = gitlab
src_hostname = https://gitlab.hzcens.com/
src_access_token = xxxxx
src_tier = ultimate
export_import_timeout = 36000   #到处项目数据的超时时间

[EXPORT]
location = filesystem
filesystem_path = /opt/congregate

[USER]
keep_inactive_users = True
reset_pwd = False
force_rand_pwd = True

[APP]
export_import_status_check_time = 10
mongo_host = localhost
mongo_port = 27017
ui_port = 8000
processes = 4
ssl_verify = True

gitlab上的token不能直接写入到配置文件中,需要进行聚合混析,具体命令如下
./congregate.sh obfuscate

具体实现方法是执行该命令后,将gitlab的token输入,会输入一个新的token,将新的token输入即可。

Token获取方式,管理员登陆后创建,创建后只会显示一次。要及时保存下来。

获取源仓库的数据

 ./congregate.sh  list

通过UI的方式去确定你想要迁移的对象

注意关闭防火墙

 ./congregate.sh  ui &

 ip+端口访问会显示以上界面,如果需要全部备份可以全选点击stage按钮,会在容器中的data/目录下生成三个文件,分别是staged_groups.json,staged_projects.json,staged_users.json

最后执行迁移

首先先迁移用户

./congregate.sh migrate --skip-group-export --skip-group-import --skip-project-export --skip-project-import --commit

其次是组,迁移组后不会有人员数据,导入项目后才会加上

./congregate.sh migrate --skip-users --skip-project-export --skip-project-import --commit

最后是项目

./congregate.sh migrate --skip-users --skip-group-export --skip-group-import --commit

### 如何从一个GitLab仓库迁移代码到另一个GitLab仓库 #### 创建目标仓库 在新的GitLab实例中创建一个新的空项目`myNewOrigin`,该操作可以通过GitLab的Web界面完成。确保记录下新仓库的HTTPS或SSH URL[^3]。 #### 备份源仓库数据 为了防止任何潜在的数据丢失,在执行实际迁移之前应当对原始仓库进行全面备份。这不仅限于版本控制下的文件,还应考虑Wiki页面、议题(Issues)以及管道配置等内容。对于整体环境的转移,可以利用GitLab自带工具来进行整个实例级别的导出[^1]。 #### 配置本地克隆环境 使用命令行客户端连接至原仓库,并将其完整拉取下来: ```bash git clone --mirror https://oldserver.com/myOrigin.git cd myOrigin.git ``` 上述指令会下载所有的分支、标签和其他引用对象而不仅仅是默认分支的内容[^2]。 #### 更新远程URL指向 修改已有的远端链接使之对应向新建的目标库提交更改: ```bash git remote set-url origin https://newserver.com/myNewOrigin.git ``` 通过这条语句实现了无需再次clone即可直接推送到目的位置的效果。 #### 推送所有内容至上游仓库 现在可以把镜像副本里的全部历史记录同步给接收方: ```bash git push --all git push --tags ``` 这两条命令分别负责传输各个特性线程及其关联的时间戳标记等元信息。 #### 后续处理工作 成功上传完毕之后,应该及时通知相关人员有关路径变更的消息;另外还需审查一遍权限设定是否恰当,比如访问级别、保护分支策略等方面是否有遗漏之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值