LoginSignup
118
106

More than 5 years have passed since last update.

Githubの特定ブランチにpushした時だけhookでjenkinsビルドする

Posted at

hookを使ってるとリポジトリへpushしてすぐにjenkinsをビルドできて便利だけど、どのブランチにpushしてもhook URLが呼ばれてちょっと不便。
例えばdevelopブランチにpushされた時だけ、hookでdevelopのビルドジョブを実行する、みたいな事がやりたくて調べてみた。

やり方

自前のgitリポジトリだと.git/hooksで特定ブランチへのpush時だけhookする設定が書けるけど、Githubでは同じような事ができないので
Jenkins側で受け取ったhookがどのブランチへのpushによるものかを判定してみる。手順は以下のとおり。

hook受取り用ジョブの作成

ビルドジョブとは別でGithubからhookを受け取る専用のジョブを用意しておく。

ジョブはパラメータ付きビルドにしておき、下のように payload という名前でパラメータを受け取れるようにする。デフォルト値は適当に。
スクリーンショット 2013-10-21 10.09.03.png

このpayloadを設定しておくと、Githubからジョブのhook URLが叩かれた際に送られてくるJSONが受け取れる。中身はこんな感じで、pushされたブランチ名やcommit IDなどが含まれている。

Githubから受け取るJSON
[
  {
    "ref":"refs/heads/develop",
    "after":"44c877612fe7187f6167ef01f465b96a5868e82b",
    "before":"4acbee81fc4f2b0e2dc8cdf962294d8619ca18eb",
    "created":false,
    "deleted":false,
    "forced":false,
    "compare":"https://github.com/organization-name/project-name/compare/4acbee81fc4f...44c877612fe7",
    "commits":[
      {
        "id":"5dea536624b8b74599d2ef6efc612e37998bb3e0",
...

詳細はこちらで。Post-Receive Hooks · GitHub Help

これでhook受取りジョブ側でブランチの情報を得られるようになったので、次はこのJSONでビルドジョブを回すかどうかを判定する。

Run Condition Pluginの導入

payloadで渡されたJSONの内容をチェックするためにこのプラグインを入れておく。

例えば受け取ったhookがdevelopブランチへのpushによるものかどうか判定したければ、ビルド手順の追加Conditional step (single)で以下のような設定を入れる。

スクリーンショット 2013-10-21 10.09.36.png

この設定ではpayloadの中身に"refs/heads/develop"の文字列が含まれるか正規表現で判定する。

次にBuilderTrigger/call builds…でビルドジョブ名を指定しておくと、正規表現でdevelopへのpushと判定した時のみビルドを走らせることができる。またdevelop以外へのpushによるhookを無視したければ、高度な設定から判定失敗時は何もしないように設定する。最終形は下のような感じ。

スクリーンショット 2013-10-21 10.10.14.png

これでdevelopへpushした際のhookを受け取った時のみビルドジョブが呼び出され、それ以外は何も起こらないようになる。

118
106
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
118
106