遷移至 Secure Source Manager

本指南說明如何將 Git 存放區 (包括所有資訊) 從 Google 的 Cloud Source Repositories (CSR) 遷移至 Secure Source Manager (SSM)。這項遷移作業會使用標準的 Git 指令,複製及推送存放區資料。

必要條件

開始遷移前,請先確認符合下列先決條件:

  • 權限:使用者或服務帳戶必須具備下列權限,才能執行遷移作業:
    • source.repos.get,該角色位於來源 CSR 存放區的 roles/source.reader 角色中
    • securesourcemanager.instances.access (適用於「roles/securesourcemanager.instanceAccessor」角色) 和 securesourcemanager.repositories.fetch (適用於「roles/securesourcemanager.repoWriter」角色),適用於目標 SSM 執行個體和存放區。如要建立新存放區,請參閱「建立存放區」。
  • Git 用戶端:您需要安裝 Git 指令列工具的電腦。
  • Google Cloud SDK:如要在使用 HTTPS 時進行驗證,您必須在安裝 Git 工具的電腦上,安裝 395.0.0 以上版本。如果沒有 Google Cloud SDK,您必須使用 SSH 金鑰連線至 CSR 和 SSM。
  • SSM 執行個體:請確認您可以從電腦存取 SSM 執行個體。如果執行個體是使用 Private Service Connect 設定,請參閱「存取私人執行個體」一文,瞭解存取詳細資料。
  • 本機儲存空間:您需要足夠的本機磁碟空間,才能暫時儲存要遷移的存放區副本。

遷移步驟

遷移程序包括將完整存放區從 CSR 複製到本機電腦,然後將副本推送至 SSM 存放區。

判斷 CSR 和 SSM 存放區的存取主體和方法

以使用者主體身分驗證時,您可以使用 HTTP 或 SSH 傳輸方式連線至 CSR;以服務帳戶身分驗證時,則可以使用 HTTP。您可以透過 HTTP 或 SSH 傳輸方式,以使用者或服務帳戶主體的身分,連線至 SSM 並進行驗證。

您不需要在 CSR 和 SSM 中使用相同的傳輸或主體。 決定每個平台要使用的主體和傳輸方式。如要進一步瞭解如何模擬服務帳戶,請參閱「服務帳戶模擬功能」。

確保 CSR 存放區為唯讀

本遷移指南不會使用自動鏡像或同步功能。 因此,請確保在遷移期間或之後,沒有人寫入 CSR 存放區。更新 IAM 權限,確保所有使用者在存放區中都只有 roles/source.reader 角色。或者,您也可以與使用者協調,在遷移期間停止所有提交作業。

建立 Secure Source Manager 存放區

如果管理員已為您建立存放區,則可略過這個步驟。

如要在 SSM 執行個體中建立空白存放區,請按照指南建立新的存放區。請確認下列事項:

  • 如果使用 UI,請勿選取「Initialize Repository」(初始化存放區),因為這樣會建立非空白的存放區。
  • 如果使用 Google Cloud CLI,請勿設定 --gitignores--readme--licenses 旗標,因為這樣會建立非空白的存放區。
  • 如果使用 API,請勿設定 InitialConfiggitignoreslicensereadme 欄位,因為這樣會建立非空白的存放區。

驗證 SSM 存放區設定

檢查 UI 或複製存放區並執行 git show-ref,確認存放區是否為空白。如果存放區為空,輸出內容也會是空值。

請檢查 UI 或使用 API,確認沒有任何有效的分支保護規則。請勿設定任何規則,或停用所有規則,以免遷移作業遭到封鎖。

確認本機和遠端磁碟空間

複製 CSR 存放區前,請先找出其總大小。執行 gcloud source repos describe <var>CSR_REPO_NAME</var>。這項指令會顯示存放區中的位元組總數。如要評估 Linux 系統的可用磁碟空間,請執行 df .,查看目前目錄的可用位元組數。

SSM 預設的儲存空間上限為每個執行個體 100 GB。複製 CSR 存放區前,請先確認存放區是否符合需求。

複製 CSR 存放區

將完整存放區記錄從 CSR 複製到本機電腦。

  1. 前往要暫時儲存存放區的本機目錄。
  2. 複製存放區: sh git clone <var>CSR_REPO_URL</var> --mirror

這個指令會建立裸機複製,並針對將整個存放區內容推送至其他遠端位置進行最佳化。你會發現目錄只包含 configHEAD 等檔案,而不是存放區內容。這是預期行為,因為所有存放區內容都已複製並存在 objects 目錄和其他目錄中,但沒有工作副本。

將 Secure Source Manager 存放區新增為新的遠端存放區

執行下列指令:

git remote add ssm <var>SSM_REPOSITORY_URL</var>

將完整存放區推送至 Secure Source Manager

將所有分支、標記和參照從本機複製項目推送至 SSM 遠端:

git push --mirror ssm

驗證

推送作業完成後,請將 SSM 存放區複製到其他目錄。接著,比較存放區的 CSR 和 SSM 副本:

  • 分支數量:在每個存放區中執行 git branch -r,並確認分支數量相同。在 Linux 或 macOS 系統上,將指令管道傳輸至 wc -l 會計算輸出內容的行數。
  • 標記數量:在每個存放區中執行 git tag,並確認標記數量相同。在 Linux 或 macOS 系統上,將指令透過管道傳送至 wc -l,即可計算輸出內容的行數。
  • HEAD 提交:在每個存放區中執行 git rev-parse HEAD,並確認提交雜湊相等。
  • 提交次數:在每個存放區中執行 git rev-list --all --count,並確認提交次數相同。

清除所用資源

  • 如果您在遷移期間模擬服務帳戶,請執行 gcloud config set account 重設憑證。
  • 如果您停用了分支版本保護規則,請在 SSM 存放區重新啟用分支版本保護規則
  • 從用於遷移的電腦中,移除 CSR 存放區的裸副本。
  • 刪除原始 CSR 存放區。

後續步驟