前提:
公司两个部门使用了两个不通的gitlab,公司目前需要统一项目管理,把项目同步到同一个gitlab里面。
前提
同步gitlab版本:
参考:Gitlab之间数据迁移的5种方式_gitlab迁移-CSDN博客 五种方式
因为版本不同采用官方[Congregate]工具:
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