ロールバック
直すより、戻すほうが速い
出したばかりの版で不具合が見つかったとします。原因を調べて直して出し直すには、早くても数十分かかります。その間、訪問者には壊れたページが見え続けます。
やるべきことは逆です。まず前の版に戻して、原因はそれから調べる。前のレッスンまでで、戻すのに必要なものはもう揃っています。古い版は消さずに残っていて、公開先はリンク1本です。
ln -sfn /var/www/mysite-deploy/releases/20260401-101500 /var/www/mysite-deploy/current
systemctl reload nginxこれだけです。ファイルを運び直す必要がないので、数秒で終わります。
「1つ前」を自分で探させる
手で打つなら、戻り先の名前を調べる必要があります。慌てているときに ls を見て名前を写すのは、打ち間違いの元です。
版の名前は日時なので、並べ替えれば時系列になります。
ls -1 /var/www/mysite-deploy/releases | sortls -1 は1行に1つずつ出す指定です。sort で並べれば、下にあるものほど新しい版です。
1つ前を取り出すには、末尾から2つを取って先頭を見ます。
PREV=$(ls -1 /var/www/mysite-deploy/releases | sort | tail -2 | head -1)tail -2 で最後の2つ、head -1 でそのうちの先頭。つまり最新の1つ前です。日時の名前にしておいた効き目が、ここで出ます。
戻れないときは止める
版が1つしか無いときに戻ろうとすると、PREV には最新の版そのものが入ります。戻ったつもりで何も変わらない、という最悪の結果になります。
COUNT=$(ls -1 /var/www/mysite-deploy/releases | wc -l)
if [ "${COUNT}" -lt 2 ]; then
echo "戻れる版がありません"
exit 1
fiexit 1 は、失敗として終わるという指定です。前のレッスンで見た終了コードと同じ話で、0 以外が失敗を表します。戻れないことを黙って隠さないのが大事です。
[ "${COUNT}" -lt 2 ] の -lt は「より小さい」という比較です。数を比べるときは < ではなくこの書き方を使います。
戻したことを記録する
戻す操作は、あとで必ず振り返ることになります。いつ、どの版から、どの版へ戻したか。記録が無いと、翌日に自分でも思い出せません。
echo "$(date '+%Y-%m-%d %H:%M:%S') rollback ${CURRENT} -> ${PREV}" >> /var/log/deploy.log6章のヘルスチェックと同じ形です。自動で動くものほど、何をしたかを残す。この習慣が、運用の質をそのまま決めます。
手を動かす
最新の1つ前の版を自分で探して戻すスクリプトを書き、実際に戻ることを確かめます。