セットアップ
Jenkins が GitHub からリポジトリを取得し、Xcode ビルドを実行するように Mac mini をセットアップしました。mini はインターネットからファイアウォールで保護されているため、15 分ごとに GitHub をポーリングして変更を確認しています。
Xcode ビルドを開始する前に、Jenkins に次のスクリプトを実行させて、プロジェクトのビルド番号を増やし、結果をリポジトリにコミットします。
#!/bin/sh
agvtool bump -all
/usr/local/git/bin/git commit -a -m "This is Jenkins, updating your build numbers, sir."
ビルド後、次のように、GitHub からプルしてからプッシュする別のスクリプトを実行するようにビルド後のアクションを設定しました。
#!/bin/sh
/usr/local/git/bin/git pull origin develop
/usr/local/git/bin/git push origin develop
問題
Jenkins は実行するたびにコミットと GitHub へのプッシュを実行しているため、次回のポーリングでは前回プッシュした変更が検出され、他に実際の変更があったかどうかに関係なく新しいビルドが作成されます。
質問
私のセットアップで、別の方法で行うべき何かおかしなことはありますか? Jenkins に Xcode ターゲットのビルド番号を更新してもらい、その結果をコミットして GitHub にプッシュしてもらいたいです。この構成は明らかにそれを達成しますが、必要に応じて 15 分ごとにビルドするのではなく、15 分ごとにビルドするという副作用があります。
Jenkins は lastSuccessfulBuild の SHA1 を参照して変更があったかどうかを判断していますが、それは私のコミットの前に行われています。現在のビルドの SHA1 を、バージョン番号のバンプのコミットから生じるハッシュに設定する方法はありますか? そのようなもの:
#!/bin/sh
agvtool bump -all
/usr/local/git/bin/git commit -a -m "This is Jenkins, updating your build numbers, sir."
NEW_SHA=$(/usr/local/git/bin/git rev-parse HEAD)
# Some awesome Jenkins-fu to set the SHA1 of the current build to NEW_SHA
このようにすると、Jenkins が次にハッシュを比較するときに、バージョン番号を上げるためにコミットしてから変更がない限りビルドされません。
助けてくれてありがとう。