解説
リポジトリのディレクトリ構成
- (Project root)
- client
- server
このように一つのリポジトリでclientとserverを分けていて、clientのディレクトリ以下をVercelにデプロイしたい場合の方法です。この時、pushされたブランチも main
に限定します。以下の記事の設定に対象のディレクトリの指定を追加したものになります。
Vercelのプレビューデプロイで特定のブランチ以外を無視する
zenn.dev
![Vercelのプレビューデプロイで特定のブランチ以外を無視する](/_next/image?url=https%3A%2F%2Fpublic-content.hackersheet.com%2Fwebsite-og-images%2F32f3076d-19b8-4f82-ae33-4116a07b7ea0.png&w=3840&q=75)
まず、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ディレクトリに変更がある場合のみビルドが実行されるようになります。