ファイルエクスポートを使用したプロジェクトのマイグレーション

セルフマネージドGitLabインスタンスやGitLab.com上の既存のプロジェクトをファイルにエクスポートし、別のGitLabインスタンスにインポートすることができます。また、直接転送によってグループをマイグレーションすることで、より自動化されたGitLabプロジェクトを別の場所にコピーすることもできます。

ユーザー貢献者の保存

ユーザーの貢献を守るには、以下の要件を満たす必要があります:

GitLabセルフマネージドからGitLab.comへのマイグレーション

ファイルエクスポートを使ってプロジェクトをマイグレーションする場合、ユーザー貢献が正しくマッピングされるためには管理者のアクセストークンが必要です。

そのため、セルフマネージドインスタンスからGitLab.comにファイルエクスポートをインポートしても、ユーザー貢献が正しくマッピングされることはありません。代わりに、全ての GitLab ユーザー関連付け(コメント作成者など)は、プロジェクトをインポートしたユーザーに変更されます。貢献履歴を保持するには、以下のいずれかを行ってください:

GitLabセルフマネージドへのマイグレーション

GitLab がユーザーと貢献者を正しくマッピングするようにするため:

  • プロジェクトのトップレベルグループのオーナーは、プロジェクトにアクセスできるすべてのメンバー(直接および継承された)の情報がエクスポートされたファイルに含まれるように、プロジェクトをエクスポートする必要があります。プロジェクトのメンテナーとオーナーは、プロジェクトのエクスポートを開始できます。ただし、エクスポートされるのは、プロジェクトの直接のメンバーだけです。
  • 管理者は、管理者アクセストークンを使用してインポートを実行する必要があります。
  • インポート先のGitLabインスタンスに必要なユーザーが存在する必要があります。管理者は Rails コンソールで一括して、または UI で一人ずつ確認済みユーザーを作成することができます。
  • ユーザーは、移行元のGitLabインスタンス上のプロフィールで、移行先のGitLabインスタンス上のプライマリEメールアドレスと一致する公開Eメールを設定する必要があります。プロジェクトの Exporter ファイルを編集することで、手動でユーザーの公開メールを追加することもできます。

既存のユーザーのEメールがインポートユーザーのEメールと一致すると、そのユーザーはインポートプロジェクトに直接メンバーとして追加されます。

前述の条件のいずれかが満たされない場合、ユーザーの貢献者は正しくマッピングされません。代わりに、すべての GitLab ユーザーの関連付けは、インポートを実行したユーザーに変更されます。そのユーザーは、他のユーザーが作成したマージリクエストの作成者となります。元の作成者に言及する補足コメントです:

  • コメント、マージリクエストの承認者、リンクされたタスク、アイテムに対して追加されます。
  • マージリクエストまたはイシューの作成者、追加または削除されたラベル、およびマージバイ情報には追加されません。

プロジェクトエクスポートファイルの編集

エクスポートファイルからデータを追加または削除できます。たとえば、次のことができます:

  • 手動でユーザーの公開メールをproject_members.ndjson ファイルに追加します。
  • ci_pipelines.ndjson ファイルから行を削除して CI パイプラインをトリミングします。

プロジェクトエクスポートファイルを編集するには:

  1. エクスポートされた.tar.gz ファイルをエクスポートします。
  2. 適切なファイルを編集します。例えば、tree/project/project_members.ndjson
  3. ファイルを圧縮して.tar.gz ファイルに戻します。

また、project_members.ndjson ファイルをチェックすることで、すべてのメンバーがエクスポートされたことを確認できます。

互換性

GitLab 15.11 で、JSON 形式のプロジェクトファイルのエクスポートをサポートしなくなりました。

プロジェクトファイルのエクスポートは NDJSON フォーマットです。

GitLabのマイナーバージョン2つ前までのバージョンからエクスポートされたプロジェクトファイルのインポートが可能で、これはセキュリティリリースのプロセスに似ています。

使用例:

送信先バージョン対応バージョン
13.013.0, 12.10, 12.9
13.113.1, 13.0, 12.10

インポートソースとしてのファイルエクスポートの設定

セルフマネージド GitLab インスタンスでファイルエクスポートを使ってプロジェクトをマイグレーションする前に、GitLab 管理者は以下を行う必要があります:

  1. 移行元のインスタンスでファイルエクスポートを有効にします。
  2. デスティネーションインスタンスのインポートソースとしてファイルエクスポートを有効にします。GitLab.comでは、ファイルエクスポートはすでにインポートソースとして有効になっています。

デスティネーションインスタンスのインポートソースとしてファイルエクスポートを有効にするには:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 設定] > [全般]を選択します。
  4. 表示とアクセス制御] を展開します。
  5. ソースのインポートまでスクロールします。
  6. GitLabエクスポートチェックボックスを選択します。

CE と EE の間

互換性があれば、Community EditionからEnterprise Editionへプロジェクトをエクスポートできます。

Enterprise EditionからCommunity Editionにプロジェクトをエクスポートする場合、Enterprise Editionでのみ保持されているデータが失われる可能性があります。詳細は、EEからCEへのダウングレードを参照してください。

プロジェクトとそのデータのエクスポート

プロジェクトをインポートする前に、エクスポートする必要があります。

前提条件:

  • エクスポートされる項目のリストをレビューします。すべての項目がエクスポートされるわけではありません。
  • 少なくともプロジェクトのメンテナーのロールを持っている必要があります。

プロジェクトとそのデータをエクスポートするには、以下の手順に従います:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. 設定] > [全般]を選択します。
  3. 詳細設定] を展開します。
  4. プロジェクトのエクスポートを選択します。
  5. エクスポートが生成されると、ファイルをダウンロードするためのリンクが記載されたメールが届きます。
  6. または、プロジェクト設定に戻り、そこからファイルをダウンロードするか、新しいエクスポートを生成することもできます。ファイルが利用可能になると、ページにダウンロード・エクスポート・ボタンが表示されます。

エクスポートは、設定したshared_path、一時的な共有ディレクトリに生成され、設定したuploads_directory に移動します。24時間ごとに、ワーカーがこれらのエクスポートファイルを削除します。

エクスポートされる項目

エクスポートされるプロジェクトアイテムは GitLab のバージョンによって異なります。特定のプロジェクト項目がエクスポートされるかどうかを調べるには、以下のようにします:

  1. exporters の配列 を確認してください。
  2. project/import_export.yml 、GitLabのバージョンに対応したプロジェクトのファイルを確認してください(例えば、GitLab 15.9の場合は<https://gitlab.com/gitlab-org/gitlab/-/blob/15-9-stable-ee/lib/gitlab/import_export/project/import_export.yml> )。

簡単な概要として、エクスポートされる項目は以下の通りです:

  • プロジェクトとWikiリポジトリ
  • プロジェクトのアップロード
  • インテグレーションを除くプロジェクト設定
  • イシュー
    • イシューコメント
    • イシューの反復(GitLab 15.4 で導入)
    • イシューリソースの状態イベント(GitLab 15.4 で導入)
    • リソースのマイルストーンイベントを発行(GitLab 15.4 で導入)
    • リソースのイテレーションイベントの発行(GitLab 15.4 で導入)
  • マージリクエスト
    • マージリクエストの差分
    • マージリクエストコメント
    • マージリクエストリソースの状態イベント(GitLab 15.4 で導入)
    • マージリクエストの複数担当者(GitLab 15.3 で導入)
    • マージリクエストのレビュアー(GitLab 15.3 で導入)
    • マージリクエスト承認者(GitLab 15.3 で導入)
  • コミットコメント(GitLab 15.10 で導入)
  • ラベル
  • マイルストーン
  • スニペット
  • リリース
  • タイムトラッキングとその他のプロジェクトエンティティ
  • 設計管理ファイルとデータ
  • LFSオブジェクト
  • イシューボード
  • CI/CDパイプラインとパイプラインスケジュール
  • 保護されたブランチとタグ
  • プッシュルール
  • 絵文字リアクション
  • ユーザーがエクスポートされたプロジェクトのグループでメンテナーのロールを持っているか、管理者である場合に限り、プロジェクトおよび継承されたグループメンバー

エクスポートされない項目

エクスポートされない項目は以下の通りです:

  • 子どものパイプライン履歴
  • パイプラインのトリガー
  • ビルドトレースとアーティファクト
  • パッケージとコンテナのレジストリイメージ
  • CI/CD 変数
  • Webhook
  • 暗号化されたトークン
  • 必要な承認者数
  • リポジトリのサイズ制限
  • 保護ブランチへのプッシュが許可されるデプロイキー
  • ファイルのセキュリティ
  • Git関連のイベントのアクティビティログ(タグのプッシュや作成など)
  • プロジェクトに関連するセキュリティポリシー
  • イシューとリンクされた項目間のリンク
  • 関連マージリクエストへのリンク

ファイル・エクスポートによるプロジェクトのマイグレーションでは、グループ・レベルおよびインスタンス・レベルでテンプレートからプロ ジェクトを作成するのと同じエクスポートおよびインポートのメカニズムが使用されます。したがって、エクスポートされる項目のリストは同じです。

プロジェクトとそのデータのインポート

GitLab 13.8でデフォルトの最大インポートファイルサイズが50MBから無制限に変更されました。セルフマネージドインスタンスの管理者は最大インポートファイルサイズを設定できます。GitLab.comでは、この値は5GBに設定されています。

プロジェクトとそのデータをインポートすることができます。

caution
信頼できるソースからのみプロジェクトをインポートしてください。信頼できないソースからプロジェクトをインポートすると、攻撃者に機密データを盗まれる可能性があります。

前提条件

GitLab16.0で導入され、GitLab15.11.1とGitLab15.10.5にバックポートされたDeveloperロールの代わりにMaintainerロールの要件。

  • プロジェクトとそのデータをエクスポートしている必要があります。
  • GitLabバージョンを比較し、エクスポートしたGitLabバージョンと同じかそれ以降のGitLabバージョンにインポートしていることを確認してください。
  • 何かイシューがないか、互換性をレビューしてください。
  • マイグレーション先のグループで、少なくともメンテナーのロールが必要です。

プロジェクトのインポート

プロジェクトをインポートします:

  1. 新しいプロジェクトを作成するときに、プロジェクトのインポートを選択します。
  2. Import project fromでGitLabエクスポートを選択します。
  3. プロジェクト名と URL を入力します。エクスポートしたファイルを選択します。
  4. プロジェクトのインポートを選択して、インポートを開始します。まもなく、新しくインポートされたプロジェクトのページが表示されます。

インポートのステータスを取得するには、APIを通じてクエリを実行します。APIドキュメントに記載されているように、クエリはインポートエラーや例外を返すことがあります。

インポートされたアイテムの変更

エクスポートされたアイテムは、以下の変更を加えてインポートされます:

  • オーナー・ロールを持つプロジェクト・メンバーは、メンテナー・ロールでインポートされます。
  • インポートされたプロジェクトにフォークに由来するマージリクエストが含まれている場合、これらのマージリクエストに関連する新しいブランチがプロジェクトに作成されます。そのため、新しいプロジェクトのブランチ数は、ソースプロジェクトよりも多くなる可能性があります。
  • Internal の可視性レベルを制限すると、インポートされたすべてのプロジェクトにPrivate の可視性が与えられます。

デプロイ・キーはインポートされません。デプロイキーを使用するには、インポートしたプロジェクトでデプロイキーを有効にし、保護されたブランチを更新する必要があります。

大規模プロジェクトのインポート

大規模なプロジェクトがある場合は、Rakeタスクの使用を検討してください。

最大インポートファイルサイズの設定

管理者は、2つの方法のいずれかで最大インポートファイルサイズを設定できます:

デフォルトは0 (無制限)です。

レート制限

不正使用を避けるため、デフォルトではユーザーのレートが制限されています:

リクエストタイプリミット
エクスポート毎分6プロジェクト
エクスポートのダウンロード1グループにつき1ダウンロード/分
インポート毎分6プロジェクト