2013代表motです.
この記事はRCCアドベントカレンダーの4日目の記事です.
昨日はhoroamaくんでした.
さてRCCアドベントカレンダーも4日目になりました.今日はRCCでたまに働いているJenkinsおじさんについて紹介します.
Jenkinsの説明は各個人にググって頂きたいと思いますが,簡単に説明するとスクリプトとかにしたがって色々やってくれる素晴らしいおじさんです.
このJenkinsおじさんすごい便利で,適当にスクリプト書くだけでもめっちゃ動いてくれます.
ビルド(実行)するためにダッシュボードからビルドするボタンを押してもいいのですが,,,まあこれが非常に面倒です.
ですので一般的にはgithubやbitbucketにpushされたときにPOSTを投げるhookの機能を用いて叩き起こすわけですね.
しかしRCCのサーバは学内に配置されており,外部からのPOSTをいい感じに飛ばすのが非常に困難です.(ぶっちゃけ色々頑張ればできますが,セキュリティ
の関係や引き継ぎの関係で面倒です.)
そこでどうにかしてJenkinsおじさんを叩き起こしたい!そこで出てくるのがIRCなわけですね.
1. IRCのpluginを入れます
JenkinsにはIRCのPluginがありますのでまずいい感じに入れます.名前はJenkins IRC Pluginです.
2. pluginの設定をします
全体設定のシステムの設定にIRCの項目が増えていると思うのでいい感じに編集して下さい.
パスワードかかってる場合は高度な設定の中にあるので見て下さい.
ここまででJenkinsおじさんとIRCの接続ができるかと思います.今回は利用しませんが,jobの設定画面に後処理としてIRCへの通知ができるようになっているのでその辺りも設定するとビルド結果が覗けます.
システムの設定にあるIRCの設定の高度な設定内には「Command Prefix」なる項目があります.
これはIRC経由でJenkinsに対してコマンドを送るために利用する設定です.デフォルトで!jenkinsになっていると思います.
さてこのコマンドにはいくつかあるのですが,機能の一つの「!jenkins build」を利用することで指定したjobのビルドが行えます.
taskというjobがあるときには次のようなコマンドをIRCに投げればよいです.
!jenkins build task now
これでtask jobが動き出します.
つまりどうにかして先ほどの文章を投稿するbotをどこかにおいて,そいつに対してPOSTを送ることでJenkinsを叩き起こせます.
3. いい感じにBotを用意する
そこでIRCbotのコードを流用して何とかしました.ソースはこちらです.
IRCはCinch.POSTの待受としてSinatraを利用しました.$configはYAMLパースしています.属性名から推測して下さい.
RCCではBitbucketを利用しています.Bitbucketのhook postにはいろんな情報がpost-dataとしてやってくるのでいい感じにパースしてIRCに投稿するという形で実現させています.
!jenkinsコマンドの最後にはビルドパラメータが渡せるのでそこからbranch名を渡してbranchごとの処理ができるようにもなっています.
これをNitrous.IOで動かして運用しています.(今は止まっていますが)
あとはBitbucketのhookPostにサーバのアドレスを設定すると,IRCにメッセージが飛び,Jenkinsおじさんがそれを見てビルドするという一連の流れが形成できました.やった!
最初から外部にJenkinsおいたらよかったんじゃねという質問は受けません...
次はzitroneくんです