Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
106
Help us understand the problem. What is going on with this article?
@horimislime

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

More than 5 years have passed since last update.

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を受け取った時のみビルドジョブが呼び出され、それ以外は何も起こらないようになる。

106
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
106
Help us understand the problem. What is going on with this article?