目次
とある日
先日TerrafromでAWS CodeBuild
を使ってECR
にDocker image をビルドしました。
いろいろな記事を見ながらいい感じでやったのでCodeBuild
についてあまり知らないままやったのでドキュメントを見ながらできることなどを調べた内容を記録します。
AWS CodeBuild
継続的スケーリングによるコードのビルドとテスト費用は構築する回数分のみ
AWS CodeBuild はクラウドで動作する、完全マネージド型のビルドサービスです。CodeBuild はソースコードをコンパイルし、単体テストを実行して、すぐにデプロイできるアーティファクトを生成します。CodeBuild では自分のビルドサーバーをプロビジョニング、管理、スケールする必要がありません。Apache Maven、Gradle などの一般的なプログラミング言語とビルドツール用のパッケージ済みのビルド環境を提供します。ビルド環境をカスタマイズして、CodeBuild で独自のビルドツールを使用することもできます。CodeBuild はピーク時のビルドリクエストに合わせて自動的にスケーリングします。
AWS CodeBuild でビルドを計画する
ソースコードはどこにありますか? CodeBuild は現在、次のソースコードのリポジトリプロバイダからのビルドをサポートしています。ソースコードには、ビルド仕様 (buildspec) ファイルが含まれている必要があります。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。buildspec は、ビルドプロジェクト定義で宣言できます。
どこからソースコードを取ってくるかを指定できます。
Bitbucket
知らないので調べてみた。
Bitbucket は、Mercurial(2020年6月1日までのリリース[1])またはGit(2011年10月以降[2])リビジョン管理システムを使用するソースコードおよび開発プロジェクト向けに、アトラシアンが運営するWeb ベースのバージョン管理リポジトリホスティングサービスである。
CodeBuild のビルド仕様に関するリファレンス
このトピックでは、ビルド仕様 (buildspec) ファイルに関する重要なリファレンス情報を提供します。ビルド環境は、CodeBuild がビルドを実行するために使用するオペレーティングシステム、プログラミング言語ランタイム、およびツールの組み合わせを表します。buildspec をソースコードの一部として含めることも、ビルドプロジェクトの作成時に buildspec を定義することもできます。ビルド仕様の仕組みについては、「CodeBuild の仕組み」を参照してください。
ビルドするときのコマンドとかをまとめて記述するためのものです。
CodeBuild自体に設定することも可能ですが、CodeCommitと連携するとCodeCommitでアップロードしたbuildspec.yaml
を自動的に判別してくれます。
ただ、CodeBuildにbuildspecの設定をしてなくてCodeCommitでもアップロードしてないとエラーになります。
yamlファイルがないのでできませんって。
buildspecにいろいろなコマンドかけるので、Docker imageでうまくいかないときはdocker images
などを追加してimageが作成されているかを確認できる。
公式にDocker imageを作成する際のbuildspecの記述がある。
https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-docker.html#sample-docker-files
version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
〆
Docker imageをECRにアップロードしたいときに使用したサービス。
ただ、いい感じにやってくれると思ったら、buildspec
とかで指定する必要があった。
参考資料
https://d1.awsstatic.com/webinars/jp/pdf/services/20201125_AWS_BlackBelt_AWS_CodeBuild.pdf