Featured image of post GitHubへのpushでJenkinsのJobを自動実行する【Webhook】

GitHubへのpushでJenkinsのJobを自動実行する【Webhook】

GitHubへのpushを検知してJenkinsのJobを自動実行する設定手順。CIツールとは何かから、Jenkins側のジョブ設定、GitHub側のWebhook登録、サーバー側の設定、pushして動作確認するまで♪

1641文字

Jenkinsで自動化

毎回同じ作業をするのがつらたん。。。

システム開発等をしていると、Githubにソースをpushまたはmergeしたタイミングで共通の処理を行いたい、というケースが出てくると思います。
ソースをビルドしたり特定のディレクトリに移動したり、Slackに通知を飛ばしたり...etc

そんな時にJenkinsを用いれば共通作業を自動化することが可能です。

Jenkins?

JenkinsとはCIツールの一つです。
CIツールとは、Continuous Integration Tool(継続的インテグレーションツール)という意味の略で、オープンソースのソフトウェアです。

継続的インテグレーションツール?

また小難しい単語が出てきましたね。orz

継続的インテグレーションとは、システム開発において、ソースのビルドやユニットテストを都度繰り返し行なうことによって、システムの問題早期発見し、開発の効率化・品質向上に繋げるための手法の事を指します。
今回はこの作業をJenkinsというソフトウェアを利用することで自動化を図ることが可能になります。

今回は、Githubpush操作をJenkins側で認識し、特定のジョブを実行する、という部分までの手順をご紹介致します。

手順

前提

Point
  • Git関連のJenkinsプラグインインストール済み(Git, Github)
  • JenkinsユーザーのSSHキーは設定して接続確認済み
[embed]/it/2018/03/12/2586/[/embed]

Jenkins側の設定

まずはJenkins側の設定を行いましょう。

GithubからのWebhook実行したいJobを選択します。

次にソースコード管理セクションにて、以下の作業を行い、認証情報を新たに設定するので追加>Jenkinsを選択します。

Point
  • Gitにチェックを入れる
  • 対象のリポジトリを入力
  • ビルドするブランチを指定
  • ビルドするブランチを指定
  • リポジトリをチェックアウトするディレクトリを指定

認証情報の追加ダイアログが表示されたら、以下の項目の入力を行った上で追加ボタンをクリックします。

Point
  • 種類をSSHユーザー名と秘密鍵
  • スコープをシステム
  • ユーザーをSSHキーを作成したユーザー名
  • 秘密鍵をJenkinsマスター上のファイルからにチェックを入れ、サーバー上の秘密鍵までのパスを入力


そうすると、上記で登録したユーザー名の認証情報が選択された状態になります。

次にさらに下部GitHub hook trigger for GITScm pollingにチェックを入れ、サンプルとしてシェルスクリプトの欄に以下のコマンドを入力して保存ボタンをクリックしましょう。

echo 'Update Success.'


Github側の設定

次にGithub側JenkinsへのWebhook通信の設定を行いましょう。
Webhookを行いたいリポジトリのページを開き、Settings>Webhooks>Add webhookボタンをクリックします。
※リポジトリに対して管理者権限が無いとSettingsメニューが出ません

Payload URL以下を追記してください。

http://{Jenkinsサーバー}/github-webhook/

Content typeapplication/jsonを指定して他はデフォルトのままAdd webhookボタンをクリックします。

サーバー側の設定

最後にAWSのEC2等を利用していて、セキュリティグループでIP制限をかけている場合は、Githubからのアクセスを許可する必要があります。
コチラにアクセスし、hooksとなっている部分のIPを全て許可しましょう。

{
  "verifiable_password_authentication": true,
  "github_services_sha": "46d8ca660a3023125e6581aa8c6b912c61fdcb34",
  "hooks": [
    "192.30.252.0/22", //追加
    "185.199.108.0/22" //追加
  ],
  "git": [
    "192.30.252.0/22",
    "185.199.108.0/22",
    "13.229.188.59/32",
    "13.250.177.223/32",
    "18.194.104.89/32",
    "18.195.85.27/32",
    "35.159.8.160/32",
    "52.74.223.119/32"
  ],
  "pages": [
    "192.30.252.153/32",
    "192.30.252.154/32"
  ],
  "importer": [
    "54.87.5.173",
    "54.166.52.62",
    "23.20.92.3"
  ]
}

[adsense]

確認

では、実際にpushを行ってJobが実行されるか確認してみましょう。
まずはGithubにpushをしてみます。

git push origin master
Counting objects: 1, done.
Writing objects: 100% (1/1), 198 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/xxxxxx/yyyyyy.git
   xxxxxxx..xxxxxxx  master -> master


お、、、

おぉ〜!!!正常にpush操作を検知してJenkinsのJobが実行されましたね♪

Github側のWebhookの履歴にも成功が追加されています。

終わりに

やや設定が複雑ですが、最初に設定さえしてしまえば後々とても幸せになります。

JenkinsはCIツールとしてとても普及していて、他にも様々なサービス連携を設定する事が出来てとても便利なので、ぜひ使いこなせるようになりましょう。