Jenkinsでcommit statusを操作する
( ci )自分のサービスでテストを行うときはTravisCIに任せて自動で作業させているのですが、基本はソースをオープンにしないといけないので 自社サービスに利用する訳にはいきません。そこでJenkinsを利用して同じような仕組みを作成しました。
仕組みとしはcommit status
を操作するためのGitHubのAPI利用してPull Requestがきたらジョブを走らせるようにします。
監視用の親ジョブ作成
-
ソースコード管理
- Gitを選択
- Repository URL(テスト対象のものを入れる)
- ex) git@github.com:paperboy-petit/user-app.git
- Branch Specifier()
*/master
,*/release
を記述する- 高度な設定のChoosing strategy
Inverse
を選択する
- これで
master
,release
意外のブランチを監視対象にできる
-
ビルド環境
- テストに必要な環境の設定なので適宜設定する
-
ビルド
- ここでテストする処理を実行
-
ビルド後の処理
- ビルド後の結果をトリガーにしてパラメータを小ジョブに渡す設定行う。フォームにはいかの用に項目設定する
- Build Triggers 1
- Project to build:
CommitSTatusUpdate
- Trigger when build is
stable or unstable but not failed
- parameters
commit_status=success
を設定
- Project to build:
- Build Triggers 2
- Project to build:
CommitSTatusUpdate
- Trigger when build is
failed
- parameters
commit_status=failure
を設定
- Project to build:
小ジョブ作成(CommitStatusUPdate)
-
ビルドのパラメータ化
- 受け取るパラメータの設定
- 名前:commit_status
- デフォルト値:success
- 受け取るパラメータの設定
-
ソースコード管理 親ジョブと同じ設定にする
-
シェルの実行 コミットステータスの変更を行う
curl -H 'Authorization: token hogehogehogehogheohogehoge' \
--data "{\"state\":\"${commit_status}\", \"target_url\":\"${BUILD_URL}\"}" \
https://api.github.com/repos/paperboy-petit/user-app/statuses/${GIT_COMMIT}
- ビルド後の処理 お好みでIRCに渡します
最終的に以下のようにチェックがついてたりしたら出来ています
これでPull Requestベースでの開発ができて、テスト結果が最新コミットにチェックがつくので安心安全にメインブランチにマージができるようになります。