2014年2月10日月曜日

GithubのWebHookを使ってJenkinsのビルドを実行する方法

■概要
Githubはpushしたときにいろいろなサービスに「pushした」ということを通知する機能(Service Hooks(WebHook))があります
今回はWebHookの機能を使ってpushされたらビルドを実行するという流れをJenkinsで実現したいと思います

■環境
Windows Server 2008R2
Jenkins 1.549
※JenkinsサーバがWindows上で動作している環境で試しました
※Linux上のJenkinsでも問題なく動作するかと思います

■設定方法
1. Githubプラグインのインストール(Jenkins側設定)
Jenkinsの管理 -> プラグインの管理 -> 利用可能
で右上の検索窓に「github」と入力します
絞りこまれた一覧の中に「GitHub Plugin」という名前のプラグインがありますのでチェックしダウンロードして再起動後にインストールをクリックしてインストールを開始します
自動でインストールが始まりますので完了するまで待ちます

2. WebHookで実行するジョブの作成(Jenkins側設定)
Jenkins上でWebHookされた場合に実行するジョブを作成します
ジョブ作成時のポイントは
  • GitHub project の欄にリポジトリのURLを記載します、記載するURLはブラウザで表示する際のURLを入力してください
  • ソースコード管理 -> Git で GithubのgitリポジトリのURLを記載します、git://から始めるURLを記載してください、git clone用のURLの「https://」の部分を「git://」に変更すればOKです
  • ビルド・トリガ -> Build when a change is pushed to GitHub のチェックボックスをONにします
あとはいつも通りビルドを作成すれば大丈夫です

3. WebHookの設定(Github側設定)
WebHookを実施するリポジトリに設定します
リポジトリのトップ画面から右側にあるSettingsをクリックします


遷移した画面左側、Service Hooksをクリックします


WebHook可能なサービスの一覧が表示されますので中段より下のほうにある「Jenkins(GitHub Plugin)」をクリックします


Jenkins Hook Urlに通知を送信するJenkinsサーバのエンドポイントを入力します
hostnameやportは適宜変更してください、パスの後ろに記載されている「github-webhook/」は必ず入力してください
ActiveのチェックボックスをONにします


入力が完了したらUpdate settingsをクリックします
今回、JenkinsのGithub Pluginを使用していますが、その場合に後ろのパスの部分は必須の項目となります
またサンプルのURLはhttpで接続しています、どうやらhttpsだと証明書の関係等でうまく通知が受け取れないことがあるので、できればhttpで受け取ってください

4. GithubからのIPを許可する
これでGibHubからJenkinsサーバに通知が来るようにはなりました
FW等でアクセス拒否をしている場合にはGithubのIPアドレスを許可する必要があります
GithubのIPアドレスはGithubのMetaAPIで確認することが可能です
https://api.github.com/meta
2014/02/06時点では「192.30.252.0/22」が返却されました
WebHookからビルドがうまく動かくなった場合はIP変わっている可能性もありますので定期的に確認してみてください

5. 動作確認
GithubからWebHookのテストを実行することが可能です
JenkinsのURLを設定した画面で「Test Hook」をクリックするとJenkins側に通知を送信することができます
「Test payload deployed!」と表示されればGithub側は通知したことになります(あくまでも通知をしたということだけがわかるので、ちゃんとJenkins側が受け取っているかはここではわかりません)

Jenkins側に戻って設定したジョブから「GitHub Hook Log」を見るとTest Hookしたログが残っているかと思います
また同時にビルドが実行されていることも確認できるかと思います
ビルドされる条件はもちろんWebHookが来たらなのですが、gitの情報が変更されていない場合はビルドは実行されません
なので連続でTest Hookを実行してもgitの情報は変更されていないため連続でビルドは実行されません

以上です、githubのソースコードをCIするための基本となる動作を紹介しました

0 件のコメント:

コメントを投稿