1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JenkinsからGitHubのApiを操作するJenkins Shared Library書いてみた

Posted at

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 さんすごいなってなってました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?