- セキュリティ
- 利用可能なプロジェクトインポーター
- Subversion からのインポート
- APIを使用したマイグレーション
- 2つの自己管理GitLabインスタンス間のマイグレーション
- プロジェクトのインポート履歴の表示
- LFS 認証
- プロジェクトのエイリアス
- グループとプロジェクトのインポートを自動化
- トラブルシューティング
プロジェクトのインポートとマイグレーション
既存のプロジェクトをGitLabに取り込んだり、GitLabのプロジェクトを別の場所にコピーしたりしたい場合は、以下の方法があります:
- 利用可能なインポーターを使って外部システムからプロジェクトをインポートします。
- GitLab プロジェクトをマイグレーション:
- 2つのGitLabセルフマネージドインスタンス間で。
- セルフマネージドインスタンスとGitLab.comの双方向間。
- 同じGitLabインスタンス内。
ソースとターゲットのタイプを問わず、GitLabプロジェクトをマイグレーションできます:
- 直接転送によるグループのマイグレーションでは、グループ内のすべてのプロジェクトを同時にマイグレーションできます。直接転送によるプロジェクトのマイグレーションはベータ版です。この機能はまだ本番環境では使用できません。
- ファイルエクスポートの使用。この方法では、プロジェクトを 1 つずつマイグレーションできます。インスタンス間のネットワーク接続は必要ありません。
Git リポジトリだけをマイグレーションする必要がある場合は、各プロジェクトを URL でインポートできます。しかし、この方法ではイシューやマージリクエストをインポートすることはできません。イシューやマージリクエストのようなメタデータを保持するには、次のどちらかを行います:
- グループのあるプロジェクトを直接転送してマイグレーションします。この機能はベータ版です。本番環境では使用できません。
- プロジェクトのインポートにはファイルエクスポートを使用してください。
ファイルエクスポートを使ったマイグレーションには制限があります。自己管理から GitLab.com にマイグレーションする場合、ユーザー関連付け(コメント作成者など)はプロジェクトをインポートするユーザーに変更されます。
セキュリティ
信頼できるソースからのみプロジェクトをインポートしてください。信頼できないソースからプロジェクトをインポートすると、攻撃者が機密データを盗む可能性があります。たとえば、悪意のある.gitlab-ci.yml
ファイルを含むインポートされたプロジェクトは、攻撃者にグループ CI/CD 変数を流出させる可能性があります。
GitLabのセルフマネジメント管理者は、不要なインポートソースを無効にすることで、攻撃対象領域を減らすことができます:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 設定] > [全般]を選択します。
- 表示とアクセス制御] を展開します。
- ソースのインポートまでスクロールします。
- 不要なインポートのチェックボックスをオフにします。
利用可能なプロジェクトインポーター
プロジェクトをインポートできます:
- Bitbucket クラウド
- Bitbucket Server (Stashとしても知られています)
- クリアケース
- CVS
- FogBugz
- GitHub.com または GitHub Enterprise
- Gitea
- Perforce
- TFVC
- URLによるリポジトリ
- マニフェストファイルのアップロード(AOSP)
- Jira (イシューのみ)
新規プロジェクトページから HTTP 経由で Git リポジトリをインポートすることもできます。リポジトリが大きすぎる場合、インポートがタイムアウトすることがあります。
その場合は、外部リポジトリに接続して CI/CD のメリットを得ることができます。
Subversion からのインポート
GitLabはSubversionリポジトリを自動的にGitにマイグレーションすることはできません。SubversionのリポジトリをGitに変換するのは難しいかもしれませんが、以下のようなツールがあります:
-
git svn
以下のようなツールがあります。 -
reposurgeon
大規模で複雑なリポジトリ向けです。
APIを使用したマイグレーション
自己管理からGitLab.comに全てのデータをマイグレーションするには、APIを活用することができます。この順番でアセットをマイグレーションします:
一連のDockerプルとプッシュでコンテナレジストリをマイグレーションする必要があります。CIパイプラインを再実行して、ビルドのアーティファクトを取得します。
2つの自己管理GitLabインスタンス間のマイグレーション
既存のセルフマネージド GitLab インスタンスから新しいセルフマネージド GitLab インスタンスにマイグレーションするには、既存のインスタンスをバックアップして新しいインスタンスに復元します。例えば、セルフマネージドインスタンスを古いサーバーから新しいサーバーにマイグレーションするにはこの方法を使います。
作成されるバックアップはGitLabが稼働しているオペレーションシステムに依存しません。そのため、同じGitLabのバージョンがインストール可能であれば、異なるオペレーティングシステムのディストリビューションやバージョン間でリストア方法を切り替えて使用することができます。
管理者はUsers APIを使ってユーザーをマイグレーションすることができます。
プロジェクトのインポート履歴の表示
自分が作成したプロジェクトのインポートをすべて表示することができます。このリストには以下が含まれます:
- プロジェクトが外部システムからインポートされた場合はソースプロジェクトのパス、GitLabプロジェクトがマイグレーションされた場合はインポート方法。
- 移行先プロジェクトのパス。
- 各インポートの開始日。
- 各インポートのステータス。
- エラーが発生した場合は、エラーの詳細。
プロジェクトのインポート履歴を見るには:
- GitLab にサインインします。
- 左サイドバーの上部にある「新規作成({plus})」と「新規プロジェクト/リポジトリ」を選択します。
- プロジェクトのインポートを選択します。
- 右上の「History」を選択します。
- 特定のインポートにエラーがある場合は、Detailsを選択するとエラーが表示されます。
履歴には、ビルトインテンプレートや カスタムテンプレートから作成されたプロジェクトも含まれます。GitLabはテンプレートから新しいプロジェクトを作成するために、URLによるリポジトリのインポートを使います。
LFS 認証
LFS オブジェクトを含むプロジェクトをインポートするとき、プロジェクトの URL ホスト (lfs.url
) がリポジトリの URL ホストと異なる.lfsconfig
ファイルがある場合、LFS ファイルはダウンロードされません。
プロジェクトのエイリアス
GitLab 12.1 で導入されました。
GitLabリポジトリは通常、名前空間とプロジェクト名でアクセスします。しかし、頻繁にアクセスされるリポジトリをGitLabにマイグレーションする場合、プロジェクトのエイリアスを使うことで、オリジナルの名前でリポジトリにアクセスすることができます。プロジェクトエイリアスを使ってリポジトリにアクセスすることで、そのようなリポジトリのマイグレーションに伴うリスクを減らすことができます。
この機能はGit over SSHでのみ利用可能です。また、プロジェクトエイリアスを作成できるのはGitLab管理者のみで、APIを通じてのみ作成できます。詳しくはProject Aliases API documentation をご覧ください。
管理者がプロジェクトのエイリアスを作成したら、そのエイリアスを使用してリポジトリをクローンすることができます。例えば、管理者がプロジェクトhttps://gitlab.com/gitlab-org/gitlab
に対してgitlab
というエイリアスを作成した場合、git clone git@gitlab.com:gitlab-org/gitlab.git
の代わりにgit clone git@gitlab.com:gitlab.git
を使ってプロジェクトをクローンすることができます。
グループとプロジェクトのインポートを自動化
GitLabプロフェッショナルサービスチームは、Congregateを使ってユーザー、グループ、プロジェクトのインポートAPIコールをオーケストレーションしています。Congregateを使えば、GitLabにデータをマイグレーションすることができます:
- 他のGitLabインスタンス
- GitHub Enterprise
- GitHub.com
- Bitbucket Server
- Bitbucketデータセンター
詳細については
- 有料のGitLabマイグレーションサービスに関する情報。
- クイックスタート
- マイグレーションに関するよくある質問。その後の確認が必要な設定やその他の制限事項など。
サポートについては、GitLabプロフェッショナルサービスと有料契約を結ぶ必要があります。
トラブルシューティング
インポートしたリポジトリにブランチがありません。
インポートしたリポジトリにソースリポジトリのすべてのブランチが含まれていない場合:
-
環境変数
IMPORT_DEBUG=true
を設定します。 - 別のグループ、サブグループ、プロジェクト名でインポートを再試行します。
- それでも見つからないブランチがある場合は、
importer.log
(たとえば、jq
) を調べてください。