雲のメモ帳

猫とクラウドと旅行が好きなインフラエンジニアです。 日々の調べたことや興味が持ったことをこのブログにアウトプットします。

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のコマンドの戻り値を見てみるといいかもしれませんね!