CodeBuild の buildspec.yml のバージョン 0.2 がリリースされていました
こんにちは、藤本です。
現地時間 5/9 に Forum ページで CodeBuild の buildspec.yml のバージョン 0.2 がリリースされた旨が公開されていました。
変更内容
変更内容は Forum ページに記載がある通りです。
環境変数の指定方法
環境変数の設定キーがenvironment_variables
からenv
に、plaintext
がvariables
に変わりました。
0.2 の記法
env: variables: KEY1: VALUE1 KEY2: VALUE2
0.1 の記法
environment_variables: plaintext: KEY1: VALUE1 KEY2: VALUE2
スッキリしましたね。
なお、バージョン 0.2 ではenvironment_variables
の記述は非推奨となっています。既存のbuildspec.yml
のバージョンを 0.2 へ変更する際は、環境変数の記法を忘れずに変更しましょう。
同一シェルによる実行
0.1 まではコマンド一つ一つが異なるシェルで実行されていたようです。カレントディレクトリがコマンド毎に元に戻されたり、設定した環境変数がコマンド毎にリセットされる状況でした。バージョン 0.2 を利用することで同一シェルでコマンドが実行されるため、カレントディレクトリ、環境変数が保持されるようになりました。
例えば、下記のコマンドはカレントディレクトリのパスを表示して、親階層へ移動して、カレントディレクトリのパスを表示します。手元のターミナルで試していただければ分かりますが、pwd
の結果は異なります。ただ今までの CodeBuild では同じ結果が返ってきました。
phases: build: commands: - pwd - cd .. - pwd
以前、私がハマり、下記エントリに記載したものが解消されていました。
バージョン 0.2 の利用方法
現在、buildspec.yml
はバージョン 0.1、0.2 のどちらでも使えます。今まで使っていたものが使えなくなるということは今現在はありません。バージョン 0.2 を利用したい場合、buildspec.yml
のversion
に0.2
を指定するだけです。
version: 0.2
試してみた
それでは新旧のバージョンで動作を比較してみましょう。
バージョン 0.1
まずはバージョン 0.1 だとそもそもどういう記述と動作か確認しておきます。
buildspec.yml
version: 0.1 environment_variables: plaintext: KEY: VALUE phases: build: commands: - pwd - cd .. && pwd - pwd - echo $KEY - KEY=CHANGE - echo $KEY
ソースコードリポジトリへのプッシュ
$ git commit -am "buildspec.yml test v0.1" [master e11be3c] buildspec.yml test v0.1 1 file changed, 15 insertions(+), 23 deletions(-) rewrite buildspec.yml (95%) $ git push origin master Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 411 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To ssh://git-codecommit.us-west-2.amazonaws.com/v1/repos/NodePlatform_AmazonLinux 3afe8bb..e11be3c master -> master
ビルドの実行
$ aws codebuild start-build --project-name buildtest --region us-west-2 "id": "buildtest:9aa4f35d-074f-445d-a43f-b906a242c9c6",
動作確認
Build のログを CloudWatch Logs から確認します。
$ aws logs get-log-events --log-group-name /aws/codebuild/buildtest --log-stream-name 9aa4f35d-074f-445d-a43f-b906a242c9c6 --region us-west-2 { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "[Container] 2017/05/24 01:38:40 Running command pwd\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "/tmp/src634227524/src\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "[Container] 2017/05/24 01:38:40 Running command cd .. && pwd\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "/tmp/src634227524\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "[Container] 2017/05/24 01:38:40 Running command pwd\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "/tmp/src634227524/src\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "[Container] 2017/05/24 01:38:40 Running command echo $KEY\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "VALUE\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "[Container] 2017/05/24 01:38:40 Running command KEY=CHANGE\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "[Container] 2017/05/24 01:38:40 Running command echo $KEY\n" }, { "ingestionTime": 1495589921653, "timestamp": 1495589921000, "message": "VALUE\n" },
カレントディレクトリも、環境変数も、コマンド単位でリセットされていることが分かります。
バージョン 0.2
続いて、バージョン 0.2 の記述と動作を確認します。
version: 0.2 env: variables: KEY: VALUE phases: build: commands: - pwd - cd .. && pwd - pwd - echo $KEY - KEY=CHANGE - echo $KEY
ソースコードリポジトリへのプッシュ
$ git commit -am "buildspec.yml test v0.2" [master 01b4d45] buildspec.yml test v0.2 1 file changed, 3 insertions(+), 3 deletions(-) $ git push origin master Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 338 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) To ssh://git-codecommit.us-west-2.amazonaws.com/v1/repos/NodePlatform_AmazonLinux e11be3c..01b4d45 master -> master
ビルドを実行します。
$ aws codebuild start-build --project-name buildtest --region us-west-2 "id": "buildtest:baaffef8-1d9f-434e-8796-9d901c0c5405",
ログから実行結果を確認します。
$ aws logs get-log-events --log-group-name /aws/codebuild/buildtest --log-stream-name baaffef8-1d9f-434e-8796-9d901c0c5405 --region us-west-2 { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "[Container] 2017/05/24 01:53:30 Running command pwd\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "/tmp/src996175544/src\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "[Container] 2017/05/24 01:53:30 Running command cd .. && pwd\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "/tmp/src996175544\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "[Container] 2017/05/24 01:53:30 Running command pwd\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "/tmp/src996175544\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "[Container] 2017/05/24 01:53:30 Running command echo $KEY\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "VALUE\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "[Container] 2017/05/24 01:53:30 Running command KEY=CHANGE\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "[Container] 2017/05/24 01:53:30 Running command echo $KEY\n" }, { "ingestionTime": 1495590812026, "timestamp": 1495590812000, "message": "CHANGE\n" },
バージョン 0.2 ではカレントディレクトリも、環境変数も保持されていることが分かります。
まとめ
いかがでしたでしょうか? 私自身、ハマった経験もあり、その時は異なるシェルが利用されているとは思っていなかったため、CodeBuild はブラックボックスで怖いな、と思っていましたが、スッキリしました。コマンド単位でカレントディレクトリを移動して、コマンド実行したり、環境変数もコマンド単位で設定可能なのでワークアラウンドがあったので、大きなアップデートではないですが、シンプルに設定ファイルを書けるようになったのは嬉しいですね。