今回はAWS CodeBuildを使い、Github上のdevelopブランチにpushされたタイミングで、管理されているプロジェクトが自動ビルドされる設定方法について確認していきます。
- Github上のdevelopブランチはSpring Bootアプリケーションを管理
- ビルドツールはMavenを使用
- IAMユーザーはAdministrator権限であること
- CodeBuildはDockerコンテナ上のLinuxベースの環境で動作している
- CodeBuildで作成されたビルドファイルはデフォルトでS3バケットに保存される
- buildspec.ymlとは、CodeBuildでビルド実行時に実行するコマンドを記述したYAML形式のファイルのこと
以下の順で進めていきます。
- S3バケットの作成
- AWS Management ConsoleからGitHubへの接続設定
- AWS CodeBuildのポリシーを作成 + ロールにアタッチ
- buildspec.ymlの作成
- CodeBuildプロジェクトの作成
- リモートブランチにPush後、ビルド実行の確認
S3バケットの作成
AWS Management Consoleにログインして、S3バケットを作成する
【バケットを作成】を選択 → バケットタイプ(汎用) → バケット名(任意) を設定し、後の項目はデフォルトで設定しておきます。必要であれば、適時変更してください
AWS Management ConsoleからGitHubへの接続設定
参考)公式ドキュメントはこちら
CodeBuildを検索し、「設定」→「接続」を選択
「接続を作成」を選択
Githubを選択し、任意の接続名を入力 → 「Githubに接続する」を選択
「新しいアプリをインストールする」を選択
GitHubのページが開きますので
Githubへログインするユーザー名(もしくはメールアドレス)とパスワードを入力
「Authorize AWS Connector for GitHub」を選択し、AWSとGitHubの接続を許可する
認証許可後、再度「新しいアプリをインストールする」を選択
「All repositories」もしくは「Only select repositories」でAWS からGitHubへの接続対象のリポジトリを選び、「Install & Authorize」を選択。今回は特定のリポジトリのみを対象としたいので、「Only select repositories」を選択してます
以下のように接続が利用可能となり、表示されたARNを後ほど使用する
これで自身のAWSアカウントから、GitHubへの接続認証が確立しました。
AWS CodeBuildのポリシーを作成 + ロールにアタッチ
参考)公式ドキュメントはこちら
IAMの「ポリシーの作成」を選択
ポリシーエディタの編集
①CodeBuildが他のAWSサービスとやり取りするポリシーの作成
②CodeBuildがGithubとの接続を許可するポリシーの作成
①と②を合わせた以下のJSONポリシーを設定する
なお<connection-arn>の値は先ほどのManagement ConsoleとGitHub接続で生成されたARNの値を使用する
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudWatchLogsPolicy",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Sid": "CodeCommitPolicy",
"Effect": "Allow",
"Action": [
"codecommit:GitPull"
],
"Resource": "*"
},
{
"Sid": "S3GetObjectPolicy",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "*"
},
{
"Sid": "S3PutObjectPolicy",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "*"
},
{
"Sid": "ECRPullPolicy",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
],
"Resource": "*"
},
{
"Sid": "ECRAuthPolicy",
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken"
],
"Resource": "*"
},
{
"Sid": "S3BucketIdentity",
"Effect": "Allow",
"Action": [
"s3:GetBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"codeconnections:GetConnectionToken",
"codeconnections:GetConnection"
],
"Resource": [
"<connection-arn>"
]
}
]
}
画面下部の「次へ」ボタンを押し、任意のポリシー名を入力し、「ポリシーの作成」を押下
作成したポリシーをロールにアタッチする
IAMの「ロールを作成」を選択
「信頼されたエンティティタイプ」は「AWSのサービス」を選択し
「ユースケース」は「CodeBuild」を選択し、「次へ」
「許可ポリシー」で先ほど作成したポリシーを選択し、「次へ」
任意のロール名(今回はCodeBuildServiceRolePolicy)を入力し、画面下部の「ロールの作成」を押下でCodeBuildのロールが作成される※またこの後でCodeBuildからCodeDeployへのポリシーの許可を行う必要があるので、先ほど作成したロールに「AWSCodeDeployDeployerAccess」ポリシーを追加でアタッチしておく
buildspec.ymlの作成
参考)公式ドキュメントはこちら
・buildspec.ymlはCodeBuildでのビルドプロセスの手順を明記するファイル
・CodeBuild実行時のデフォルトのディレクトリ位置は、作業ディレクトリとなる
例)/codebuild/output/src12345678/src/
GitHubのルートリポジトリ配下に、buildspec.ymlファイルを作成しておく
今回のbuildspec.ymlは以下のように設定
version: 0.2
phases:
install:
on-failure: ABORT
runtime-versions:
java: corretto17
pre_build:
on-failure: ABORT
commands:
- echo "Pre-build phase started"
- java --version
- mvn -version
build:
on-failure: ABORT
commands:
- echo "Build phase start"
- mvn clean package
post_build:
on-failure: ABORT
commands:
- echo "Post-build phase started"
- pwd
- ls -la
- ls -la target/
artifacts:
files:
- target/QRcode_Demo.war
- appspec.yml
discard-paths: yes
cache:
paths:
- '/home/ec2-user/.m2/**/*'
reports:
junit:
files:
- 'target/surefire-reports/*.xml'
file-format: JUNITXML
env:
shell: bash
buildオプションのmvn clean packageコマンドで対象のプロジェクトがビルドされる
そのビルドされたファイルはCodeBuildの作業ディレクトリ直下に配置される
例)/codebuild/output/src12345678/src/target/QRcode_Demo.war
buildspec.ymlの記述について
artifacts:
files:
- target/QRcode_Demo.war
- appspec.yml
上記はCodeBuildの作業ディレクトリ内の直下に作成されたQRcode_Demo.warとappspec.ymlをS3バケットにアップロードするという意味
reports:
junit:
files:
- 'target/surefire-reports/*.xml'
file-format: JUNITXML
上記はビルド結果をAWS Management Console の CodeBuild上のレポートで確認することができる
ここまでで、事前準備が完了
CodeBuildプロジェクトの作成
参考)公式ドキュメントはこちら
「CodeBuild」と検索し、「プロジェクトの作成」を選択
以下の画像でプロジェクトの設定を確認していきます
リモートブランチにPush後、ビルド実行の確認
リモートブランチ(develop)にPushを行い、CodeBuildの画面で以下が表示されれば、ビルド成功
またビルドログも確認できるので、もしエラーが発生していたらこちらを確認する
また今回はビルドファイルをZip形式でS3に保存されているので、AWS Management Consoleからはファイル名は確認できないっぽいですが、ダウンロードなどすると想定通りのファイルが作成されているはずです。
ちなみに、デフォルトでCodeBuildにはMaven 3.9.5がインストールされていました
今回は以上となります。
次は、S3に保存されたファイルをEC2に自動デプロイするAWS CodeDeployの設定について確認していきます。気になる方はこちら
コメント