2016年5月23日月曜日

[Jenkins] Groovy で IRC Plugin を使い倒す

IRC 使ってますか?
Slack とか Chatwork とか HipChat ですか?

IRC 使ってないし関係ないか~と思った「あなた」、ちょっと待ってください。

今回は「"Groovy" で IRC Plugin を使い倒す」というわけで、
Groovy 使ってプラグインにアクセスしてごにょごにょしようという話です。
なので、今回は IRC Plugin で説明をしますが、これに限った話ではなく、他のプラグインにも応用できます。

ちなみに、Groovy のことをよく知らなくても大丈夫です。見よう見まねでなんとかなります。(私がそうですから)

IRC Plugin でできること
まずは、IRC Plugin がどういったものか紹介をします。

IRC Plugin では以下のことができます。
  • コマンド
  • ビルド後の処理で通知(ビルド前も可)

コマンド機能は今回は話のメインではないので軽く説明。
jenkins-bot build job now
のようにするとビルドを開始するなど、IRC から Jenkins を操作する機能です。

もう1つが、ビルド後の処理で IRC に通知する機能です。

ビルド後の処理に追加しますが、「高度な設定...」 の 「Notify on build start」を有効にするとビルド開始時にも通知してくれます。

こんな感じに通知が来ます。

IRC Plugin でできないこと
  • 任意のメッセージ送信
  • ビルド後/ビルド前以外での通知

ビルド後/ビルド前の処理で送れる内容はある程度決まっており、任意のメッセージ・フォーマットで送れないのでちょっと不便です。(出力の順番を変えたいとか、定期的に任意のメッセージを通知をしたいとか)

Groovy で潜在能力を引き出す
プラグインで提供されている機能以上の力を引き出すことができるのが、Groovy です。
Groovy から Jenkins の機能にアクセスする方法はこれまでも紹介してきましたが、今回はプラグイン機能にアクセスします。そして、任意のメッセージを出力できるようにしたいと思います。

プラグインにアクセスするには、「getPlugin」を使います。今回は IRC Plugin なので
「hudson.model.Hudson.instance.getPlugin("ircbot")」のようにアクセスします。
getPlugin にはプラグイン ID を指定します。プラグイン ID はプラグインの Wiki に記載されています。

プラグインが get できたら、そこからさらにプラグインの機能にアクセスをしていきます。
IRC PluginSource Code(Github) を開くと実装が見れるので、これを参考に機能にアクセスしていきます。
(他のプラグインでもだいたいソースコード見れます。)

以下が、Jenkins のシステム設定で設定した IRC コネクションを使って、任意のメッセージを送るスクリプトです。
def jenkins = hudson.model.Hudson.instance
def irc_channel="#kiwiirc-iutest"
def p = jenkins.getPlugin("ircbot")
if( p == null ) {
  println("require IRC Plugin")
  return
}
def c = p.imPlugin.provider.currentConnection()
if( c == null ) {
  println("IRC connection not found. please set to IRC configuration")
  return
}
c.send(irc_channel, "label assignment")
return
細かい説明は省きます。
(何をしているか知りたい人は、プラグインのソースコードと照らし合わせて確認してください。)

最後にこのスクリプトを各種 Groovy の設定にコピーすれば設定完了です。
以下は Groovy Label Assignment plugin の設定をしているところです。


そして、実際に実行したところがこちら。


皆さんも、是非お試し下さい。

各種タイミングでの Groovy 利用を可能にするプラグイン
最後に Groovy が使えるようになるプラグインを少し紹介して終わりたいと思います。
ではでは。

プラグインタイミング設定
Groovy Pluginビルドジョブ
Groovy Postbuild Pluginビルド後ジョブ
Groovy Label Assignment plugin実行ノード決定ジョブ
Matrix Groovy Execution Strategy Pluginマトリックス生成ジョブ
Global Post Script Pluginビルド後グローバル
Scriptler Pluginビルドグローバル
Groovy Events Listener Plugin各種イベントグローバル
etc...

1 件のコメント: