CodebuildでDiffを実行するとエラーとなる場合の対処方法

これはなに?

CodebuildでDiffを実行する場合のTips。
Codebuildのタスクで、特に何も考えずDiffを実行したところ、CodeBuildがエラーでコケたので対処方法について調査しました。

エラー結果

差分があるファイルをDiffでチェックするとCodebuildがエラーで止まってしまう。 f:id:ykoomaru:20200801200915p:plain

実行した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がコマンド失敗したと認識してエラーとなっていたようです。

f:id:ykoomaru:20200801195510p:plain

diffコマンド(2つのファイルや標準入力を比較する)

Linux上でExitCode確認してみたらたしかにExitCode1 で返ってきました。 f:id:ykoomaru:20200801202557p:plain

対処方法

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 になっていることが確認できます。 f:id:ykoomaru:20200801201913p:plain

最後に

CodeBuildでコマンドの結果が正常に返ってきたにも関わらずエラーで落ちた場合は、Linuxのコマンドの戻り値を見てみるといいかもしれませんね!