2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS CodePipelineでgoアプリのDockerイメージをECRに格納する

Last updated at Posted at 2020-01-10

実現したいこと

  1. CodeCommitのリポジトリ(hoge-repo)のmasterブランチの更新をトリガーに
    masterブランチのリソースからDockerイメージを作成しECRの対象リポジトリに格納したい
  2. hoge-repoはgolangのアプリを持っているので,イメージ作成時にアプリのビルドも行う

環境

  • Golang 1.13.5
  • Docker 18
  • AWS 東京リージョン

やったこと

CodeBuild構築

  • プロジェクト名は任意の名前

  • 送信元
    送信元はCodeCommitの対象リポジトリを選択

スクリーンショット 2020-01-10 15.53.22.png

今回はmasterマージをトリガーにするのでリファレンスタイプはブランチ
対象ブランチはmasterを指定

  • 環境
    Build環境は特に制限がなかったのでaws/codebuild/amazonlinux2-x86_64-standard:2.0 を選択
    残りの環境設定はデフォルト

  • Buildspec
    Buildspecファイルを使用するを選択
    buildspec.yamlは後ほど

  • アーティファクト
    今回はDockerイメージのpushまでで,実際にEKSでコンテナの立ち上げまで行わないので
    アーティファクトはなしを選択

  • ログ
    ログの監視も今回は行わない

CodeBuildの権限追加

今回はCodeCommitからソースをダウンロードし,ECRにイメージプッシュするため
CodeBuildのサービスロールに以下ポリシーを付与

AmazonEC2ContainerRegistryFullAccess

buildspec.yml作成

codebuildでデフォルト設定にしたので hoge-repoのルートディレクトリにbuildspec.ymlを配置

hoge-repo
|
|-- buildspec.yml
|-- Makefile
|-- Dockerfile
|-- main.go
...

buildspec.yaml


version: 0.2

phases:
  install:
    runtime-versions:
      docker: 18
    commands:
    # ECRにイメージプッシュするためにログインする
    - $(aws ecr get-login --no-include-email --region ap-northeast-1)

  pre_build:
    commands:
    # go test -v -cover ./...
    - make test

  build:
    commands:
    # go build -v .
    - make build

  post_build:
    commands:
    # docker tag \code-commit-repo-name\:latest \erc-repo-name\:latest
    # docker push \erc-repo-name\:latest
    - make push-image

CodePipeline構築

CodePipelineの新規作成

  • パイプラインの設定
    パイプライン名は任意の値を入力し,残りはデフォルト

  • ソースステージ
    ソースプロバイダにAWS CodeCommitのhoge-repo masterブランチを選択
    検索はAmazon CloudWatch Eventsを選択

  • ビルドステージ
    AWS CodeBuildの先ほど作成したプロジェクトを選択
    今回環境変数は使用しないので残りはそのまま

  • デプロイステージ
    実際にコンテナを立ち上げないのでデプロイステージはスキップする

完成

ここまでの設定でCodeCommitのmasterブランチの更新をトリガーに
GoアプリがビルドされたDockerイメージを作成し,ECRにプッシュする構成ができた.

この後

Pipeline実行する毎に goモジュール(外部ライブラリ)をダウンロードするのはイケてない(5分ぐらいかかる)
一度ダウンロードしたモジュールはキャッシュしておきたい(この後盛大にハマる)
ハマった記事

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?