プッシュミラーリング
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
_プッシュミラー_は、アップストリームリポジトリに対して行われたコミットをミラーリングするダウンストリームリポジトリです。プッシュミラーは、アップストリームリポジトリに対して行われたコミットのコピーを受動的に受け取ります。ミラーがアップストリームリポジトリから分岐するのを防ぐために、ダウンストリームミラーにコミットを直接プッシュしないでください。代わりに、コミットをアップストリームリポジトリにプッシュしてください。
プルミラーリングはアップストリームリポジトリから定期的に更新を取得しますが、プッシュミラーは次の場合にのみ変更を受信します:
- コミットがアップストリームのGitLabリポジトリにプッシュされた場合
- 管理者がミラーを強制的に更新した場合
変更をアップストリームリポジトリにプッシュすると、Only mirror protected branches(保護ブランチのみをミラーリング)設定がオンの場合、プッシュミラーは5分後、または1分後に変更を受信します。
ブランチがデフォルトブランチにマージされ、ソースプロジェクトで削除された場合、次のプッシュ時にリモートミラーから削除されます。マージされていない変更があるブランチは保持されます。ブランチが分岐すると、リポジトリのミラーリングセクションにエラーが表示されます。
GitLab Silent Modeは、リモートミラーへのプッシュおよびリモートミラーからのプルを無効にします。
プッシュミラーリングを設定する
既存のプロジェクトにプッシュミラーリングを設定するには、次の手順に従います:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 設定 > リポジトリを選択します。
- リポジトリのミラーリングを展開します。
- リポジトリURLを入力します。
- ミラーの方向ドロップダウンリストで、プッシュを選択します。
- 認証方法を選択します。詳細については、ミラーの認証方法を参照してください。
- 必要に応じて、Only mirror protected branches(保護ブランチのみをミラーリング)を選択します。
- 必要に応じて、分岐した参照を保持するを選択します。
- 設定を保存するには、ミラーリポジトリを選択します。
APIを使用してプッシュミラーを構成する
リモートミラーAPIを使用して、プロジェクトのプッシュミラーを作成および変更することもできます。
分岐した参照を保持する
デフォルトでは、リモート(ダウンストリーム)ミラー上の任意のref(ブランチまたはタグ)がローカルリポジトリから分岐した場合、アップストリームリポジトリはリモートの変更を上書きします:
- リポジトリは、
mainおよびdevelopブランチをリモートにミラーリングします。 - リモートミラーの
developに新しいコミットが追加されます。 - 次のプッシュは、アップストリームリポジトリと一致するようにリモートミラーを更新します。
- リモートミラーの
developに追加された新しいコミットは失われます。
分岐した参照を保持するを選択した場合、変更は異なる方法で処理されます:
- リモートミラーの
developブランチへの更新はスキップされます。 - リモートミラーの
developブランチは、アップストリームリポジトリに存在しないコミットを保持します。リモートミラーに存在するが、アップストリームには存在しないrefsはすべてそのまま残されます。 - 更新は失敗としてマークされます。
ミラーを作成した後、分岐した参照を保持するの値は、リモートミラーAPIからのみ変更できます。
GitLabからGitHubへのプッシュミラーを設定する
GitLabからGitHubにコミットをプッシュすると、GitHubはメールアドレスに基づいてコミットの属性を決定します。コミットのメールアドレスが、GitHubユーザーアカウントで確認済みのメールと一致する場合、GitHubはそのコミットをそのユーザーに帰属させます。そうでない場合、コミットは属性が付与されず、コミットメタデータからの名前とメールのみが表示されます。
前提要件:
- きめ細かいパーソナルアクセストークンを持つGitHub リポジトリの内容を読み書きする権限。リポジトリに
.github/workflowsディレクトリが含まれている場合は、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イシュー34014が解決されるまで、GitLabからAWS CodeCommitへのプッシュミラーリングはSSH認証を使用できません。
GitLabからAWS CodeCommitへのミラーを設定するには、次の手順に従います:
AWS IAMコンソールで、IAMユーザーを作成します。
inline policy(インラインポリシー)として、リポジトリのミラーリングに対する最小権限の権限を次のように追加します。
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ユーザー名を選択します。
Security credentials(セキュリティ認証情報)タブを選択します。
HTTPS Git credentials for AWS CodeCommit(HTTPS Git認証情報(AWS CodeCommit用))で、Generate credentials(認証情報を生成)を選択します。
このGitユーザーIDとパスワードは、CodeCommitとの通信専用です。このユーザーのIAMユーザーIDまたはAWSキーと混同しないでください。
特別なGit HTTPSユーザーIDとパスワードをコピーまたはダウンロードします。
AWS CodeCommitコンソールで、GitLabリポジトリからミラーリングする新しいリポジトリを作成します。
新しいリポジトリを開き、右上隅でコード > Clone HTTPS(HTTPSのクローン)(Clone HTTPS (GRC)(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のspecial HTTPS Git user ID(特別なHTTPS GitユーザーID)を入力します。
パスワードには、AWSで以前に作成した特別なIAM GitクローンユーザーIDのパスワードを入力します。
CodeCommitについてはOnly mirror protected branches(保護ブランチのみをミラーリング)オプションはそのままにします。(5分ごとから1分ごとに)プッシュの間隔が短くなります。
CodePipelineでは、AWS CI設定が必要な名前付きブランチに個別のパイプラインの設定が必要です。動的な名前のフィーチャーブランチはサポートされていないため、Only mirror protected branches(保護ブランチのみをミラーリング)を設定しても、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