LoginSignup
2
1

More than 3 years have passed since last update.

AWS CI/CD勉強メモ②:CodeBuildでDockerイメージをビルド

Last updated at Posted at 2020-04-12

やること

Cloud9でデータを用意して
CodeCommitのリポジトリにpushして
CodeBuildのビルドプロジェクトでビルドしてDockerイメージを作成して
ECR(Amazon Elastic Container Registry)のリポジトリにDockerイメージをpushする。
動作確認は、Cloud9でDockerコンテナを実行する

構成

今回つくる構成

図1.png

参考

line.png

では、やっていく

1.ECRの作成

ECR リポジトリを作成します。

1.png

リポジトリmultistage-ecrを作成する

image.png

2.CodeCommitの作成

CodeCommit リポジトリを作成する

2.png

リポジトリmultistage-ecrを作成する

101.png

3.ビルド用リソースの作成

githubからサンプルを取得し、
Cloud9上でデータを更新し、
CodeCommitリポジトリにpushする

3.png

Cloud9を作る(作り方は省略)

ここからサンプル取得

Cloud9-Terminal
$ https://github.com/cloudfish7/multi-stage-build-for-codebuild.git

CodeCommitリポジトリをクローン

Cloud9-Terminal
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/multistage-test
$ cp ../multi-stage-build-for-codebuild/* ./ -r

ファイル構造

Cloud9-Terminal
$ pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'
/home/ec2-user/environment/multistage-test
|--buildspec.yml
|--Dockerfile
|--pom.xml
|--src
|  |--buildspec.yml
|  |--Dockerfile
|  |--hoge
|  |  |--Main.java
|  |--pom.xml

取得したサンプルデータの buildspec.yml を編集

  • 更新箇所
    • {REPO_NAME}, {tag}, {account_id} を実際の値に更新する
    • 1行目を version: 0.1 -> version: 0.2 にする
buildspec.yml
version: 0.1

phases:
  pre_build:
    commands:
      - $(aws ecr get-login --region ap-northeast-1 --no-include-email)
  build:
    commands:
      - docker build -t {REPO_NAME}:{tag} .
      - docker tag {REPO_NAME}:{tag} {account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/{REPO_NAME}:{tag}
      - docker push {account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/{REPO_NAME}:{tag}
  post_build:
    commands:

codecommit のリポジトリにpushする

Cloud9-Terminal
$ git add .
$ git commit -m "update"
$ git push origin master

4.CodeBuildの作成

ビルドプロジェクト multistage-build を作成し、実行する
→ ECR リポジトリにDockerイメージが格納される

4.png

4-1.ビルドプロジェクト作成

100.png

項目 備考
プロジェクト名 multistage-build
ソースプロパイダ AWS CodeCommit
リポジトリ multistage-test
リファレンスタイプ ブランチ
ブランチ master
環境イメージ マネージド型イメージ
オペレーティングシステム Ubuntu
ランタイム Standard
イメージ aws/codebuild/standard:4.0
環境タイプ Linux
サービスロール 新しいサービスロール
ロール名 codebuild-nultistage-build-service-role 自動作成
ビルド仕様 buildspecファイルを使用する

4-2.ECRアクセス権を追加

IAMロールにECRアクセスのポリシー追加
AmazonEC2ContainerRegistryPowerUse を追加

image.png

4-3.ビルド実行

CodeBuildを実行
成功すると、ECRにイメージがプッシュされてる

ここまでできれば一応成功

CodeBuildビルドプロジェクト

動作確認

ビルドしたDockerイメージをCloud9上に持ってきて、Dockerコンテナ実行できることを確認する

動作確認

Dockerコンテナを実行

Cloud9-Terminal
$ aws ecr get-login --no-include-email --region ap-northeast-1
# -> 出力された長いコマンドをコピーして実行 -> Login Succeeded とでれば成功

ECR リポジトリからDockerイメージ取得

Cloud9-Terminal
$ docker pull xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr:latest

Dockerイメージがある

Cloud9-Terminal
$ docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             SIZE
xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr   latest              5bf8c20529d6        14 minutes ago      81.4MB
Cloud9-Terminal
$ docker run xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr:latest
# Dockerコンテナ実行できたか確認
$ docker ps -ls
CONTAINER ID        IMAGE                                                                     COMMAND             CREATED             STATUS                      PORTS               NAMES               SIZE
c53e6c6ef9e6        xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr:latest   "/bin/sh"           11 seconds ago      Exited (0) 11 seconds ago                       hopeful_mendel      0B (virtual 81.4MB)
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1