Ruby - Githubのpull requestページに、テスト結果を表示するJenkisの設定 - Qiita [キータ]の続きです。
拙作のjoker1007/github-commit-status-updaterというgemがあったのですが、何度かPull Requestを頂きまして、更に便利になりました。
元々はコマンドラインからコミットハッシュを指定してステータスの更新するだけのツールだったのですが、関連URLの設定、descriptionの設定、エンドポイント変更によりGithub Enterpriseでも利用可能、という感じになってます。
自分は何もやってないのに、すげー便利になってgithubすげーって感じです。
本当にありがとうございます。
それに伴って、Jenkinsの設定も進化したので共有しておきたいと思います。
具体的には、よりパラメータ化する事で汎用化しました。
Parameterized Triggerを使ってテスト結果をパラメーターに仕込んで更新用のジョブをキックするやり方は基本的に変わっていません。
commit status 更新ジョブの設定内容
まず適当な名前でJobを作ります。
今回はCommitStatusUpdateという名前とします。
- ビルドのパラメーター化にチェック
- 以下のパラメーターを定義する
- COMMIT_STATUS - 文字列
- UPDATE_COMMIT - 文字列
- TARGET_URL - 文字列
- REPOSITORY_NAME - 文字列
- gitリポジトリのURLをgit://github.com/joker1007/github-commit-status-updater.gitにセット
- (オプション) rbenvの設定を行う
以下、ビルド設定
- ENV inject PluginでPATH=${WORKSPACE}/bin:${PATH}と環境変数を追加する
- シェルの実行で以下のコマンドを実行する
bundle install --path .bundle
github-commit-status-updater ${COMMIT_STATUS} -r ${REPOSITORY_NAME} -s ${UPDATE_COMMIT} --oauth-token TOKEN --target_url ${TARGET_URL}
TOKENは各自書き換え。
最終的にコミット対象のハッシュとリポジトリ名さえ分かれば問題無いので、参照するリポジトリはgemのリポジトリでオッケーです。
もしOAuthのトークンがプロジェクト毎に異なるなら、ここもパラメーター化しておきます。
メインのテスト実行ジョブの設定内容
成功時のトリガー設定
- ビルド後の処理にParameterized Triggerを追加。(要 Parameterized Trigger Plugin)
- CommitStatusUpdateをキックする
- Trigger when build isを
Stable or unstable but not failed
に設定 - パラメーターを追加し、predefined parameterに以下の内容を追加する
commit_status=success
UPDATE_COMMIT=${GIT_COMMIT}
REPOSITORY_NAME=github_organization_name/repository_name
TARGET_URL=${JENKINS_URL}job/${JOB_NAME}/${BUILD_NUMBER}
失敗時のトリガー設定
- ビルド後の処理にParameterized Triggerを追加。(要 Parameterized Trigger Plugin)
- CommitStatusUpdateをキックする
- Trigger when build isを
Failed
に設定 - パラメーターを追加し、predefined parameterに以下の内容を追加する
commit_status=failure
UPDATE_COMMIT=${GIT_COMMIT}
REPOSITORY_NAME=github_organization_name/repository_name
TARGET_URL=${JENKINS_URL}job/${JOB_NAME}/${BUILD_NUMBER}
build pipelineを工夫して、一回コミットを受けた後でジョブを分岐すれば、テスト開始前にpendingステータスに設定しておく事も可能です。
pull requestでテスト結果を見て落ちてれば、すぐにJenkinsのビルドページに飛べる。
ジョブも複数ジョブで使い回せる感じになって、より良い感じになりました。