スクリプトコンソールからスレイブにスクリプト送ってみた

最近、すっかりJenkinsさんとご無沙汰なようなフリをして、実は邪道Jenkinsのやり方を模索していたりします。やってみたいことは、Jenkinsによるリモートジョブ実行とリモートサーバの監視などなど。「や、それならHinemosとかZabbix使えよ」とか言わない。


ジョブ実行はなんだかんだ言ってJenkinsさんの得意分野なので、じゃあ監視系はどうあるべきか?を考えてみた。ひとつは、[twitter:@akiko_pusu]さんが得意(?)にしている「外部ジョブの監視」。
外部ジョブの監視も使ってみよう!


これは、監視される側から監視して欲しい情報をJenkinsさんに送りつけるので、厳密な意味で監視と言えるのか疑問が残る(死活監視とか難しいよなと)。それと「外部ジョブの監視」はビルドの後処理とか仕込めないので、監視結果の通知とかする場合、もうひとつ知恵を絞らないといけなそう。
んで、もいっこ考えたのは、被監視サーバをJenkinsさんのスレイブにしちゃうこと。ジョブ管理とかもやろうと思っているので、スレイブにしとくのが無難ちゃぁ無難。ここで気にしたのはスレイブ側でどんなジョブを実行させるかな?って事。


スレイブ以外余計なモノ入れたくないなと思ったので、標準でできるDOSコマンドやシェルスクリプトを考えてみた。Windows系のスレイブしか用意できなかったので、DOSコマンド叩かせてみようとしたら、叩くコマンドによってはスレイブ側の権限不足でダメって言われた。:-(
「じゃあ、Groovyかな」と思ったけど、Groovyプラグインだとスレイブ側にも別途Groovy入れとく必要があるみたい。JenkinsにGroovy入っているのに、わざわざ別にGroovy入れるのは何かヤダなと(そもそもやりたい事はスクリプトコンソールでできる程度の内容だったし)、Groovyをインストールする手間を惜しんでみたわけ。


もともと、スレイブの管理画面から特定のスレイブに対してスクリプトコンソールを使えるんだから「その辺も含めてスクリプトコンソールで制御できんじゃね?」と思って試してみたら、意外とあっさりできた。さすがはJenkinsさん、相変わらず期待を裏切らないw


とりあえず、スクリプトコンソールで試してみたコードはこんなやつ。

import hudson.util.RemotingDiagnostics
 
jenkins.model.Jenkins.instance.nodes.each {
  computer = it.toComputer()
  if (computer.isOnline()) {
    println RemotingDiagnostics.executeGroovy("'ipconfig /all'.execute().in.text", computer.channel)
  }
}

でもって、実行結果はこんな感じ。


RemotingDiagnostics.executeGroovy()に渡すGroovyスクリプトがGroovyっぽくないけど、最低限確認したかったことはできた。あとは、これをスクリプトコンソールからじゃなくて、ジョブから実行させたい。
さしあたってはJenkins CLIを自分自身に対して実行させるジョブを作ってみるところから始めようかねぇ。


ps.
[twitter:@ikikko]さんのエントリとかみてると、Jenkins自体のセルフメンテナンス用に定期的にスクリプトコンソールで使えるスクリプトを実行したいって用途はありそうなんだけどなぁ。すでに、そうゆうやり方確立されてないのかな?|д゚)チラッ
#ちょっとManage Script Pluginとか気になる。