これはなに?
CodebuildでDiffを実行する場合のTips。
Codebuildのタスクで、特に何も考えずDiffを実行したところ、CodeBuildがエラーでコケたので対処方法について調査しました。
エラー結果
差分があるファイルをDiffでチェックするとCodebuildがエラーで止まってしまう。
実行したBuildSpec
version: 0.2 phases: build: commands: - echo aaa > text1.txt - echo bbb > text2.txt - diff text1.txt text2.txt
エラー原因
DiffコマンドのExit Codeの仕様が原因でした。
Diffでチェックしたファイルに差分が存在した場合、Exit Code1で返ってくるので、Codebuildがコマンド失敗したと認識してエラーとなっていたようです。
Linux上でExitCode確認してみたらたしかにExitCode1 で返ってきました。
対処方法
Exit Code0 を返すようにすればよいので、Diffの実行結果をパイプ(|)でcatに渡して差分が合った場合でもExit Code0 にするようにすればOK。
例
diff test1.txt text2.txt |cat
動作確認
先程失敗したBuildSpecのDiff部分を書き換えて、CodeBuildを実行してみます。
変更前: - diff text1.txt text2.txt
変更後: - diff text1.txt text2.txt |cat
修正したBuildSpec
version: 0.2 phases: build: commands: - echo aaa > text1.txt - echo bbb > text2.txt - diff text1.txt text2.txt|cat
実行結果
正常にDiffの結果が取得できて、ExitCodeも 0 になっていることが確認できます。
最後に
CodeBuildでコマンドの結果が正常に返ってきたにも関わらずエラーで落ちた場合は、Linuxのコマンドの戻り値を見てみるといいかもしれませんね!