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

相关推荐
Aliex_git12 天前
Dockerfile 优化实践笔记
笔记·学习·gitlab
成为你的宁宁13 天前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven
sunshinebo13 天前
一次 GitLab 无法启动的排查:Docker 日志把 500G 磁盘打满
docker·eureka·gitlab
何以不说话13 天前
DevOps、Git 和 GitLab
git·gitlab·devops
ZAEQgyKFs16 天前
永磁同步电机模型预测电流控制+滑模控制 [1]速度环采用滑模控制 滑模控制器采用新型趋近律与扰...
gitlab
马克Markorg16 天前
使用 Docker Compose 本地部署 GitLab 教程
docker·容器·gitlab
大尚来也19 天前
CI/CD 流水线搭建实战:GitHub Actions vs GitLab CI 2026 深度对比与选型指南
ci/cd·gitlab·github
ProgramHan20 天前
github、gitlab、gitee分别都是什么,为什么不能访问?
gitee·gitlab·github
Aliex_git22 天前
Gitlab Runner 配置实践
笔记·学习·ci/cd·gitlab
阿莫西林夹馍22 天前
GitLab的IP地址发生变更导致Runner掉线
gitlab