JenkinsからGitHubのApiを操作するJenkins Shared Library
これ↓
https://github.com/Marimoiro/jenkins-github-api-wrapper.git
なにこれ
JenkinsからGitHub Apiを叩いて、いくつかの操作をできるようにしたライブラリです。
JenkinsからPullRequest作るときなどにcurlやらhttprequestやらに頼っていて毎回毎回コードが変わるのがいいかがんやめたくなったので作りました。
どれくらい需要がある変わらないのですが、需要あったらLGTMしてくれるとうれしいです。
使う場合はリポジトリにStarくれると僕のテンション的に嬉しいなー
できること
- リポジトリ
- リポジトリの作成 / 削除
- ラベルの作成 / 削除
- コミット間の差分を取得
- PullRequest
- 作成
- マージ
- コメント
特にPullRequestの能動的な操作とリポジトリの作成がいい感じに出来なかったのでそこを解決するために作っています。
特に PullRequestを作成する や リポジトリのラベル作る あたりが出来ないなぁと思ったので作っています。
なので、PR周りの処理の網羅率は高いですが、その他はあまり力を入れていないです。
機能セット的には自分がJenkinsでよく使うなーとかたまに使うなーとかあったら便利かなーを搭載しています。
(ほしいのあったらissueにでも書くかPR出してね)
pipeline-github-plugin との違い
PRでトリガーするタイプのジョブならgithub-pluginを使うべきです。
Jenkinsが能動的にGitHubのApiを使うようなシナリオを考えています。
実装について
GitHub API for Java
のラッパーです。
元々Jenkinsのgit pluginのバックエンドなので引っ張り出してきた形です。
なので各オブジェクトはraw
というオブジェクトを持っているのでそれで生データにアクセスできます。
使い方
こんな感じで、リポジトリのオブジェクトにアクセスできます。
repo = marimoiro.github.Repository.find(https://github.com/Marimoiro/jenkins-github-api-wrapper.git)
そこからこんな感じでPullRequest作ったりできます。
pr = repo.createPullRequest(タイトル, head, base, body)
pr = repo.createPullRequest('テスト', 'pull-request-test', 'main', 'テスト中\nテスト中')
他に必要であればJenkinsのグローバル設定に依存する形で大本のインスタンスの取得もできます。
def github = GitHubClient.find(host, 設定名)
def github = GitHubClient.find(); // デフォルトだとapi.github.comの最初の設定を持ってきます
APIDocumentは簡単ですがこちらにおいています。
jenkins-github-api-wrapper
サンプル一覧が、こちらです。
samples
注意事項
githubに対して正当なアクセス権があると普通に何でもできるので、気をつけてください。
基本的にはLoad implicitlyにチェックはせずに必要なジョブでだけ読み込む形がいいと思います。
感想
GitHub APIの仕組みに詳しくなれた
結構知らなかったGitHub APIの機能がへーこんなこともできるんだ!と勉強になりました。
Jenkinsの仕組みに詳しくなれた
Jenkinsのオブジェクトは基本Serializableである必要があるのですが、それについてのちゃんとした理由や、実装うまくいかないとどうなるの?がわかって面白かったです。
このライブラリのオブジェクトは基本的にSerializableを実装しています。
あと Kohsuke Kawaguchi さんすごいなってなってました。