天天看點

自建Gitlab遷移工具使用指南

自建Gitlab遷移工具指南,遷移工具對自建 Gitlab 服務的資料搬站提供了支援,可以友善地将 Gitlab 的 Git 代碼資料、使用者權限關系和已開啟的合并請求資料進行批量遷移,大幅降低企業遷移成本。

說明 

遷移工具包于 2022 年 04 月 13 日 進行更新,新增自建 Gitlab 人員權限關系和已開啟的合并請求遷移能力,建議該日期前下載下傳工具的使用者更新最新版本使用。

注意 

建議導入庫位址使用 HTTP 協定,後續将基于 HTTP 協定支援倉庫同步能力。

工具使用方法

簡單三步,完成代碼庫批量遷移: 

  • 步驟一.下載下傳遷移工具;
  • 步驟二.通過指令自動生成阿裡雲RAM子賬号,作為遷移使用者映射關系的配置檔案;
  • 步驟三.通過指令自動生成期望導入的代碼庫清單,作為遷移庫範圍的配置檔案;
  • 步驟四.執行遷移指令,工具将依據步驟二、三生成的配置檔案将自建 Gitlab 資料遷移至 Codeup 指定企業;

一、工具準備

下載下傳遷移工具,其原理是根據你在自建的 Gitlab 服務裡的權限,自動生成相關配置檔案,并可以按需調整配置檔案内容後,再依據配置檔案規則将 Gitlab 資料遷移至 Codeup 企業中。

下載下傳工具

macOS ARM 64位 ​​下載下傳位址​​

macOS 64位 ​​下載下傳位址​​

Linux 64位 ​​下載下傳位址​​

Windows 64位 ​​下載下傳位址​​

安裝工具

Windows環境可以跳過安裝,直接使用,但需要保證在指令行執行的目錄下有已下載下傳的遷移工具。

Linux和macOS,需要将下載下傳得到的檔案放在 /usr/local/bin/ 目錄下:

mv codeup /usr/local/bin/      

自建Gitlab遷移工具使用指南
自建Gitlab遷移工具使用指南
測試工具

在指令行中執行,執行成功會顯示工具的幫助資訊:

codeup -h      
自建Gitlab遷移工具使用指南
自建Gitlab遷移工具使用指南

在 macOS 可能會提示 macOS 無法打開工具,因為無法驗證開發者,請通過“系統偏好設定”-“安全性與隐私”-“通用”頁面,選擇“仍然允許”,來授權 macOS 使用工具

自建Gitlab遷移工具使用指南

二、遷移計劃和準備工作

現在,你有一個自建的 Gitlab 服務,上面有若幹個使用者,以及若幹代碼庫和已經設定好的代碼庫成員權限、保護分支規則,正在進行中的合并請求等資料。

本工具可以幫助你進行如下資料的遷移:

  • 代碼庫 Git 資料
  • 代碼庫的基本設定:僅包括庫的描述資訊、庫的預設分支設定
  • 代碼庫的保護分支規則:僅包括分支名、允許推送角色、允許合并角色
  • 代碼庫的成員資訊:根據提供的使用者映射配置檔案,将 Gitlab 使用者映射到 Codeup 的庫使用者,并将使用者添加到 Codeup 的對應代碼庫成員中,轉變為 Codeup 的庫角色時有如下映射原則:
Gitlab 庫角色 Codeup 庫角色
Owner/Mantainer 庫管理者
Developer 庫開發者
Repertor/Guest 庫浏覽者
  • 代碼庫中正在進行中的合并請求(已開啟的合并請求):會在 Codeup 中以遷移操作人的身份建立同名的合并請求,并将能識别到映射關系的評審者進行遷移。不會保留已有的評論、動态和建立人等資訊。

其中,代碼庫成員資料和合并請求資料的遷移是可選的,你可以選擇遷移或者不遷移。

假設你已經下載下傳安裝好工具,并測試工具正常可運作,已明确遷移的内容:要遷移上述支援的所有資料。我們推薦你遵照下面的遷移計劃:

  1. 在正式遷移生産庫前,建議使用非正式庫進行試遷移,保障配置正确後正式遷移;
  2. 在遷移操作時建議控制自建 Gitlab 的庫變更和寫入行為,一旦倉庫遷移成功後,重複遷移不會重新整理變更的代碼資料,即遷移後 Gitlab 的新增内容不會更新至 Codeup;
說明 準備工作:
  1. 一個阿裡雲的主賬号(同時需要作為雲效目标企業的擁有者),以及擷取主賬号的AK 、SK , 假設是 '$aliyunAk', '$aliyunSk'
  2. 目标期望遷移到的 Codeup 企業ID, 假設是 '$orgId'(可在雲效企業管理背景檢視)
  3. 阿裡雲主賬号在 Codeup 的個人通路令牌,要勾選授予權限 write:repo ,假設令牌是’$codeupToken‘
  4. 你的 Gitlab 服務位址,假設是 http://mygitlab.com
  5. 你的Gitlab管理者賬号的 AccessToken(需要授予 read_user, read_api , read_repository 權限),假設為 '$gitlabToken'
以上假設值在下面的工具執行中會用到,請在實際遷移過程中使用你真實的配置資訊替換。

三、遷移過程

3.1 遷移 Gitlab 使用者權限【可選】

Gitlab 和 Codeup 使用者關系存在以下兩種情況:

  1. Gitlab 使用者已經在 Codeup 上手動自己建立了一個使用者(可能同名或不同名)
  2. Gitlab 使用者在 Codeup 上沒有對應的使用者

首先要明确的是 Gitlab 的使用者資料和 Codeup 上的使用者資料是獨立不相關的,對于 Codeup 來說需要你提供映射關系表。

即使你知道 Codeup 上有個叫張三的使用者,在 Gitlab 有一個 zhangsan 的使用者,兩個使用者其實是同一個人,那麼也是需要告訴工具,兩個賬号的關聯關系。這樣就需要一個使用者的映射配置檔案,遷移工具會根據這個使用者映射檔案,将 Gitlab 使用者權限關系資料遷移到 Codeup 對應代碼庫内。

接下來的操作,将會幫助你批量完成 Gitlab 使用者在 Codeup 上同名使用者的建立和關聯。

# 假設已經CD到工具所在的目錄下,執行下面的指令

codeup repo generateUserMap --host=http://mygitlab.com --access_token=$gitlabToken --access_key=$aliyunAk --secret_key=$aliyunSk

...
#指令執行成功後,在你指定AK\SK的阿裡雲主賬号下,會批量建立出與Gitlab使用者同名的阿裡雲Ram子賬号,并會在目前目錄生成一個user-map.csv的檔案      
自建Gitlab遷移工具使用指南
自建Gitlab遷移工具使用指南

打開user-map.csv,其内容的格式是每一行都是 [Gitlab的使用者名],[Codeup使用者的阿裡雲ID],形如:

zhangsan,11232342143245234
lisi,1231312312311      
自建Gitlab遷移工具使用指南
自建Gitlab遷移工具使用指南

你可以手動編輯這個檔案,增加或删除使用者映射的配置(例如部分使用者不希望使用自動生成的賬号,可以手動将映射關系改為指定的阿裡雲賬号)。

說明 

阿裡雲賬号 ID 擷取方式:在 ​​https://www.aliyun.com​​ 首頁右上角點選頭像-賬号ID

自建Gitlab遷移工具使用指南

此時,你可以發現阿裡雲主賬号下對應 Gitlab 中的使用者名依次建立出了RAM子賬号,現在,需要在雲效目标企業中,同步這些子賬号成員。

使用目前阿裡雲主賬号,進入雲效企業成員管理,點選右上角添加成員,選擇邀請企業成員:

自建Gitlab遷移工具使用指南

全選或勾選期望同步的RAM賬号,添加至雲效企業中:

自建Gitlab遷移工具使用指南

至此,你已經完成了Gitlab使用者到Codeup使用者的建立和映射關系,得到了一個user-map.csv的檔案,并将新建立的RAM使用者導入至雲效的目标企業中了。

3.2 定義遷移的代碼庫範圍

你需要告知遷移工具要遷移的代碼庫清單範圍,這也需要一個配置檔案。

可以通過下面操作,自動分析出在Gitlab中的所有代碼庫并生成這個遷移庫範圍的配置檔案。

codeup repo generate --platform=gitlab --access_token=$gitlabToken --host=http://mygitlab.com

...
# 指令執行完成後會在目前目錄下生成一個 repo_list_config.csv 的配置檔案      
自建Gitlab遷移工具使用指南
自建Gitlab遷移工具使用指南

打開repo_list_config.csv,其内容格式是每一行都是[庫克隆位址],[Codeup代碼庫路徑],[Codeup代碼庫可見性],形如

#庫克隆位址,Codeup代碼庫路徑,Codeup代碼庫可見性
http://mygitlab.com/xxxxx/stable.git,xxxxx/stable,10      
自建Gitlab遷移工具使用指南
自建Gitlab遷移工具使用指南

你可以手動編輯這個檔案,增加或删除期望遷移的代碼庫範圍。

至此,你已經明确了遷移的代碼庫範圍,得到了一個 repo_list_config.csv 的檔案。

3.3 基于以上配置檔案批量遷移 Gitlab 資料到 Codeup

# 通過ls檢視目前的目錄的檔案(windons的話是dir指令),确認下有以上兩個配置檔案
ls

repo_list_config.csv
user-map.csv

# 執行下面指令開始遷移
codeup repo importGitlab --repo_list_path=repo_list_config.csv --organization=$orgId --access_key=$aliyunAk --secret_key=$aliyunSk --personal_access_token=$codeupToken --import_member=true --user_map_path=user-map.csv --import_merge_request=true --push_protocol=http


...

# 遷移過程中會展示遷移的細節,如果有問題會顯示報錯資訊      
自建Gitlab遷移工具使用指南
自建Gitlab遷移工具使用指南

工具執行完後,如果一切正常,你便可以在Codeup上檢視遷移過來的代碼庫、庫設定、使用者成員和合并請求等資訊,以确認遷移無誤。

說明 :

如果不希望遷移人員權限、合并請求資料,可以将以上指令中的對應字段置為false:

--import_member=false

--import_merge_request=false