状況
本番サーバーで deploy.sh を実行した。スクリプトの先頭に set -e は書かれていない。
この出力から分かることは?
$ ./deploy.shBuilding... okcp: cannot create regular file '/opt/app/current/app.jar': Permission deniedRestarting app... okDeploy finished successfully.正答
- cp に失敗したまま続行し、古い jar のまま再起動している
- Restarting app... ok と出ているので、新しい版で起動している
- Permission denied は一時的なものなので、もう一度実行すれば直る
- Building の所要時間が出ていないので、ビルドの成否が分からない
解説
新しい app.jar のコピーが権限エラーで失敗しているのに、set -e がないため bash は次の行に進み、古い jar のまま再起動して「成功」と表示している。リリースしたつもりで旧版が動き続け、修正が反映されていないことに後で気づくことになる。出力は最後の行ではなく途中のエラーを探して読む。スクリプトには set -euo pipefail を入れ、失敗したら止まるようにする。権限の誤りは再実行しても直らないので、原因を確かめる。
参考: www.gnu.org
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ