AWS CodePipelineでgoアプリのDockerイメージをECRに格納する
実現したいこと
- CodeCommitのリポジトリ(hoge-repo)のmasterブランチの更新をトリガーに
masterブランチのリソースからDockerイメージを作成しECRの対象リポジトリに格納したい - hoge-repoはgolangのアプリを持っているので,イメージ作成時にアプリのビルドも行う
環境
- Golang 1.13.5
- Docker 18
- AWS 東京リージョン
やったこと
CodeBuild構築
プロジェクト名は任意の名前
送信元
送信元はCodeCommitの対象リポジトリを選択
今回はmasterマージをトリガーにするのでリファレンスタイプはブランチ
対象ブランチはmasterを指定
環境
Build環境は特に制限がなかったのでaws/codebuild/amazonlinux2-x86_64-standard:2.0
を選択
残りの環境設定はデフォルトBuildspec
Buildspecファイルを使用するを選択
buildspec.yamlは後ほどアーティファクト
今回はDockerイメージのpushまでで,実際にEKSでコンテナの立ち上げまで行わないので
アーティファクトはなしを選択ログ
ログの監視も今回は行わない
CodeBuildの権限追加
今回はCodeCommitからソースをダウンロードし,ECRにイメージプッシュするため
CodeBuildのサービスロールに以下ポリシーを付与
AWSCodeCommitReadOnlyAccess
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分ぐらいかかる)
一度ダウンロードしたモジュールはキャッシュしておきたい(この後盛大にハマる)
ハマった記事
Author And Source
この問題について(AWS CodePipelineでgoアプリのDockerイメージをECRに格納する), 我々は、より多くの情報をここで見つけました https://qiita.com/Static_Novice/items/39362f445be66474b596著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .