Posted at

jenkinsでcomposer.jsonとかpackage.jsonとかアップデートされた時だけコマンド実行

More than 3 years have passed since last update.


はじめに

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したりしてます。