HEARTBEATS

そのジョブのチャット通知 Rundeckでもできますよ!

   

こんにちは。斎藤です。

以前、「Rundeck - cronから移行しやすいジョブスケジューラを使ってみよう」というエントリを起こしました。ご覧になった方もいらっしゃるかと思います。その際に「通知はチャットに流して欲しいよな」とか「チャット通知ができるのが今の主流だよね」と思った方がいらっしゃるはずです。

そこで、今日はRundeckのプラグインと、その1つであるHipChatプラグインをご紹介します。

※CentOSは6.6、Rundeckは2.6.0のSnapshot(Vagrant VM), Rundeck HipChat Pluginは1.5.0とします。

※最後にお知らせがあります

いろいろあるあるプラグイン

Rundeckはそれそのもの自体はジョブスケジューラとして完成度が高い製品であると、私は考えています。しかし、本体だけだと物足りなかったり、作り込みが必要な部分が少なからずあります。しかし、再利用する可能性が高いもの...例えばチャット通知...は、共通化したいですよね。

そこで、Rundeckの公式サイトを見ますと、Pluginsのページによく使いそうなプラグインが取り上げられています。この中に、当社も利用しているチャット用アプリケーション"HipChat"用のプラグインがあるではないですか!

また、Rundeckの公式サイトには取り上げられていませんが、Slackのプラグインもあります。探せばほかにもあることでしょう。

Rundeck HipChat プラグインの紹介

本題のRundeck HipChat プラグインをご紹介します。

HipChatプラグインには、次の特徴があります。

  1. ジョブの開始・正常終了・異常終了を通知することができます。
  2. HipChat Serverを独自に立てているユーザでも使えるようエンドポイントを指定することができる。
  3. プロジェクト毎に違う設定ができる(マルチプラットフォーム的に使える)。

プラグインを追加した後、後述する初期設定を行い、その後はジョブ毎に通知設定を行えば利用可能です。

added_hipchat.png

ジョブの通知を有効に設定するのは非常に簡単です。初期設定だけ、次の節で説明します。

Rundeck HipChat プラグインを使ってみよう

実際にRundeck HipChat プラグインを使ってみましょう。今回は、Rundeckのインストールの手間を省くため、公式サイトで取り上げられているVagrantfileを利用してみます。

あらかじめ、手元にgit, Vagrantが動作可能な環境を整えてください。なお、gitとVagrant自体の使い方の説明は省略します。また、URIはVagrant VMを利用したときのホスト名となっています。環境により、読み替えてください。

では、コマンドベースで手順を確認して行きます。まずはRundeckサーバを立ち上げます。

cd (作業ディレクトリ)
git clone git@github.com:rundeck/anvils-demo.git
cd anvils-demo
vagrant up   # 構築が終わるまで数十分待つ

以上が終了したら http://192.168.50.2:4440/ にアクセスします。ユーザ名とパスワードはデフォルト(admin/admin)です。ログインできれば、Rundeckサーバが正常に稼働していることになります。なお、この段階でHipChatを含めた各種プラグインもインストールされますが、HipChatプラグインはバージョンが古く次の手順で入れ替えることとなります。注意してください。

続いて、HipChatプラグインをインストール(更新)します。

vagrant ssh   # この先はVM内での作業
sudo su -
cd /var/lib/rundeck/libext
mv rundeck-hipchat-plugin-1.0.0.jar /tmp   # 古いHipChatプラグインをバックアップ Vagrantで構築していない場合は不要な手順
wget http://search.maven.org/remotecontent?filepath=com/hbakkum/rundeck/plugins/rundeck-hipchat-plugin/1.5.0/rundeck-hipchat-plugin-1.5.0.jar   # 最新版がリリースされている場合はそのアドレスに書き換える
service rundeckd restart   # プラグインを読み込むためには再起動が必要

再起動には、数十秒〜1分程度時間がかかります。その後、次のページを開いてプラグインがインストールできたことを確認してください。

http://192.168.50.2:4440/menu/plugins?project=anvils

enabled_hipchat.png

HipChatの通知対象のルーム(チャット部屋)情報を取得します。Rundeckサーバ上での作業を中断し、HipChatサーバ上での作業に移ります。

まず、HipChatのWeb版のページにて、"Rooms > (通知を流したいルーム)"を開きます。ここで"API ID"の番号を控えます。続いて、左側の"Tokens"リンクをクリックします。"Tokens"のリンクがでない場合は、"Owner"に表示されている人(権限)にHipChatの操作を代行してもらってください。

hipchat_room_info.png

トークン作成ページに遷移します。Labelには"Rundeck"などと、チャットのタイムライン上に流れるユーザ名として適切なものを入力し、"Create"をクリックします。

hipchat_room_token1.png

そうすると、以下の通りトークンが生成されます。こちらを控えます。

hipchat_room_token2.png

複数ルームに流す場合は、ルーム毎に実施してください。

以上で、HipChatサーバ上での作業は終了し、Rundeckサーバ上での作業に戻ります。

初期設定の最後は、プロジェクトの設定ファイルの編集です。以下のページを開き、設定の編集画面を開きます。

http://192.168.50.2:4440/resources/editProjectConfig?project=anvils (ファイルを直接編集する場合は /var/rundeck/projects/anvils/etc/project.properties をエディタで開く)

その中に、次の行を追加します。

project.plugin.Notification.HipChatNotification.apiAuthToken=(ルームのAPI ID):(ルームのトークン), (ルームのAPI ID):(ルームのトークン), (ルームのAPI ID):(ルームのトークン)...
project.plugin.Notification.HipChatNotification.apiVersion=v2
project.plugin.Notification.HipChatNotification.hipchatServerBaseUrl=(HipChat Serverのアドレス)

project.plugin.Notification.HipChatNotification.apiAuthToken は、通知を流すルームの情報を記述します。ジョブ毎に通知を流すルームを変える場合でも、ここではRundeckが利用する全てのルームを列挙します。

project.plugin.Notification.HipChatNotification.apiVersionv2 と記載してください。

project.plugin.Notification.HipChatNotification.hipchatServerBaseUrl は、通常は設定自体を施す必要はありません。HipChat Serverを独自に立てて利用している方 のみ 、HipChatサーバのエンドポイントを記述してください。

各項目の詳細は、プラグインをインストールしたときに確認したページに記載されています。あわせて確認してみてください。

以上で初期設定は終了です。

通知のテストの際には、コマンドを実行しても影響がないジョブを改めて作成し、実行します。ジョブ作成時の通知先には以下の通り、HipChat通知の有効化+通知したいルームのAPI IDの設定を忘れずに行ってください。

added_hipchat.png

実行後、HipChatの対象のルームに実行結果が流れてくれば成功です。お疲れさまでした!

hipchat_timeline.png

まとめ

いかがでしたでしょうか。ここまで、Rundeckにはプラグインシステムがあり、その中にあるHipChatプラグインの使い方を紹介しました。説明自体は長めなのですが、実際やって頂くとあっさり終わる程度の難易度です。

実際の通知は、異常終了時のみで充分ではないかと思います。稼働初期やよほど重要なものは別として、ジョブのスタートと正常終了が常に流れ続けますと、通知に慣れきってしまったり、流量が多くなって無視してしまいかねないからです。

それでは皆様、ごきげんよう。

お知らせ: YAPC::Asia Tokyo 2015 トークへの投票をお願いします!

今年で一旦最後の開催になる、YAPC::Asia Tokyo 2015にて、「辛いことをやめる!から始まる業務改善とInfrastructure as Code」というタイトルでトークに応募しています。

このトークでは、ITインフラを取り巻く環境の変化、特にIaaSが普及したことによる業務内容の変化に対して、ハートビーツの社内でどのような取り組みを行ったかをお話ししたいと考えています。その中で、成功した話ばかりでなく、いろいろな失敗とその対策を含めて、組織全体をどのように変えて行ったのかに焦点を当てる予定です。

「組織での開発のやり方を変えたい」「部署横断的に業務改善に取り組んでみたい」そして「実際に取り組んでいるけどほかはどうやっているのだろう」と考えている方にお話しできたら幸いです。

このトーク、もし聞いてみたい・興味がある方は、ぜひプロポーザルをTwitterでシェア・Facebookのいいね!・はてブして頂けますと大変嬉しいです。ソーシャルメディアでのシェア数が採択の基準の一つになるようです。

どうぞよろしくお願いします。