Nakajijapan

生きるのに必死です。

Jenkinsでcommit Statusを操作する

自分のサービスでテストを行うときは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を設定
    • Build Triggers 2
      • Project to build: CommitSTatusUpdate
      • Trigger when build is failed
      • parameters
        • commit_status=failureを設定

小ジョブ作成(CommitStatusUPdate)

  • ビルドのパラメータ化

    • 受け取るパラメータの設定
      • 名前:commit_status
      • デフォルト値:success
  • ソースコード管理 親ジョブと同じ設定にする

  • シェルの実行 コミットステータスの変更を行う

1
2
3
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に渡します

最終的に以下のようにチェックがついてたりしたら出来ています

commit status

これでPull Requestベースでの開発ができて、テスト結果が最新コミットにチェックがつくので安心安全にメインブランチにマージができるようになります。