congregate遷移gitlab資料

假面Wilson發表於2024-03-29

專案地址:https://gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate/

congregate 是一款 gitlab 官方推出的資料遷移工具,可以方便的把其他 SCM 系統的專案遷移到 gitlab 例項

image-20220719084615976

本次測試主要是源gitlab例項遷移到目標gitlab例項。

安裝 congregate

docker 安裝

# 拉取映象
docker pull registry.gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate:rolling-debian

docker run \
--name congregate \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/hosts:/etc/hosts \
-p 8000:8000 \
-itd 4bd6a78c0a68 \
/bin/bash
  • 其中 4bd6a78c0a68 為 registry.gitlab.com/gitlab-org/professional-services-automation/tools/migration/congregate:rolling-debian 映象 id,使用命令 docker images 獲得;也可直接使用映象名

配置 congregate

# 首先進入容器
docker exec -it congregate /bin/bash
  • 如無特殊說明,後面的所有命令操作均在此容器中進行

開始配置

./congregate.sh configure
  • 根據提示填寫目標例項與源例項地址以及TOKEN資訊,然後其他設定無特殊情況按預設即可

  • 配置完成後會生成配置檔案 ./data/congregate.conf,可手動修改,

  • 如果執行失敗,手動建立

    mkdir -p data
    vi data/congregate.conf

    配置資訊:

    [DESTINATION]
    dstn_hostname = http://10.10.10.61
    dstn_access_token = QnpyOVh6c3M3VVZCdlVBVHpkcWc=
    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 = http://10.10.10.60
    src_access_token = amRTZnhEWHhDR3M2OGhRemY4NWs=
    src_tier = ultimate
    export_import_timeout = 3600
    
    [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

    驗證配置

    ./congregate.sh validate-config

    拉取源例項資料

./congregate.sh list

完成後會在 ./data/ 目錄下生成資料

  • groups.json:組資料
  • projects.json:專案資料
  • users.json:使用者資料
    ps-user@7f582c3cd44f:/opt/congregate$ ls -l ./data/
    total 48
    -rw-r--r-- 1 ps-user ps-user   705 May 10 01:48 congregate.conf
    -rw-r--r-- 1 ps-user ps-user  6303 May 10 01:49 groups.json
    drwxr-xr-x 1 ps-user ps-user   161 May 10 01:49 logs
    -rw-r--r-- 1 ps-user ps-user 10525 May 10 01:49 projects.json
    drwxr-xr-x 2 ps-user ps-user     6 May  2 19:45 reg_tuples
    drwxr-xr-x 2 ps-user ps-user     6 May  2 19:45 results
    -rw-r--r-- 1 ps-user ps-user     2 May 10 01:49 staged_groups.json
    -rw-r--r-- 1 ps-user ps-user     2 May 10 01:49 staged_projects.json
    -rw-r--r-- 1 ps-user ps-user     2 May 10 01:49 staged_users.json
    -rw-r--r-- 1 ps-user ps-user  8518 May 10 01:49 users.json

    啟動圖形介面,選擇遷移資料

  • ./congregate.sh ui

    訪問地址:http://ip:8000

    直接選擇所有組,然後點選 stage,程式會自動管理相關賬號:

操作完成後,回到容器,使用 ctrl+z 停止 ui 介面,這時候可以看到已經把需要遷移的資料寫入到 ./data/staged_ 開頭的檔案中了:

ps-user@7f582c3cd44f:/opt/congregate$ ls -l ./data/staged*
-rw-r--r-- 1 ps-user ps-user 6838 May 10 01:52 ./data/staged_groups.json
-rw-r--r-- 1 ps-user ps-user 2885 May 10 01:52 ./data/staged_projects.json
-rw-r--r-- 1 ps-user ps-user 6118 May 10 01:55 ./data/staged_users.json

遷移資料

可以使用以下命令一次完成所有組、使用者、專案遷移,

./congregate.sh migrate --commit
  • 加 --commit 才真正遷移,未加此引數時只會 dry-run

注意:官方不建議這樣做,因此這裡我們選擇以下分步方式完成遷移

遷移使用者

./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
  • 如果加上 --stream-groups 使用新版 migrate_group 功能,遷移資料更全

遷移專案

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


遷移時間太長不需要一直守著,透過遷移日誌log/congregate,可以看到最終的結果






相關文章