プッシュミラーリング
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
_プッシュミラー_は、アップストリームリポジトリに対して行われたコミットをミラーリングするダウンストリームリポジトリです。プッシュミラーは、アップストリームリポジトリに対して行われたコミットのコピーを受動的に受け取ります。ミラーがアップストリームリポジトリから分岐するのを防ぐために、ダウンストリームミラーにコミットを直接プッシュしないでください。代わりに、コミットをアップストリームリポジトリにプッシュしてください。
プルミラーリングはアップストリームリポジトリから定期的に更新を取得しますが、プッシュミラーは次の場合にのみ変更を受信します。
- コミットがアップストリームのGitLabリポジトリにプッシュされた場合
- 管理者がミラーを強制的に更新した場合
変更をアップストリームリポジトリにプッシュすると、保護ブランチのみをミラーリング設定がオンの場合、プッシュミラーは5分後、または1分後に変更を受信します。
ブランチがデフォルトブランチにマージされ、ソースプロジェクトで削除された場合、次のプッシュ時にリモートミラーから削除されます。マージされていない変更があるブランチは保持されます。ブランチが分岐すると、リポジトリのミラーリングセクションにエラーが表示されます。
GitLab Silent Modeは、リモートミラーへのプッシュおよびリモートミラーからのプルを無効にします。
プッシュミラーの制限
各プロジェクトは、最大10個の有効なプッシュミラーを持つことができます。詳細については、プロジェクトプッシュミラーの最大数を参照してください。
プッシュミラーリングを設定する
既存のプロジェクトにプッシュミラーリングをセットアップするには:
- 上部のバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- リポジトリのミラーリングを展開します。
- リポジトリURLを入力します。
- ミラーの方向ドロップダウンリストで、プッシュを選択します。
- 認証方法を選択します。詳細については、ミラーの認証方法を参照してください。
- 必要に応じて、保護ブランチのみをミラーリングを選択します。
- 必要に応じて、分岐した参照を保持を選択します。
- 設定を保存するには、リポジトリのミラーリングを選択します。
APIを使用してプッシュミラーを構成する
リモートミラーAPIを使用して、プロジェクトのプッシュミラーを作成および変更することもできます。
分岐した参照を保持する
デフォルトでは、リモート(ダウンストリーム)ミラー上の任意のref(ブランチまたはタグ)がローカルリポジトリから分岐した場合、アップストリームリポジトリはリモートの変更を上書きします。
- リポジトリは、
mainおよびdevelopブランチをリモートにミラーリングします。 - リモートミラーの
developに新しいコミットが追加されます。 - 次のプッシュは、アップストリームリポジトリと一致するようにリモートミラーを更新します。
- リモートミラーの
developに追加された新しいコミットは失われます。
分岐したrefsを保持を選択した場合、変更は異なる方法で処理されます。
- リモートミラーの
developブランチへの更新はスキップされます。 - リモートミラーの
developブランチは、アップストリームリポジトリに存在しないコミットを保持します。リモートミラーに存在するが、アップストリームには存在しないrefsはすべてそのまま残されます。 - 更新は失敗としてマークされます。
ミラーを作成した後、分岐した参照を保持するの値は、リモートミラーAPIからのみ変更できます。
GitLabからGitHubへのプッシュミラーを設定する
GitLabからGitHubへコミットをプッシュすると、GitHubはメールアドレスに基づいてコミットの帰属を決定します。コミットのメールアドレスがGitHubユーザーアカウント上の確認済みメールと一致する場合、GitHubはそのユーザーにコミットを割り当てます。そうでない場合、コミットは、コミットメタデータからの名前とメールのみで、帰属なしとして表示されます。
前提条件:
- GitHubのきめ細かなパーソナルアクセストークンで、リポジトリコンテンツの読み取りおよび書き込み権限を持つもの。お使いのリポジトリに
.github/workflowsディレクトリが含まれている場合、ワークフローへの読み取りおよび書き込みアクセスも許可する必要があります。よりきめ細かなアクセスについては、特定のリポジトリにのみ適用されるようにトークンを設定してください。
ミラーを設定するには:
GitリポジトリのURLには、この形式でURLを入力してください:
https://github.com/GROUP/PROJECT.gitGROUP: GitHubのグループ。PROJECT: GitHubのプロジェクト。
ユーザー名には、パーソナルアクセストークンのオーナーのユーザー名を入力します。
パスワードには、GitHubのパーソナルアクセストークンを入力します。
ミラーリポジトリを選択します。
ミラーリングされたリポジトリが一覧表示されます。例:
https://*****:*****@github.com/<your_github_group>/<your_github_project>.gitリポジトリはその後すぐにプッシュされます。プッシュを強制するには、今すぐ更新( )を選択します。
GitLabからAWS CodeCommitへのプッシュミラーを設定する
AWS CodeCommitのプッシュミラーリングは、GitLabリポジトリをAWS CodePipelineに接続するための最良の方法です。GitLabはまだ、ソースコード管理(SCM)プロバイダーの1つとしてサポートされていません。新しいAWS CodePipelineごとに、重要なAWSインフラストラクチャの設定が必要です。また、ブランチごとに個別のパイプラインが必要です。
AWS CodeDeployがCodePipelineの最終ステップである場合は、代わりに次のツールを組み合わせてデプロイを作成できます。
- GitLab CI/CDパイプライン。
.gitlab-ci.ymlの最後のジョブでAWS CLIを使用してCodeDeployにデプロイ。
GitLabからAWS CodeCommitへのミラーを設定するには、次の手順に従います。
AWS IAMコンソールで、IAMユーザーを作成します。
インラインポリシーとして、リポジトリのミラーリングに対する最小権限の権限を次のように追加します。
Amazonリソース名(ARN)には、リージョンとアカウントを明示的に含める必要があります。このIAMポリシーは、2つのサンプルリポジトリへのミラーリングアクセスに権限を付与します。これらの権限はテスト済みで、ミラーリングに必要な最小限(最小権限)の権限になっています。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "MinimumGitLabPushMirroringPermissions", "Effect": "Allow", "Action": [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource": [ "arn:aws:codecommit:us-east-1:111111111111:MyDestinationRepo", "arn:aws:codecommit:us-east-1:111111111111:MyDemo*" ] } ] }ユーザーを作成したら、AWS IAMユーザー名を選択します。
セキュリティ認証情報タブを選択します。
**HTTPS Git認証情報(AWS CodeCommit用)**で、認証情報を生成を選択します。
このGitユーザーIDとパスワードは、CodeCommitとの通信に特化したものです。このユーザーのIAMユーザーIDまたはAWSキーと混同しないでください。
特別なGit HTTPSユーザーIDとパスワードをコピーまたはダウンロードします。
AWS CodeCommitコンソールで、GitLabリポジトリからミラーリングする新しいリポジトリを作成します。
新しいリポジトリを開き、右上隅でコード > Clone HTTPS (**Clone HTTPS (GRC)**ではない) を選択します。
GitLabで、プッシュミラーリングするリポジトリを開きます。
設定 > リポジトリを選択し、リポジトリのミラーリングを展開する。
次の形式を使用し、
<aws-region>をAWSリージョンに、<your_codecommit_repo>をCodeCommit内のリポジトリの名前に置き換えて、GitリポジトリのURLに入力します。https://git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>認証方法に、ユーザー名とパスワードを選択します。
ユーザー名には、AWSの特別なHTTPS GitユーザーIDを入力します。
パスワードには、AWSで以前に作成した特別なIAM GitクローンユーザーIDのパスワードを入力します。
CodeCommitについては保護ブランチのみをミラーリングオプションはそのままにします。(5分ごとから1分ごとに)プッシュの間隔が短くなります。
CodePipelineでは、AWS CI設定が必要な名前付きブランチに個別のパイプラインの設定が必要です。動的な名前のフィーチャーブランチはサポートされていないため、保護ブランチのみをミラーリングを設定しても、CodePipelineのインテグレーションに関して柔軟性の問題は発生しません。また、CodePipelineをビルドする名前付きブランチをすべて保護する必要があります。
ミラーリポジトリを選択します。ミラーリングされたリポジトリが表示されるはずです。
https://*****:*****@git-codecommit.<aws-region>.amazonaws.com/v1/repos/<your_codecommit_repo>
プッシュを強制してミラーリングをテストするには、今すぐ更新(半円の矢印)を選択します。最後に成功した更新に日付が表示される場合、ミラーリングは正しく設定されています。正しく機能していない場合は、赤いerrorタグが表示され、ホバーテキストとしてエラーメッセージが表示されます。
2FAが有効な別のGitLabインスタンスへのプッシュミラーを設定する
- ミラーリング先のGitLabインスタンスで、
write_repositoryスコープを持つパーソナルアクセストークンを作成します。 - ミラーリング元のGitLabインスタンスで、次の手順を実行します。
https://<destination host>/<your_gitlab_group_or_name>/<your_gitlab_project>.gitの形式を使用して、GitリポジトリのURLを入力します。- ユーザー名
oauth2を入力します。 - パスワードを入力します。ミラーリング先のGitLabインスタンスで作成されたGitLabのパーソナルアクセストークンを使用します。
- ミラーリポジトリを選択します。
関連トピック
- リポジトリのミラーリングに関するトラブルシューティング。
- リモートミラーAPI