GithubとJenkinsの連携

# 概要
GithubのWebhooksを用いてJenkinsと連携をさせる方法を記述します。
尚、各ソフトウェアのインストール手順は割愛します。

# 環境
- Windows10
- Jenkins
- Gitbash
- ngrok
- JDK1.8.0_172
- Maven

# Jenkins
## JDK
Jenkins -> Jenkinsの管理 -> Global Tool Configuration -> JDK -> インストール済みJDK

|項目|内容|
|----|----|
|名前|任意の文字列 (例：JDK)|
|JAVA_HOME|JDKがインストールされているパス<br/> (例：C:\Program Files\Java\jdk1.8.0_172)|
|自動インストール|チェック無|

## Git
Jenkins -> Jenkinsの管理 -> Global Tool Configuration -> Git -> インストール済みGit

|項目|内容|
|----|----|
|名前|任意の文字列 (例：Git)|
|Git実行形式へのパス|git.exeがインストールされているパス<br/> (例：C:\Users\ユーザー名\AppData\Local\Programs\Git\cmd\git.exe)|
|自動インストール|チェック無|

## Maven
Jenkins -> Jenkinsの管理 -> Global Tool Configuration -> Maven -> インストール済みMaven

|項目|内容|
|----|----|
|名前|任意の文字列 (例：Maven)|
|Git実行形式へのパス|Mavenがインストールされているパス<br/> (例：C:\apache-maven-3.6.3)|
|自動インストール|チェック無|

## APIトークン
Jenkins -> Jenkinsの管理 -> ユーザーの管理 -> 任意のユーザーID -> 設定 -> APIトークン

|項目|内容|
|----|----|
|Default Name|任意の文字列 (例：JenkinsApiToken)|

Default Nameに任意の文字列を入力後、「Generate」ボタンをクリックします。

## 新規ジョブの作成
Jenkins -> 新規ジョブ作成

|項目|内容|
|----|----|
|Enter an item name|任意の文字列 (例：testjob)|

Enter an item nameにジョブ名を入力後、「フリースタイル・プロジェクトのビルド」を選択後「OK」ボタンをクリックします。

## ジョブの設定
### General

General -> Github Project

|項目|内容|
|----|----|
|Github project|チェック有|
|Project url|連携させるGithubのリポジトリURL<br/> (例：https://github.com/ユーザー名/リポジトリ―名.git/)|

### ソースコード管理

ソースコード管理 -> Git

|項目|内容|
|----|----|
|リポジトリURL|連携させるGithubのリポジトリURL<br/> (例：https://github.com/ユーザー名/リポジトリ―名.git/)|
|ビルドするブランチ|任意のブランチ名 (例：*/master)|

### ビルド・トリガ

ビルド・トリガ -> リモートからビルド (例: スクリプトから)

|項目|内容|
|----|----|
|認証トークン|任意の文字列 (例：JenkinsApiToken)|

### ビルド

ビルド -> ビルド手順の追加 -> Mavenの呼び出し

|項目|内容|
|----|----|
|使用するMaven|「Jenkins -> Jenkinsの管理 -> Global Tool Configuration -> Maven -> インストール済みMaven」で設定した名前を指定|
|使用するMaven|[Maven名](#maven)|
|ゴール|test|

# ngrok
## ngrokとは？
ngrokとは、localhostで動いているサーバーを、LANの外からアクセスできるようにできるツールです。今回はローカル環境で動いているJenkinsを外部 (Github) からアクセスさせたいため、ngrokを使用しています。

## ngrokの起動
ngrokをダウンロードしたディレクトリに移動して、下記コマンドで起動。

```
ngrok.exe http 8080
```

```
ngrok by @inconshreveable
(Ctrl+C to quit)
Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://aaabbbcccddd.ngrok.io -> http://localhost:8080
Forwarding                    https://eeefffgggfff.ngrok.io -> http://localhost:8080
Connections                   ttl     opn     rt1     rt5     p50     p90
0       0       0.00    0.00    0.00    0.00                     
```

## ngrokの動作確認
ブラウザから http://aaabbbcccddd.ngrok.io へアクセスすると、vagrantの8080番ポートにアクセスが可能となります。また、ngrokのアドレスは、再起動すると毎回変わります。

# Github

## Webhook
連携させるGithubのリポジトリ -> Settings -> Webhooks -> Add webhook

|項目|内容|
|----|----|
|Payload URL|[任意のPayload URL](#payload-urlのフォーマット)|
|Content type|application/x-www-form-urlencoded|
|Secret|空白|
|Which events would you like to trigger this webhook?|Just the push event.|
|Active|チェック有|

### Payload URLのフォーマット
http://[JENKINS_USERID]:[API_TOKEN]@[JENKINS_HOST]/job/[JOB_NAME]/buildWithParameters?token=[TOKEN_NAME]

```
http://jenkins_userid:aaaaabbbbbcccccddddd@http://aaabbbcccddd.ngrok.io/testjob/build?token=JenkinsApiToken
```

上記、全て設定後、「Add webhook」ボタンをクリックします。