2012年7月13日TweetPocketHookの機構を使うと、GitHubに変更がプッシュされたタイミングで自動的にJenkinsのジョブが走るようにすることができます。ポーリングに比べて、プッシュからビルドまでの時差が減り、無駄な通信も減りますが、アクセス制御が有効になっている場合の設定で少しはまってしまったので方法を書いておきます。HookをトリガーにしたビルドGitには、コミット直前やプッシュ完了時など、任意のタイミングでスクリプトを実行できるHookという機構があります。この機構を利用すると、レポジトリに変更がプッシュされたタイミングでJenkinsのジョブを実行させることができます。Hooksページ内でHookの設定ができます。Jenkinsと連携させるための項目が最初から用意されています。ここでJenkins内のジョブ実行用のURLを指定しておくと、プッシュがあったタイミングでそのURLにリクエストが送信され、Jenkins側でジョブが実行される、という仕組みです。GitプラグインとGitHubプラグインHook経由でJenkinsのジョブを実行させるにはGitプラグインを使う方法とGitHubプラグインを使う方法の二つがあります。GitHub上でもそれぞれ設定できるようになっています。アクセス制御GitHubプラグインの方は、Jenkinsの方でGitHubのアカウントを設定しておくと、自動的にこのHookの設定もやってくれる機能があったりして便利なのですが、残念ながらJenkins上のアクセス制御が有効になっている場合の設定方法に関する有効な資料がまとまっていませんでした。実際のJenkinsの運用では、セキュリティ面での問題から基本的にはアクセス制御を有効にしておくべきです。Gitプラグインの方では、アクセス制御が有効になっている場合でも問題なくジョブを実行できるので、Gitプラグインの方を使いましょう。hook」にて説明されていますが、Gitプラグインが有効になっている状態でhttp://Jenkinsサーバー/git/notifyCommit?url=gitのレポジトリURLというURLを叩くと、Jenkins側でそのレポジトリに関連するすべてのジョブが実行されます。Plugin)を選択し、ここでこのURLをセットし「Active」にチェックをつけましょう。SCMsで複数レポジトリを設定している場合は実行されないというものがあります。SCMsを使っている場合は上流プロジェクトを一つ用意して、そこで単一のレポジトリをセットする方法がよさそうです。動作テストGitHub上で設定をする前に、curlコマンドを使ってそのURLをたたいてみましょう。"http://example.com:8080/git/notifyCommit?url=git@github.com:foo/bar"正常に受理されると、ポーリングがスケジュールされたジョブの一覧が表示されます。BarBuildなお、このリクエストではポーリングがスケジュールされるだけなので、実際にレポジトリ上で変更がなかった場合はビルドは実行されません。Hooksの設定から上のURLを設定してActiveにセットしたら完了です。試しに適当な変更をプッシュしてみて、ビルドが実行されるかチェックしてみましょう。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイトご意見、ご感想をお願いします。その2ARを学ぶ10連休。折り返し地点までの記録。