codebuild-localを使ってみる


はじめに

数多あるCIツールの一つであるCodeBuild。buildspec.ymlにコマンドを書いたりとかでテストやデプロイなんかができるようになります。

ただし、確認するためには一回Gitに上げたりする必要がある。

それを毎回やるのは面倒くさい。

そうだ。ローカルで動かそう。

作るもの

ローカルのCodeBuild。

材料は以下。

対象読者

  • CodeBuildをとりあえず動かしてみたい人

内容

まずは材料を手に入れる

Githubからリポジトリをcloneしてきましょう。

cloneしたらal2ubuntuというディレクトリがありますが、その配下にそれぞれDockerfileがあるのでお好みのものを選びましょう。

この記事ではubuntu:4.0を使っていきます。

材料を使える形に整える

CodeBuildで使うubuntuイメージを作りましょう。

cloneしてきたプロジェクトの直下にいることを前提として、以下のコマンドを順次実行します。

$ cd ubuntu/standard/4.0
$ docker build -t aws/codebuild/ubuntu:4.0 .

ビルド時間は長いので待っている間に映画でも見てみましょう。

キャプテン・アメリカ/ウィンター・ソルジャーが面白かったです。

イメージを使ってみる

プロジェクト直下にlocal_buildsというディレクトリがいるはずです。

ここに移動したら中にあるcodebuild_build.shを使って実際に動かしてみましょう。

以下は例です。

$ ./codebuild_build.sh -i aws/codebuild/ubuntu:4.0 -a ./output -m

動かしてみるとdocker imageのpullが始まり、やがて実行に失敗するでしょう。

もしも実行結果の中にbuildspec.ymlが無いというエラーを見つけたのならここまでの工程は成功になります。

では、buildspec.ymlをlocal_builds配下に作成して見ましょう。

以下のような中身であればきっと動くでしょう。

version: 0.2

phases:
    install:
        commands:
            - echo 'hello world'

buildspec.ymlを作成したらもう一度同じコマンドを打ってみましょう。

今度はinstallのphaseまで動き正常に終了したでしょう。

これであなたはローカルでCodeBuildを試すことができるようになりました。

しかし注意してください。cacheの機能は動きません。

ちょっと解説

codebuild_build.shに指定のオプションを渡すことでよしなに実行してくれます。

中身としてはdockerコマンドを最終的に実行している形のため、詳しく見たい人は見てみるといいでしょう

では、指定するオプションについて軽く説明です。

ドキュメントはこちら

オプション 説明 必須
-i CodeBuildを動かすベースのコンテナイメージ
-a 生成物の出力先(アーティファクトと呼ばれるもの)
-l 使用するCode build agent iamgeの変更
-c ホストマシンのAWS credentialsなどの情報のインポート
-p 使用するAWSプロファイルの指定
-b buildspecの指定。指定が無い場合はソースディレクトリのbuildspec.ymlが使われる
-e 環境変数の指定。.envの形式などのファイルを指定する
-m カレントディレクトリをソースディレクトリとしてマウントする
-d privilegedモードでdockerを動かす
-s ソースディレクトリの指定

終わりに

途中まではノリノリで書いてたけど途中から若干迷走した。