背景
SlackでChatOpsっぽいことしたくて、
Hubotを使ってみたよ、というメモ
hubot とは
HubotはJavaScriptで実装されたチャットボット作成フレームワーク
チャットボットを作成するにあたり、
Javascriptをガリガリ書かないといけないわけではなくて、
任意のスクリプト(Python, shell, その他 ...)
を実行させることもできる
向いてそうなこと
- チャットでの問いかけで、何か決まった処理を実行
- 決まった日時に、何か決まった処理を実行
結果を Slackで通知
する
ヤマト運輸さんのチャットボット
頑張れば、こういう高度なやつも作れそうだが、
こういうのを実装するのには不向き?
hubotを使って何をやりたいか
- 普段何気なくチェックするようなものをボットにチェックさせたい
- ついでにSlackで通知させたい
チャットで楽したい
今回作ってみたもの
環境構築について
Dockerの入ってる環境で docker-compose up -d
する
Dockerfile について
- OS は node:17.8.0-bullseye
- 必要なパッケージを入れて、
- hubotユーザを作って、
- sudoできるようにして、
- appディレクトリを作って、
- hubotユーザで hubot を初期化する
- その後、 docker-entrypoint.sh を実行して、
- hubot を立ち上げる
[memo]
OS は 18.0.0-alpine3.14 にしようと思ったが、
python とか色々入れるので、
node:17.8.0-bullseye にした
hubotユーザを作っているのは、
rootユーザでhubotを立ち上げたら、怒られるため
docker-entrypoint.sh について
docker-entrypoint.sh
は
docker-entrypoint.d 以下のスクリプトを順に実行する
01_copy-scripts.sh
は
/home/hubot/app/tmp_scripts/ 以下のファイルを
/home/hubot/app/scripts/ 以下にコピーして、
hubotユーザ
の所有にする
02_pip-install.sh
は
requirements.txt に書いたパッケージをインストールする
[memo]
1. ホストの ./app/scripts を
コンテナの /home/hubot/app/tmp_scripts にマウントする
2. /home/hubot/app/tmp_scripts/ のファイルを
/home/hubot/app/scripts/ にコピーする
3. hubotユーザに所有にする
という回りくどいことをやっているのは、
"コンテナのユーザを、ホストが知らなくてもいいようにする" ため
ホストの ./app/scripts を
コンテナの /home/hubot/app/scripts に
直接マウントした場合、
・ホストがrootユーザの場合、
コンテナでパーミッションエラーになり、ファイルが開けなくなる
・ホストのhubotユーザと、コンテナのhubotユーザの
UIDが一致していない場合に、
コンテナで知らないユーザのファイルが見えて、気持ち悪いことになる
(でも、もっとスマートな方法はあるかも?)
docker-compose.yml について
ホストの8080を コンテナの8080に フォワードしてる
サンプルのスクリプトについて
下記3つのスクリプトを作成している
hello-sh, hello-py コマンドは、
shellscript, Python で hello するだけのスクリプト
coin-rate コマンドは、
ticker の結果を整形して、現在のコインのレートを表示するスクリプト
[memo]
# ticker のレスポンス
curl -s -G -d symbol=ETH https://api.coin.z.com/public/v1/ticker | jq
{
"status": 0,
"data": [
{
"ask": "360211",
"bid": "360031",
"high": "363560",
"last": "359940",
"low": "353560",
"symbol": "ETH",
"timestamp": "2022-05-01T10:23:30.746Z",
"volume": "1154.6563"
}
],
"responsetime": "2022-05-01T10:23:31.740Z"
}
コメント