現象
Jenkinsジョブでdiffを取り差異を確認しようとした際
ジョブが失敗してしまった。
(diff以外は成功しているのに...)
Connection to ***** closed.
Build step 'シェルの実行' marked build as failure
Finished: FAILURE
原因
Jenkins実行されるシェルのデフォルトは
/bin/sh -xe
である。
- -eオプション:終了コードが0でないものを返した時点でexitされる
→ diffで一致しなかった場合、0以外の終了コードを返すため、
ジョブが失敗してしまう
解決策
###1. 頭に#!/bin/sh
をつける
途中で0以外の終了コードが返っても、無視して実行し続けることができる。
ただし、他の処理が失敗した時も処理をし続けるためリスキー。
###2. diffをとった箇所は必ずtrueを返すようにする※こちらを採用
diff A.txt B.txt || true
diffの実行時は必ずtrueを返すようにした。
参考