#はじめに
GitHubとJenkinsのWebhook連携に関する手順を記述します
##前提事項
- GithubのWebhookを使用します(Git Pluginは未使用です)
- Jenkinsはver. 2.150.2になります
#GitHubとJenkinsのWebhook連携
Webhookとはアプリケーションから別のアプリケーションに対してリアルタイムの情報提供を実現するための仕組みを指します
Webhookを使用することで以下のような処理が実現できます
- GitHubにpush/Pull Request等が行われた場合、Jenkinsにリクエストを発行する
- リクエストを受け取りJenkinsのジョブを起動する
#GitHubとJenkinsの設定
##APIトークン取得
Jenkinsで「Jenkinsの管理>ユーザーの管理>設定>APIトークン」を行い、認証に使用するAPIトークンを取得します
##GitHubのwebhook作成
GitHubで「Settings>Webhooks>Add Webhook」を行いWebhookを設定します
項目 | 内容 |
---|---|
Payload URL | Payload URLを入力します |
Content type | application/x-www-form-urlencodedを選択します |
Secret | 空白(GitHub Pluginを使用する場合は適宜設定します) |
Which events would you like to trigger this webhook? | デフォルトは「Just the push event. (プッシュされた時)」です。用途に応じて適宜設定します |
###Payload URL入力
入力形式は以下になります
http://[JENKINS_USERID]:[API_TOKEN]@[JENKINS_HOST]/job/[JOB_NAME]/buildWithParameters?token=[TOKEN_NAME]
例)http://jenkins_user:xxxxxxx@example.com/myjenkins/job/myjob/buildWithParameters?token=xxxxx
項目 | 内容 |
---|---|
JENKINS_USERID | JenkinsのユーザIDを入力します |
API_TOKEN | APIトークンを入力します |
JENKINS_HOST | Jenkinsのホスト名を入力します |
JOB_NAME | Jenkinsで起動するジョブを入力します |
TOKEN_NAME | トークンです。英数字記号を組み合わせて適宜作成します |
##Jenkinsのジョブ設定
Jenkinsでジョブを作成して各種設定を行います
項目 | 内容 |
---|---|
ビルドのパラメータ化 | パラメータの追加(文字列)を行います 名前に「payload」を入力します |
古いビルドの廃棄 | ビルドの保存日数やビルドの保存最大数を適宜設定します |
####Git
ビルド等を行うリポジトリ情報を入力します
項目 | 内容 |
---|---|
リポジトリURL | リポジトリURLを入力します |
ビルドするブランチ | ビルド対象のブランチを入力します(未入力時はすべてのブランチが対象になります) |
####Conditinal Step(Single)
指定したブランチのイベントのみにシェルスクリプトを実行する場合はConditinal Step(Single)を追加します
項目 | 内容 |
---|---|
Run? | Regular Expression Matchを選択します |
Expression | Expressionを指定します |
Label | ${ENV,var="payload"}を入力します |
On evaluation failure | Don't runを選択するとExpressionに合致するリクエストのみシェルスクリプトを実行します |
Builder | シェルの実行を選択するとシェルスクリプトを実行できます |
シェルスクリプト | ジョブ起動時に実行するスクリプトを記述します |
#####Expression指定方法
GitHubのwebhookを作成するとGitHubにpush/Pull Request等の操作が行われた場合にJenkinsにリクエストが発行されます。
ExpressionにはトリガーとなるPayload内の文字列を入力します。
例 | 説明 |
---|---|
.*"ref":"refs/heads/develop".* | developが操作された場合にシェルスクリプトを実行する |
.*"ref":"refs/heads/feature*.* | すべてのfeatureで操作された場合にシェルスクリプトを実行する |
#参考情報