リポジトリのミラーリング
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
リポジトリを外部ソースとの間でミラーリングできます。ソースとして機能するリポジトリを選択できます。ブランチ、タグ、コミットは自動的に同期されます。
ミラーリングには複数の方法があります:
- プッシュ: GitLabから別の場所にリポジトリをミラーリングします。
- プル: 別の場所からリポジトリをミラーリングします。PremiumプランおよびUltimateプランで利用できます。
- 双方向ミラーリングも利用できますが、競合が発生する可能性があります。
以下の場合にリポジトリをミラーリングします:
- プロジェクトの標準的なバージョンがGitLabに移行された場合。以前のホームでプロジェクトのコピーを提供し続けるには、GitLabリポジトリをプッシュミラーとして設定します。GitLabリポジトリに加えた変更は、古い場所にコピーされます。
- GitLabインスタンスはプライベートだが、一部のプロジェクトをオープンソースにしたい場合。
- GitLabに移行したが、プロジェクトの標準的なバージョンは別の場所にある場合。GitLabリポジトリを他のプロジェクトのプルミラーとして設定します。GitLabリポジトリは、プロジェクトのコミット、タグ、およびブランチのコピーをプルします。それらはGitLabで利用できるようになります。
以下はサポートされていません:
- SCP形式のURL。SCP形式のURLを実装する作業を実行中です。詳細および進捗状況の追跡については、イシュー18993を参照してください。
- 簡易HTTPプロトコルを介したリポジトリのミラーリング。
リポジトリのミラーを作成する
前提要件:
- プロジェクトのメンテナーロール以上を持っている必要があります。
- ミラーが
ssh://で接続する場合は、サーバー上でホストキーが検出可能であるか、キーのローカルコピーを持っている必要があります。
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
リポジトリのミラーリングを展開します。
新規を追加を選択します。
GitリポジトリのURLを入力します。リポジトリは、
http://、https://、ssh://、またはgit://経由でアクセスできる必要があります。ミラーの方向を選択します。詳細については、プルミラーリングおよびプッシュミラーリングを参照してください。
ssh://のURLを入力した場合は、次のいずれかを選択します:- ホストキーを検出: GitLabはサーバーからホストキーをフェッチして、フィンガープリントを表示します。
- ホストキーの手動入力し、SSH host key(SSHホストキー)にホストキーを入力します。
リポジトリをミラーリングする場合、GitLabは接続する前に、保存されたホストキーの少なくとも1つが一致することを確認します。このチェックにより、悪意のあるコードインジェクションやパスワードの盗難からミラーを保護することができます。
- SSH認証でリポジトリのミラーを作成するには、次の例を参照してください。
認証方法を選択します。詳細については、ミラーの認証方法を参照してください。
SSHホストキーで認証する場合は、ホストキーを検証し、正しいことを確認します。
分岐した参照に対する強制プッシュを防ぐには、分岐した参照を保持するを選択します。詳細については、分岐した参照を保持するを参照してください。
オプション。ミラーリングするブランチの数を制限するには、保護ブランチのみミラーを選択するか、特定のブランチをミラーに正規表現を入力します。
ミラーリポジトリを選択します。
例: SSH認証を使用してミラーを作成する
認証方法としてSSH public keyを選択すると、GitLabはGitLabリポジトリの公開キーを生成します。このキーをGitLab以外のサーバーに提供する必要があります。詳細については、SSH公開キーを取得するを参照してください。
SSH認証を使用してリポジトリをミラーリングするには:
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > リポジトリを選択します。
リポジトリのミラーリングを展開します。
新規を追加を選択します。
GitリポジトリのURLを入力します。
ssh://gitlab.com/gitlab-org/gitlab.git形式でURLを指定します。SSH URLは、SCP形式のURL(
git@host:path/to/repo.git)ではなく、ssh://host/path/to/repo.git形式で使用する必要があります。コロン(:)をスラッシュ(/)に置き換え、ssh://プレフィックスを追加します。ミラーの方向を選択します。詳細については、プルミラーリングおよびプッシュミラーリングを参照してください。
ホストキーを検出またはホストキーの手動入力を選択します。
認証方法フィールドで、SSH公開キーを選択します
ユーザー名フィールドに、
gitを追加します。オプション。ミラーユーザーおよびブランチをミラーを設定します。
ミラーリポジトリを選択します。
SSH公開キーをコピーして、GitLab以外のサーバーに提供します。
保護されたブランチのみをミラーリングする
リモートリポジトリとの間で、ミラーリングプロジェクトの保護ブランチのみをミラーリングするように選択できます。プルミラーリングの場合、ミラーリングプロジェクトの保護されていないブランチはミラーリングされず、分岐する可能性があります。
このオプションを使用するには、リポジトリミラーを作成するときにOnly mirror protected branches(保護されたブランチのみミラー)を選択します。
特定のブランチをミラーリングする
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
re2正規表現に一致する名前のブランチのみをミラーリングするには、特定のブランチをミラーフィールドに正規表現を入力します。正規表現に一致しない名前のブランチはミラーリングされません。
ミラーを更新する
ミラーリポジトリが更新されると、すべての新しいブランチ、タグ、およびコミットがプロジェクトのアクティビティーフィードに表示されます。GitLabのリポジトリミラーは自動的に更新されます。手動で更新をトリガーすることもできます:
- GitLab.comでは、最大で5分ごとに1回更新します。
- GitLab Self-Managedインスタンスで、管理者が設定したプルミラーリング間隔の制限に従って更新します。
GitLabサイレントモードは、プッシュとプルの両方の更新を無効にします。
強制的に更新する
ミラーは自動的に更新されるようにスケジュール済みですが、次の場合を除き、強制的に即時更新を実行することができます:
- ミラーが既に更新されている。
- プルミラーリング制限の間隔(秒)が、最後の更新から経過していない。
前提要件:
- プロジェクトのメンテナーロール以上を持っている必要があります。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- リポジトリのミラーリングを展開します。
- ミラーリングされたリポジトリまでスクロールし、更新するミラーを特定します。
- 今すぐ更新( )を選択します。
ミラーの認証方法
ミラーを作成する際は、認証方法を設定する必要があります。GitLabは、以下の認証方法をサポートしています:
- SSH認証。
- ユーザー名とパスワード。
プロジェクトアクセストークンまたはグループアクセストークンの場合は、ユーザー名として空白でない値を、パスワードとしてトークンを使用します。
SSH認証
SSH認証は相互認証です:
- リポジトリへのアクセスが許可されていることをサーバーに証明する必要があります。
- サーバーも、そのサーバーが誰であるかを証明する必要があります。
SSH認証では、認証情報をパスワードまたは公開キーとして提供します。他のリポジトリが存在するサーバーでは、その認証情報をホストキーとして提供します。手動でこのホストキーのフィンガープリントを検証する必要があります。
SSH経由でミラーリングする場合(ssh://URLを使用する)は、以下を使用して認証できます:
- HTTPS経由と同様に、パスワードベースの認証。
- 公開キー認証。これは、特に他のリポジトリがデプロイキーをサポートしている場合に、パスワード認証よりも安全性が高いことが多い方法です。
SSH公開キーを取得する
リポジトリをミラーリングし、認証方法としてSSH公開キーを選択すると、GitLabは公開キーを生成します。GitLab以外のサーバーは、GitLabリポジトリとの信頼性を確立するためにこのキーを必要とします。SSH公開キーをコピーするには、以下の手順を実行します:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- リポジトリのミラーリングを展開します。
- ミラーリングされたリポジトリまでスクロールします。
- 正しいリポジトリを特定し、SSH公開キーをコピー( )を選択します。
- SSH公開キーを他のリポジトリの設定に追加します:
- 他のリポジトリがGitLabでホストされている場合は、SSH公開キーをデプロイキーとして追加します。
- 他のリポジトリが他の場所でホストされている場合は、キーをユーザーの
authorized_keysファイルに追加します。すべてのSSH公開キーをファイルの独自の行に貼り付けて保存します。
キーを変更する必要がある場合はいつでも、ミラーを削除して再度追加して新しいキーを生成できます。ミラーの実行を維持するには、新しいキーで他のリポジトリを更新します。
生成されたキーは、ファイルシステムではなくGitLabデータベースに保存されます。そのため、ミラー用のSSH公開キーの認証は、事前受信フックでは使用できません。
ホストキーを検証する
ホストキーを使用する場合は、フィンガープリントが希望するものと一致することを必ず確認してください。以下のGitLab.comおよびその他のコードホスティングサイトでは、確認用のフィンガープリントを公開しています:
他のプロバイダーではさまざまです。以下の場合は、次のコマンドを使用して安全にキーのフィンガープリントを収集することができます:
- GitLab Self-Managedを実行する場合。
- 他のリポジトリのサーバーにアクセスできる場合。
$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f -
256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA)
256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519)
2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA)古いバージョンのSSHでは、コマンドから-E md5を削除する必要がある場合があります。
関連トピック
- リポジトリのミラーリングに関するトラブルシューティング。
- プルミラーリングの間隔を設定する
- プロジェクトのミラーを無効にする
- シークレットファイルとミラーリング