この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、かたいなかです。
CodeBuild はビルドを自動化するのにとても便利ですが、一度正しく処理を組み立てるまでに毎回 GitHub 等にコードをプッシュしながらトライアンドエラーを繰り返すのはなかなか大変です。
そこで今回は、CodeBuild での処理を手元で試せる CodeBuild Local の使い方をご紹介します。
実際にやってみる
今回は、Rails のアプリケーションを使用していきます。
また、今回のソースコードはこちらのリポジトリにあります。
buildspec.yml を作成
まず、CodeBuild に実行させたい処理を記述する buildspec.yml
を用意します。
version: 0.2
phases:
install:
commands:
- bundle install
build:
commands:
- bundle exec rspec
今回はbundle install
とbundle exec rspec
を実行させます。
ビルド環境のイメージのビルド
CodeBuildの公式イメージは公開リポジトリには置かれていないため、こちらのリポジトリから自分でビルドする必要があります。
今回はビルド環境として、Ruby の公式イメージを使うので、以下のコマンドを作業用ディレクトリで実行します。
$ git clone https://github.com/aws/aws-codebuild-docker-images.git
$ cd aws-codebuild-docker-images
$ cd ubuntu/ruby/2.5.1
$ docker build -t aws/codebuild/ruby:2.5.1 .
$ docker run -it --entrypoint sh aws/codebuild/ruby:2.5.1 -c bash
CodeBuildLocal のヘルパースクリプトを設置
先程の CodeBuild の公式イメージのリポジトリに CodeBuild Local を実行するためのヘルパースクリプトがありますので、プロジェクトのルートディレクトリで以下のコマンドを実行しヘルパースクリプトを設置します。
$ curl https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh > codebuild_build.sh
ヘルパースクリプト
ヘルパースクリプトはCodeBuildのDockerイメージを直接使うのに比べ、オプションを渡すのを簡単にしてくれます。
ヘルパースクリプトでは以下のようなオプションを使用できます。
オプション | 説明 | |
---|---|---|
-i <イメージ> | 必須 | ビルド環境として用いるイメージを指定します |
-a <ディレクトリ> | 必須 | ビルドのアーティファクトを出力するディレクトリを指定します |
-s <ディレクトリ> | ビルドのソースとなるディレクトリを指定します。デフォルトではワーキングディレクトリがソースディレクトリとなります。 | |
-c | ホストから AWS の認証情報を渡します | |
-b <ビルド定義ファイルの場所> | ビルド定義ファイルの場所を指定します。デフォルトではソースディレクトリの buildspec.yml が使用されます |
|
-e <環境変数ファイル> | 環境変数を定義したファイルを指定します。 環境変数のファイルではそれぞれの行で VAR=VAL のように環境変数を指定します。 |
|
-h | ヘルプを表示します |
実行してみる
今回はシンプルに、ビルド環境のDockerイメージとアーティファクトの出力先のみ指定して実行してみます。
$ ./codebuild_build.sh -i aws/codebuild/ruby:2.5.1 -a artifact
## 省略
agent_1 | [Container] 2018/09/04 05:43:52 Entering phase INSTALL
agent_1 | [Container] 2018/09/04 05:43:52 Running command bundle install ## bundle install 実行
## bundle installの出力がたくさん
## 省略
agent_1 | [Container] 2018/09/04 05:44:57 Phase complete: INSTALL Success: true
agent_1 | [Container] 2018/09/04 05:44:57 Phase context status code: Message:
## 省略
agent_1 | [Container] 2018/09/04 05:44:57 Entering phase BUILD
agent_1 | [Container] 2018/09/04 05:44:57 Running command bundle exec rspec ## rspec実行
agent_1 | No examples found.
agent_1 |
agent_1 |
agent_1 | Finished in 0.00025 seconds (files took 0.06969 seconds to load)
agent_1 | 0 examples, 0 failures
agent_1 |
agent_1 |
agent_1 | [Container] 2018/09/04 05:44:57 Phase complete: BUILD Success: true
agent_1 | [Container] 2018/09/04 05:44:57 Phase context status code: Message:
## 省略
上のように出力され、手元で buildspec.yml
による処理が実行されたことが分かります。
まとめ
CodeBuildLocal を使用することで簡単にローカルでビルドを実行することができました。
buildspec.yml
を書くときの強い味方になりそうですね!!!
参考
- aws-codebuild-docker-images
今回ヘルパースクリプトや公式イメージのビルドに使用したリポジトリ