GithubからJenkinsへのServer Hook

GithubからJenkinsへのServer Hookを調べた結果をまとめておく。
以下の3つの方法を調べた。

*  WebHook URLsを用いる方法
*  Jenkins (GitHub plugin) を用いる方法
 * Ver1.8で確認
*  Jenkins (Git plugin) を用いる方法
 * Ver2.0で確認

この方法を用いるとGithubのコードに修正を加えると対応するJenkinsジョブを走らせることができる

-----

## WebHook URLsを用いる方法
 * Githubからコミットの情報を受け取って自力で処理する方法
 * 好きなようにhook処理できるが実装が必要
 * [Githubの特定ブランチにpushした時だけhookでjenkinsビルドする - Qiita [キータ]](http://qiita.com/horimislime/items/cc4897f8fbf8b8358fe5)が詳しい

### Jenkinsの設定
 * [Jenkins Parameterized Trigger plugin](https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin)をインストールしておく

### HookするJenkinsのジョブの設定
 * 「ビルドのパラメータ化」で「文字列」のpayloadを指定しておく
  *  Hook時にcommitやpushに関するJSON形式のパラメータ([Post-Receive Hooks · GitHub Help](https://help.github.com/articles/post-receive-hooks))が渡される
 * セキュリティ設定時は「リモートからビルド」をチェックして認証トークンを設定しておく
 * payloadで渡されたパラメータを解析して対象のリポジトリやブランチのジョブを呼び出すなりする

### Githubの設定
 * 「Settings」=> 「Server Hooks」=>「WebHook URLs」 で「URL」に[Jenkins URL]/job/[Job Name]/buildWithParametersを指定して「Update Settings」する
  * セキュリティ設定時は「URL」に?token=[Token Name]を追加

![webhook.jpg](https://qiita-image-store.s3.amazonaws.com/0/16768/1dc6fb2f-872e-4266-6171-4e4dca7f50b5.jpeg)

-----

## Jenkins (GitHub plugin) を用いる方法
 * GithubからHookを受け取ると対応したジョブが実行される

### Jenkinsの設定
 * [GitHub plugin](https://wiki.jenkins-ci.org/display/JENKINS/GitHub+plugin)をインストールしておく
 * セキュリティ設定は特に必要なさそう(認証ありにしてもhookできた)

### HookするJenkinsのジョブ設定
 * 「ソースコード管理」の「Git」でリポジトリ(ブランチ)を指定しておく
 * 「ビルド・トリガ」の「Build when a change is pushed to GitHub」を設定しておく

### Githubの設定
 * 「Settings」=> 「Server Hooks」=>「 Jenkins (Github plugin)」で「Jenkins Url」に[JenkinsのURL]/github-webhookを設定する

![jenkins-github-plugin.jpg](https://qiita-image-store.s3.amazonaws.com/0/16768/5d9b879c-fbef-7a2c-1d9c-710e0d74208a.jpeg)

-----

## Jenkins (Git plugin) を用いる方法
 * GithubからHookを受け取ると対応したジョブが実行される

### Jenkinsの設定
 * [Git plugin](https://wiki.jenkins-ci.org/display/JENKINS/Git+plugin)をインストールしておく
 * セキュリティ設定は特に必要なさそう(認証ありにしてもhookできた)

### HookするJenkinsジョブ設定
 * 「ソースコード管理」の「Git」でリポジトリ(ブランチ)を指定しておく
 * 「ビルド・トリガ」の「SCMのポーリング」を設定しておく

### GIthubの設定
 * 「Settings」=> 「Server Hooks」=>「 Jenkins (Git plugin)」で「Jenkins Url」にJenkinsのURLを設定する

![jenkins-git-plugin.jpg](https://qiita-image-store.s3.amazonaws.com/0/16768/9bfd5fbf-3332-4e3e-4da0-da70ef0798ff.jpeg)

----
## その他
### githubからのHookアクセスIPについて
<del>GithubのWebHookの説明によると204.232.175.64/27, 192.30.252.0/22らしい。</del>
[https://api.github.com/meta](https://api.github.com/meta)のhooksで確認可能(コメントで教えて頂きました)
* API仕様：[Meta | GitHub API](http://developer.github.com/v3/meta/)

### httpsでのHookについて
 * 2013/11/07時点のhttpsでのHookはWebHook URLs／Jenkins (GitHub plugin) ／Jenkins (Git plugin) でほぼ不可能だった
  * JenkinsでHookされない、Apacheレベルでログが残っていない
  * [GitHub pluginのコメント](https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin?focusedCommentId=63144887#comment-63144887)でGithubの問題でhttpsが使えないらしいというものがあった

 * Hook可否について(×：Hook不可、○：Hook可)

| - | WebHook URLs | Jenkins (GitHub plugin)  | Jenkins (Git plugin)  |
|:-----------|:-----------|:-----------|:-----------|
|https(自己署名証明書)                                                              | × | × | × |
|https([ジオトラスト](https://www.geotrust.co.jp/)の証明書)    | × | ○ | × |