LoginSignup
7
6

More than 5 years have passed since last update.

Jenkinsプラグインを実装してリリースするまで

Last updated at Posted at 2016-06-11

概要

Dead Man's Snitch というシンプルな死活監視サービスをJenkins Jobの監視に使っていて、今まではJobが成功したらcurlで通知するという処理を ./job.sh && curl https://nosnch.in/abcde12345 みたいに書いてたんですが、監視はJobと独立させたかったので、pluginとしてビルドが成功した時にDead Man's Snitchに通知するpluginを作りました。そのプラグインの実装から jenkins-ci.org でホスティングしてもらうまでの道のりです。

結論から言うとけっこう大変でした...w

実装

基本はJava + Mavenです。 JVM系の他の言語やGradleでも出来るっぽいです、たぶん。

Plugin tutorial

まずはこちらを参考にJava, Mavenの環境設定をして雛形のプロジェクトを作ります。HelloPlugin的なプラグインができているはずです。この状態で mvn hip:run を打てばすぐにローカルでJenkinsが動きます、思ったよりかなりお手軽でした。

ExtentionPoint

Jenkins上の何かしらの処理を拡張するためにhudson.ExtentionPointというマーカーインタフェースを実装します。一覧ページを見て分かるように先人たちが色んな処理に対してExtensionPointを実装した抽象クラスを作ってくれているので、何となく自分がやりたいことと同じような処理をやっているPluginのソースコードを読んで真似ることをおすすめします。多すぎて適切な抽象クラスを自分で見つけ出すのは大変なので...

自分の場合はビルド後の通知処理なのでhudson.tasks.Notifierというクラスを継承して作りました

Jelly

設定のUIは.jellyという拡張子のテンプレートエンジンを使います。
基本は上記で作ったExtentionPointのインスタンスが一つのビルドに対しての設定になるっぽいので、インスタンス変数として設定したいフィールドを定義します。で、そのクラスと同じパッケージ構造ディレクトリをsrc/main/resourcesに作ってそこにconfig.jellyという名前のファイルを作ると、それがそのプラグインの設定用のUIだと判定されるようです。(もっと詳しいことを知りたい場合は公式で、、Global settingとかHelpの出し方とかi18nについてとか)

リリース

Hosting Request

で、一通り実装が終わったらJenkinsのJIRAのアカウントを作ってHosting Requestというissueを出します。ここでコードレビューとか既存の~~プラグインでも出来るんじゃない的なレビューとかをしてもらいます。自分はRequestを出してから最初の返信が来るまで10日かかったので急いでる人は注意してください。

このリクエストが通ったらこんな感じでPluginのGitHubのレポジトリがForkされて自分のGitHubアカウントがorg: jenkinsciのメンバーに招待されます。(GitHub以外にレポジトリを置いてた場合どうなるかはよく分かりません)

Wikiを書く

wikiのPluginsのページに自分のpluginのページを作成します。最低限plugin-informationexcerptと、どのカテゴリに属するかのTag付けが必要です。

Release

この状態で、forkされた方のリポジトリをreleaseします。cloneしてローカルでmvn release:prepare release:performすればOK。認証情報はJenkins JIRAのものと同じです。

成功したらリリース完了です。ここに自分のプラグインのディレクトリが出来ているはずです。
また、4時間周期でPlugin一覧リストはリフレッシュされるようなので、4時間後にJenkinsのPlugin一覧ページに出ててたらようやく実際Jenkinsにインストールが可能になります。

スクリーンショット 2016-06-12 2.39.23.png

お疲れ様でした。。!

7
6
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
7
6