Gitlab全量迁移

Gitlab全量迁移

一、背景

公司研发使用的Gitlab由于服务器下架需要迁移到新的Gitlab服务器上。Gitlab官方推荐了先备份然后再恢复的方法。个人采用官方的另外一种方法,就写这篇文章给需要的小伙伴参考。

源Gitlab: http://old.mygitlab.com #地址需更换为自己的gitlab地址

目标Gitlab: http://new.mygitlab.com

1.前提条件

(1)Linux主机一台并安装Docker

(2)服务器磁盘需要能够存储源Gitlab的代码,迁移工具会先把代码全部拉到本地,然后再推送到目标Gitlab

① 步骤

  1. root 账号登录Linux服务器,并拉取迁移工具的镜像

    docker pull 镜像

② 依次运行以下命令

复制代码
#获取镜像id
docker images|grep congregate
registry.cn-hangzhou.aliyuncs.com/dockerforkevin/congregate                                  centos-20220312   4bd6a78c0a68   2 months ago   2.3GB
 
#运行容器,并在容器中修改/var/run/docker.sock权限
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/hosts:/etc/hosts \
-p 8000:8000 \
-it 4bd6a78c0a68
/bin/bash
 
#容器内部命令
[ps-user@a4e8ef2730ed congregate]$sudo chmod 666 /var/run/docker.sock
#按Ctrl+D退出容器
 
#再次启动容器
docker start <container-id>

③ 进入容器中添加配置文件

复制代码
#Linux主机
[root@minikube ~]# docker exec -it <container-id> /bin/bash 
#Docker容器中
[ps-user@a4e8ef2730ed congregate]$ mkdir -p data
[ps-user@a4e8ef2730ed congregate]$vi data/congregate.conf 

congregate.conf文件内容

复制代码
[DESTINATION]
dstn_hostname = http://new.mygitlab.com  #目标Gitlab仓库地址
dstn_access_token = ek04Xy1RbzVpVk5IWnFYYVY3enM= #目标Gitlab管理员Token
import_user_id = 4
shared_runners_enabled = True
project_suffix = False
max_import_retries = 3
username_suffix = gd
mirror_username = 
max_asset_expiration_time = 24
 
[SOURCE]
src_type = GitLab
src_hostname = http://old.mygitlab.com #源Gitlab仓库地址
src_access_token = aW9uQ3B2TlhkWVpwRnNQV2h5SC0= #源Gitlab管理员Token
src_tier = core
export_import_timeout = 300 #这个时间很重要,控制导入和导出的超时时间,如果仓库很大,可以把这个时间调长一点,单位是秒
 
[EXPORT]
location = filesystem
filesystem_path = /opt/congregate
 
[USER]
keep_inactive_users = False
reset_pwd = True
force_rand_pwd = False
 
[APP]
export_import_status_check_time = 10
wave_spreadsheet_path = wave
mongo_host = localhost
mongo_port = 27017
ui_port = 8000
processes = 4

④ 获取源仓库的元数据(MetaData)

复制代码
#获取源仓库的元数据
[ps-user@a4e8ef2730ed congregate]$./congregate.sh list

⑤ 通过UI方式创建需要迁移的对象的列表

复制代码
[ps-user@a4e8ef2730ed congregate]$./congregate.sh ui &

浏览器方式访问本地:8000端口,Projects是Git仓库,全选然后点击"Stage"按钮,切换到Groups(项目组),全选然后点击"Stage",切换到Users(用户),全选然后点击"Stage"

所有的按钮点击完成以后,会在data目录下生成3个json文件

复制代码
[ps-user@a4e8ef2730ed congregate]$ ls -ltr data/staged_*.json
-rw-rw-r-- 1 ps-user ps-user  70439 Mar 12 10:19 data/staged_groups.json
-rw-rw-r-- 1 ps-user ps-user 322311 Mar 12 10:19 data/staged_projects.json
-rw-rw-r-- 1 ps-user ps-user  61408 Mar 12 10:19 data/staged_users.json

⑥ 执行迁移

复制代码
#先迁移Gitlab账户
[ps-user@a4e8ef2730ed congregate]$./congregate.sh migrate --skip-group-export --skip-group-import --skip-project-export --skip-project-import --commit
#再迁移Gitlab项目组
[ps-user@a4e8ef2730ed congregate]$./congregate.sh migrate --skip-users --skip-project-export --skip-project-import --commit
#最后迁移Gitlab仓库(也叫项目),这个比较耗时间,视源仓库代码量的多少
[ps-user@a4e8ef2730ed congregate]$./congregate.sh migrate --skip-users --skip-group-export --skip-group-import --commit

参考博客:

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

相关推荐
明月心95220 小时前
git remote add 用法
gitlab
only_Klein1 天前
jenkins流水线报错:Connection reset by peer
ci/cd·kubernetes·gitlab·jenkins·ssl
梁萌2 天前
docker部署gitlab和gitlab runner
docker·eureka·gitlab
johnnyAndCode2 天前
Idea 设置GitLab时使用账密,而不是token的配置方法
gitlab·idea
天外飞雨2 天前
Gitlab使用
gitlab
BUTCHER53 天前
GitLab SSH 密钥配置
运维·ssh·gitlab
明月心9523 天前
GitLab使用
gitlab
明月心9524 天前
gitlab pull requets
gitlab
BUTCHER54 天前
GitLab基本设置
gitlab
张小凡vip4 天前
Kubernetes---gitlab的ci/cd发布基于k8s的项目示例参考
ci/cd·kubernetes·gitlab