やりたいことの全体像
GitLabとAWS CodeCommit両方にリポジトリを持ち、GitLabとAWS CodeCommitを連携したい場合があると思います。ただ、ソースとターゲットのブランチ名が異なり、リポジトリミラーリングを利用できない際に、以下の方法でもっと自由に連携できます。
・GitLab の .gitlab-ci.ymlにあるscriptを利用して、連携するブランチを指定します。
実施手順
【AWS側の作業】
①IAMポリシー作成
IAMから以下をコピペしてIAMポリシーを作成します。ポリシー名は「GITLAB_CODECOMMIT_SYNC_POLICY」とします。
<AWS アカウント ID>、<CodeCommit リポジトリ名>はそれぞれ書き換えて設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codecommit:GitPull",
"codecommit:GitPush"
],
"Resource": "arn:aws:codecommit:ap-northeast-1:<AWS アカウント ID>:<CodeCommit リポジトリ名>"
}
]
}
社内GitLab利用して、セキュリティ要件でIPを制限したい場合は以下のポリシーも作成します。ポリシー名は「GITLAB_IPBLOCKING_POLICY」とします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"***.***.***.***/32",
"***.***.***.***/32"
]
}
},
"Resource": "*"
}
]
}
②IAMユーザーの作成
IAMから新しいユーザを作成します。Step①で作成したIAMポリシーをアタッチします。
③AWS CodeCommitの認証情報を作成
Step②で作成したIAMユーザーの「セキュリティ認証情報」タブを選択し、「AWS CodeCommitのHTTPS Git 認証情報」から「認証情報を生成」を押下します。生成された認証情報をローカルに保存します。
【GitLab側の作業】
①CIDI変数追加
GitLab側で、対象のリポジトリを選択して、[設定] > [CI/CD] を開きます。[変数] を展開し、[変数の追加] をクリックします。AWS Codecommitのgit認証情報を以下のように変数として追加します。
・ユーザID
Key: CODE_COMMIT_USER
Value:上記取得したAWS Codecommitのgit認証情報のユーザ名
・パスワード
Key: CODE_COMMIT_PW
Value:上記取得したAWS Codecommitのgit認証情報のパスワード
※パスワードはシークレット情報としてログに出力させたくない場合は「Mask variable」Flagsをチェックしましょう。
②「.gitlab-ci.yml」ファイル作成
新しいプロジェクトを作成して、ルートディレクトリの直下に「.gitlab-ci.yml」ファイルを追加して、以下の内容を記載します。以下はGitLab側のenvブランチからAWS CodeCommit側のmainブランチへPushとします。
stages:
- stage1
- stage2
#必要に応じて修正
stage1-job:
stage: stage1
script:
- echo "Do something in stage1..."
- echo "Stage1 complete."
tags:
- gitlab-runner
#GitLabからAWS Codecommitへの連携
stage2-job:
stage: stage2
#ここのimageはDocker Hubから取得しますが、必要に応じて取得場所を指定することができます。
image: gittools/gitversion
script:
- echo "sync_to_codecommit..."
- git remote -v
- git checkout -b env origin/env
#originをAWS Codecommitのリポジトリに設定します。
#${CODE_COMMIT_USER}と${CODE_COMMIT_PW}はGitLabで設定されたCICD変数を指します。
- git remote set-url origin https://${CODE_COMMIT_USER}:${CODE_COMMIT_PW}@git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/<Codecommitリポジトリ名>
- git remote -v
#ローカル(GitLab)のenvブランチからリモート(AWS Codecommit)のmainへpushします。
- git push -uf origin env:main
rules:
#envへマージする際にstage2-jobブロックを実行します。
- if: '$CI_COMMIT_BRANCH == "env"'
tags:
#使用したいGitlab runnerのtagを指定します。
- gitlab-runner
コメント