codebuild-localを使ってみる
はじめに
数多あるCIツールの一つであるCodeBuild。buildspec.ymlにコマンドを書いたりとかでテストやデプロイなんかができるようになります。
ただし、確認するためには一回Gitに上げたりする必要がある。
それを毎回やるのは面倒くさい。
そうだ。ローカルで動かそう。
作るもの
ローカルのCodeBuild。
材料は以下。
対象読者
- CodeBuildをとりあえず動かしてみたい人
内容
まずは材料を手に入れる
Githubからリポジトリをcloneしてきましょう。
cloneしたらal2
、ubuntu
というディレクトリがありますが、その配下にそれぞれ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 | ソースディレクトリの指定 |
終わりに
途中まではノリノリで書いてたけど途中から若干迷走した。
Author And Source
この問題について(codebuild-localを使ってみる), 我々は、より多くの情報をここで見つけました https://qiita.com/tokino/items/9d43b22eeb1d13f56734著者帰属:元の著者の情報は、元の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 .