【AWS】Spring Bootプロジェクトをjibを使ってDockerイメージを作成しCodePipelineでBeanstalkへデプロイする
CodePipelineの構成
CodeCommitからソースコードを取得しビルド、デプロイを行う。ビルドステージでは以下の2点を行う。
- Dockerイメージを作成とECRへプッシュ
- Beanstalkのデプロイ設定ファイルであるDockerrun.aws.jsonをアーティファクトとして出力
デプロイステージではDockerrun.aws.jsonを使用しBeanstalkへのデプロイを実行する。
AWSアカウントIDはCodeBuildの環境変数から取得している。DockerイメージはECRへプッッシュし、Dockerrun.aws.jsonはアーティファクトとして出力している。
Buildステージの構成
CodeBuildを使用しビルドを行う。
Codebuildで使用するbuildspec.ymlを以下のように作成する。
AWSアカウントIDはCodeBuildの環境変数から読み込むようにしている。
Spring BootプロジェクトのDockerイメージを作成するためにJIBを使用している。
GradleコマンドでDockerイメージを作成しECRへイメージをプッシュする。その後、Dockerrun.aws.json中のAWSアカウントIDをsedコマンドを使用し実際の値に書き換える。
version: 0.2
phases:
install:
runtime-versions:
docker: 18
pre_build:
commands:
- $(aws ecr get-login --no-include-email)
build:
commands:
- ./gradlew test
- ./gradlew jibDockerBuild
- docker images
post_build:
commands:
- docker push $AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/api
- sed -i s/AWS_ACCOUNT_ID/${AWS_ACCOUNT_ID}/ Dockerrun.aws.json
artifacts:
files:
- 'Dockerrun.aws.json'