GitLabリポジトリをCodeCommitリポジトリにミラーリングする
こんにちは、望月です。
最近、GitLabを触る機会が多く、いろいろと試しているところです。
GitLabからCodePipelineを利用したい場合、GitLab Runnerを利用し、S3にファイルをアップロードするといった方法があり、弊社ブログでも紹介しています。
今回、やったみた方法はGitLabリポジトリをCodeCommitリポジトリをミラーリングする方法になります。CodeCommitリポジトリにミラーリングできれば、それをソースにし、CodePipelineを走らせることができるかと思います。
こちらの方法はGitLab Runnerを必要としないため、GitLab Runnerを管理するといった手間がなくなります。
やってみた
CodeCommitリポジトリの作成
CodeCommitにミラーリング用のリポジトリを作成します。ここではgitlab-mirroring
という名前でプロジェクトを作成しました。
作成したリポジトリのURLは後で利用します。
$ aws codecommit create-repository --repository-name gitlab-mirroring { "repositoryMetadata": { …… "cloneUrlHttp": "https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/gitlab-mirroring", …… } }
IAMポリシーの作成
CodeCommitリポジトリへのミラーリングに必要な権限のIAMポリシーを作成します。
AWSアカウントID及びリポジトリ名は自分の環境に合わせて、JSONファイルにして保存してください。
{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codecommit:GitPull", "codecommit:GitPush" ], "Resource" : "arn:aws:codecommit:ap-northeast-1:xxxxxxxxxxxx:gitlab-mirroring" } ] }
先程のJSONファイルを指定し、IAMポリシーを作成します。
作成したIAMポリシーのArnは後で利用します。
$ aws iam create-policy --policy-name gitlab-mirroring-policy --policy-document file://gitlab-mirroring-policy.json { "Policy": { "PolicyName": "gitlab-mirroring-policy", …… "Arn": "arn:aws:iam::xxxxxxxxxxxx:policy/gitlab-mirroring-policy", …… } }
IAMユーザの作成
IAMユーザを作成し、先程作成したIAMポリシーを割り当てます。
AWSアカウントIDは自分の環境に合わせてください。
$ aws iam create-user --user-name gitlab-mirroring-user $ aws iam attach-user-policy --user-name gitlab-mirroring-user --policy-arn arn:aws:iam::xxxxxxxxxxxx:policy/gitlab-mirroring-policy $ aws iam create-service-specific-credential --user-name gitlab-mirroring-user --service-name codecommit.amazonaws.com { "ServiceSpecificCredential": { …… "ServiceName": "codecommit.amazonaws.com", "ServiceUserName": "xxxxxxxxxxxx", "ServicePassword": "xxxxxxxxxxxx", …… } }
Git認証情報の作成
GitLabで利用するGit認証情報を作成します。
ServiceUserNameとServicePasswordについては、後で利用します。
$ aws iam create-service-specific-credential --user-name gitlab-mirroring-user --service-name codecommit.amazonaws.com { "ServiceSpecificCredential": { …… "ServiceName": "codecommit.amazonaws.com", "ServiceUserName": "xxxxxxxxxxxx", "ServicePassword": "xxxxxxxxxxxx", …… } }
GitLabプロジェクトの作成
GitLabプロジェクトを作成します。ここではcodecommit-mirroring
という名前でプロジェクトを作成しました。
ファイルはREADME.mdのみ配置しています。
GitLabにてミラーリングの設定
リポジトリのメニューから「Settings」→「Repository」を選択します。
項目から「Mirror a repository」を開きます。
ミラーリングに必要な情報を入力し、「Mirror repository」をクリックします。
- Git repository URL
https://<ServiceUserName>@git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/gitlab-mirroring
- 作成したGit認証情報のServiceUserNameを入力します
- Mirror direction
- Push
- Authentication method
- Password
- 作成したGit認証情報のServicePasswordを入力します
ミラーリングの動作確認
追加した設定から、更新アイコンをクリックし、同期を開始します。
CodeCommitのリポジトリを確認し、ミラーリングが動作していることを確認します。
ミラーリングは手動だけでなく自動でも実行されますがタイミングによっては最大5分ほど更新間隔が空くので注意しましょう。
まとめ
GitLabのリポジトリを手軽にCodeCommitのリポジトリへミラーリングすることができました。
GitLab RunnerでシンプルにS3にソースをアップロードするぐらいであれば、こちらのミラーリングを利用したほうがGitLab Runnerを管理する手間がなく、良さそうな感じでした。
同期に若干時間がかかってしまうため、そこが許容できるようであれば、こちらの方法を検討するのも良いかと思います。