③シェルスクリプト

デプロイ自動化スクリプト【Gitからサーバーへのデプロイを自動化する】

③シェルスクリプト
記事内に広告が含まれています。

コードを更新するたびに手動でサーバーに反映するのが面倒、そんな作業をシェルスクリプトで自動化します。

基本的なデプロイスクリプト

#!/bin/bash
set -e
APP_DIR="/var/www/myapp"
BRANCH="main"
log() { echo "[$(date "+%Y-%m-%d %H:%M:%S")] $1" | tee -a /var/log/deploy.log; }
log "デプロイ開始"
cd "$APP_DIR"
git pull origin "$BRANCH"
log "コード更新: $(git log -1 --oneline)"
sudo systemctl restart myapp
log "サービス再起動完了"
sleep 3
curl -sf http://localhost:3000/health > /dev/null && log "デプロイ成功" || { log "ヘルスチェック失敗"; exit 1; }

set -e の重要性

set -e をスクリプト先頭に書くと、コマンドが失敗した時点でスクリプトを終了します。デプロイスクリプトでは途中のエラーを見逃さないために重要です。

デプロイスクリプトの改善ポイント

ロールバック機能の追加

デプロイが失敗したときに前のバージョンに戻せるようにすることは実務で非常に重要です。git pull の前に現在のコミットハッシュを変数に保存しておき、ヘルスチェック失敗時に git checkout 保存したハッシュ でコードを戻してサービスを再起動する処理を追加します。

通知機能の追加

デプロイの成功・失敗をSlackやメールに通知する機能を追加するとチームでの運用がしやすくなります。Slackへの通知は Incoming Webhook URL に curl でJSONを POST するだけで実現できます。

実行ユーザーの権限設計

デプロイスクリプトをrootで実行するのはセキュリティ上危険です。アプリ専用のデプロイユーザーを作成し、そのユーザーが必要なディレクトリへの書き込み権限と systemctl restartsudo 権限だけを持つように /etc/sudoers で設定するのがベストプラクティスです。

デプロイスクリプトの安全なオプション一覧

オプション意味推奨
set -eコマンド失敗で即終了✅ 必須
set -u未定義変数参照でエラー✅ 推奨
set -o pipefailパイプ途中のエラーも検知✅ 推奨
set -x実行コマンドをデバッグ出力デバッグ時のみ

まとめ

  • set -e でエラー発生時に即停止する安全なスクリプトになる
  • set -uset -o pipefail を合わせて使うとより堅牢になる
  • git pull でコードを更新し systemctl restart でサービスを再起動する
  • ヘルスチェックで実際にサービスが正常動作しているか必ず確認する
  • ロールバック機能・通知機能を追加することで本番運用に耐えるスクリプトになる

コメント

タイトルとURLをコピーしました