hubotコンテナについて

背景

SlackでChatOpsっぽいことしたくて、
Hubotを使ってみたよ、というメモ

hubot とは

HubotはJavaScriptで実装されたチャットボット作成フレームワーク

チャットボットを作成するにあたり、
Javascriptをガリガリ書かないといけないわけではなくて、
任意のスクリプト(Python, shell, その他 ...) を実行させることもできる

向いてそうなこと

  • チャットでの問いかけで、何か決まった処理を実行
  • 決まった日時に、何か決まった処理を実行

結果を Slackで通知 する

ヤマト運輸さんのチャットボット

チャットボットとはなんですか? | ヤマト運輸

頑張れば、こういう高度なやつも作れそうだが、
こういうのを実装するのには不向き?

hubotを使って何をやりたいか

  • 普段何気なくチェックするようなものをボットにチェックさせたい
  • ついでにSlackで通知させたい

チャットで楽したい

今回作ってみたもの

環境構築について

Dockerの入ってる環境で docker-compose up -d する

Dockerfile について

Dockerfile | GitHub

  • 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 について

docker-compose.yml | GitHub

ホストの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"
}

コメント

タイトルとURLをコピーしました