先日公開した記事「JenkinsでCI環境構築チュートリアル(Windows編)」では、Jenkinsのインストールとジョブの作成方法についてご説明しました。今回は特定のブランチにPUSHされたタイミングでGitHubと連携して最新ファイルを取得する方法をご説明します。

完成イメージ ~JenkinsとGitHubの連携~

JenkinsとGitHubの連携の完成イメージ

実際の開発シーンを想定して上記の図のようなフローを構築したいと思います。開発者が変更したソースコードをGitHubにPUSHしたことをトリガーにJenkinsにその旨を通知します。Jenkinsはその通知を受けて、最新ファイルをGitHubから取得してくる仕組みとなります。

処理の流れとは逆になりますが、まずはJenkins側で「GitHubから通知を受け取る設定」と「ジョブの作成」から行っていきます。

Jenkinsの設定 ~GitHubからの通知を受け取る設定~

本チュートリアルでは、特定のブランチにPUSHされた際にのみ動作する仕組みを構築していきたいのですが、GitHubは特定のブランチへの変更に限らず、すべてのブランチの変更を通知する仕様となっております。しかし、GitHubには変更があった旨を通知する際にJSONファイルを合わせて送信する仕組みがあり、Jenkins側でそのファイルを解析することでどのブランチに変更があったのかを判断することができます。

※JSONファイルの内容はデベロッパーサイトに詳しく記載されています。

Jenkinsプラグインのインストール

色々と難しいことを書いてしまいましたが、Jenkinsのプラグインを使うことで、これらの仕組みを簡単に実現することができます。「Jenkinsの管理」->「プラグインの管理」->「利用可能」から、以下のプラグインをインストールしてください。

※Jenkinsのプラグインには依存関係のあるプラグイン(そのプラグインを利用するために必要なプラグイン)がある場合があります。プラグインのWikiページには必要なプラグインが記載されている場合がありますので、こちらを確認することをオススメします。以下は依存関係のあるプラグインを含めたものになっております。

Jenkins のプラグインマネージャーの画面

プラグインをインストールしたら、「GitHubから通知を受け取るジョブ」と「GitHubから最新ファイルを取得するジョブ」の2つのジョブを作成していきます。一つのジョブですべての処理を書くことも可能ですが、モジュールとして役割ごとに分けて作成することで、修正がしやすくなり、また別のジョブで使いまわすことも出来るためとても便利に扱うことができます

GitHubから最新ファイルを取得するジョブを作成

「フリースタイル・プロジェクトのビルド」で新しいジョブを作成し、「ソースコード管理」から「Git」にチェックを入れてください。ソースコードを取得するリポジトリのアドレスとアカウント情報を設定し、「Branches to build」欄にはソースコードを取得する対象のブランチ名を記述します。キャプチャ画像ではdevelopブランチを対象として設定しています。

GitHubと連携するためのJenkinsプラグインのインストール

通知を受け取るジョブを作成

「フリースタイル・プロジェクトのビルド」で新しいジョブを作成し、GitHubからパラメータを受け取れるようにするため「ビルドのパラメータ化」にチェックを入れてください。GitHubからは「payload」というパラメーターでJSON形式のコミット情報が送られてくるため、文字列の名前を「payload」と設定し、デフォルト値には「none」を設定しておきます。

Jenkins設定のパラメーター

次に受け取ったJSONファイルをチェックし、該当のブランチであれば次の処理に進むよう設定していきます。developブランチでの変更を対象としたいため、それぞれ以下の通り設定していきます。

  • Run:Regular expression match
  • Expression:.*refs/heads/develop.*
  • Label:${ENV,var=”payload”}
  • Builder:Trigger/call builds on other projects
  • Projects to build:(先程作成した「GitHubから最新ファイルを取得するジョブ」のジョブ名称)

GitHubのブランチの作成

次のページではGitHubからJenkinsに通知させる方法を解説します。