プラグイン書いてみた
とりあえずものはこれ使い方はREADME-JPに書いてみてる
この記事では詰まったところを書いてみる。
迷い方も書いてみる
だいたいの経緯
- ジョブを全部スクリプトにしよう
- Slackへの通知もスクリプトにしたぞ!
- あれ?Slack飛ばないことあるやん…
- あ…gitのサーバー死んでるスクリプトまで到達してない…
- 全部のジョブに設定するのミスもありそうだしつらいな…
- じゃあプラグイン書くか…
ほかにglobal post script pluginなんかwindowsだと動かないとかありました。
テンプレート作るのは簡単だった
問題はどうやって書くか…
今回のゴールは全てのジョブが終わったということを知ることができれば大隊解決しそうでした。
その場所を探すためにExtensions Indexからそれっぽいものを探しました。
ええ、探しました!(ドキュメントが多分少なくてもはや探すしかねぇ…)
で、GlobalPostScriptのコードを読んでRunListenerのOnCompletedメソッドがそれにあたりそうだと思いました。
なのでログにHelloとか出すプラグイン書いてみて実験したら確かにそういう風に動くことがわかりました。
(pipelineとフリースタイルのみが今回は対象なのでそれだけテストしました。)
じゃあ後は書くだけだ!Slackへのポストや設定はとりあえずSlack Pluginに任せるとして。
かきかきしました。(詳細はコードよめば大体わかると思います。)
次にぶつかったのは…どうやってこれ設定画面作るん・・・あとどうやってそのパラメータ受け取るん・・・という部分だったのでそれを次に説明します。
設定画面の作り方
なんかjellyとかいうの使って作るらしい…ほかのプラグインからディレクトリ構造はわかりました。
多分resources以下にそれっぽいファイルを作ればいいはずです!
で、それを受け取る方法はいくつかあるようですがとりあえず以下のような形でDescribable<クラス名>形式をほかのプラグインからパクって採用しました。
public class GlobalSlackNotifier extends RunListener> implements Describable
そうすると内部にDescriptorImplというDescriptor<クラス名>を継承したクラスを作りそこで設定を読み込む感じになるみたいです。
で・・・多分ここにメンバ変数いれれば自動でなんかいい感じで変数入れてくれるのかなーと思った
思ったけどだめだった…
このconfigureというメソッドで読み込みを定義しないといけなかった
@Override
public boolean configure(StaplerRequest req, JSONObject formData) throws Descriptor.FormException {
configure(formData);
save();
return super.configure(req, formData);
}
これで無事設定できる!!と思ったら…今度は設定が保存されない…なんで…と思ったらget設定名というメソッドを定義しないとだめらしかった…
だからいっぱいgetXXX書いたVisual Studio Codeさん有能すぎる
これでなんとかプラグインが書けたのでとりあえずgithubに公開した次第。
ドキュメント書いてプラグイン乗っけてほしいなって思ってるけどどうやって公開申請するんだろう…。
おまけ
ちなみに依存関係は多分この辺に書くといいっぽい
よくわかってないけど
https://github.com/Marimoiro/GlobalSlackNotifierPlugin/blob/master/pom.xml#L19
https://github.com/Marimoiro/GlobalSlackNotifierPlugin/blob/master/pom.xml#L70-L76