🍮

Vercelで特定のbranchかつ特定のディレクトリに変更があった場合にビルドする設定

公開日
5か月前
2024-01-24
更新履歴

解説

リポジトリのディレクトリ構成
(Project root)
├── client
└── server

このように一つのリポジトリでclientとserverを分けていて、clientのディレクトリ以下をVercelにデプロイしたい場合の方法です。この時、pushされたブランチも main に限定します。以下の記事の設定に対象のディレクトリの指定を追加したものになります。

Vercelのプレビューデプロイで特定のブランチ以外を無視する
zenn.dev favicon
zenn.dev
Vercelのプレビューデプロイで特定のブランチ以外を無視する

まず、VercelのRoot Directoryの設定は client になっていることを確認して下さい。

次に Ignored Build Step: を Run my Bash script にして、値を bash scripts/vercel-ignore-build-step.sh にします。スクリプトはclientディレクトリ上で実行されるため、clientディレクトリ以下に設置するようにして下さい。この設定で指定したファイルを以下のように作成します。

client/scripts/vercel-ignore-build-step.sh
#!/bin/bash

echo "VERCEL_GIT_COMMIT_REF: $VERCEL_GIT_COMMIT_REF"
git diff HEAD^ HEAD --quiet .
DIFF=$?

if [[ "$VERCEL_GIT_COMMIT_REF" == "main" && DIFF -eq 1 ]] ; then
  # Proceed with the build
  echo "✅ - Build can proceed"
  exit 1;

else
  # Don't build
  echo "🛑 - Build cancelled"
  exit 0;
fi

コードの解説

Gitコマンドで差分を確認する
git diff HEAD^ HEAD --quiet .
DIFF=$?

この行で、clientディレクトリに差分が発生しているかを確認しています。$? は、直前に実行されたコマンドの終了ステータスを示す環境変数です。git diff では変更がある場合に1を返し、変更がない場合に0を返します。DIFF -eq 1 の部分で差分がある場合にビルドするように判定しています。

以上で、mainブランチへのpushでclientディレクトリに変更がある場合のみビルドが実行されるようになります。