はじめに
jenkinsでPHPとgulpを使ってAngular.jsのビルドしてます。
ビルド時に毎回composer.phar update
したり、npm install
するのもスマートじゃないので、composer.json
とかpackage.json
など、対象のファイルに変更があった時だけ処理が走るようにします。
シェルスクリプトでのお話です。
前提
- jenkinsが使える
- jenkinsのビルド時にシェルスクリプトを実行している
やり方
まずは特定のファイルの直近の変更有無を確認
とりあえずこの方式で色んなパターン使いまわせます
git diff HEAD^ HEAD --stat -- ファイル名
例:リポジトリ直下のcomposer.jsonに変更があるか確認する場合
git diff HEAD^ HEAD --stat -- composer.json
変更があればこんな感じで表示されます。
composer.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
変更が無ければ何も表示されません
composer.jsonに変更があった時だけcomposerをupdate
# composer.jsonの変更を確認
json_change=`git diff HEAD^ HEAD --stat -- composer.json`
# composer.jsonに変更がある
if [ -n "$json_change" ]; then
echo "composerに変更がありました"
# composerのアップデート実施
php composer.phar update
fi
package.jsonに変更があった時だけnpm install
# package.jsonの変更を確認
package_json_change=`git diff HEAD^ HEAD --stat -- package.json`
# package.jsonに変更がある
if [ -n "$package_json_change" ]; then
echo "package.jsonに変更がありました"
# npm install
npm install
fi
おわりに
こんな感じでこの他にもbower.json
の変更を検知してbower install
したりしてます。