危険察知4 択難易度 応用

状況

本番サーバーで deploy.sh を実行した。スクリプトの先頭に set -e は書かれていない。

この出力から分かることは?

$ ./deploy.shBuilding... okcp: cannot create regular file '/opt/app/current/app.jar': Permission deniedRestarting app... okDeploy finished successfully.

正答

  1. cp に失敗したまま続行し、古い jar のまま再起動している
  2. Restarting app... ok と出ているので、新しい版で起動している
  3. Permission denied は一時的なものなので、もう一度実行すれば直る
  4. Building の所要時間が出ていないので、ビルドの成否が分からない

解説

新しい app.jar のコピーが権限エラーで失敗しているのに、set -e がないため bash は次の行に進み、古い jar のまま再起動して「成功」と表示している。リリースしたつもりで旧版が動き続け、修正が反映されていないことに後で気づくことになる。出力は最後の行ではなく途中のエラーを探して読む。スクリプトには set -euo pipefail を入れ、失敗したら止まるようにする。権限の誤りは再実行しても直らないので、原因を確かめる。

参考: www.gnu.org

outputset-edeploy

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ