git hook
を活用すると自動ビルドなどが可能になります。
複数のプロダクトを統合するmonorepo構成の場合、ブランチの判定にくわえてディレクトリの判定も必要になります。
サーバー側のベアリポジトリでは、git branch
やgit diff
が動作しないため、他のサブコマンドを利用して以下のように条件分岐を実装できます。
#!/bin/bash
BRANCH=$(git rev-parse --symbolic --abbrev-ref $1)
if [[ $BRANCH = 'main' ]]; then
if [ $(git log --name-only --oneline -1 | grep "^service-a" | wc -l) -gt 0 ]; then
# Do action for Service A
elif [ $(git log --name-only --oneline -1 | grep "^service-b" | wc -l) -gt 0 ]; then
# Do action for Service B
fi
fi
gitリポジトリの変更チェックはgit hook以外の用途にも使えますが、変更ファイルを調べるためのgit log
がシャロークローンなどで適切に動作しない場合につき注意が必要です。
典型的にはgit clone --depth 1
で取得したレポジトリは、すべての変更が直近のコミットに集約されているような状態になります。
エラーではなく想定と異なる判定挙動になり、因果関係が読みとりづらいでしょう。
⁋ 2021/10/03↻ 2024/12/18
中馬崇尋
Chuma Takahiro
Chuma Takahiro