CodeBuild Local で CodeBuild の処理をローカル実行

2018.09.04

こんにちは、かたいなかです。

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 installbundle 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 を書くときの強い味方になりそうですね!!!

参考