はじめに
本記事はlaofoe/hubot-matteruserを用いてRSSフィードをmattermostに投稿するhubotを作成する手順を示したものです.
ハマったところ
hubot rssで検索するとはじめに出てくるhubot-rss-readerですが,このIssueにハマって動作させることができません.
ERROR TypeError: Cannot read property 'then' of undefined
at run (/usr/src/hubot-matteruser/node_modules/hubot-rss-reader/scripts/hubot-rss-reader.coffee:74:7, <js>:94:35)
at Brain.<anonymous> (/usr/src/hubot-matteruser/node_modules/hubot-rss-reader/scripts/hubot-rss-reader.coffee:83:5, <js>:103:14)
at Object.onceWrapper (events.js:286:20)
at Brain.emit (events.js:203:15)
at Brain.mergeData (/usr/src/hubot-matteruser/node_modules/hubot/src/brain.js:157:10)
at Command.callback (/usr/src/hubot-matteruser/node_modules/hubot-redis-brain/src/redis-brain.js:54:21)
at normal_reply (/usr/src/hubot-matteruser/node_modules/redis/index.js:726:21)
at RedisClient.return_reply (/usr/src/hubot-matteruser/node_modules/redis/index.js:824:9)
at JavascriptRedisParser.returnReply (/usr/src/hubot-matteruser/node_modules/redis/index.js:192:18)
at JavascriptRedisParser.execute (/usr/src/hubot-matteruser/node_modules/redis-parser/lib/parser.js:574:12)
at Socket.<anonymous> (/usr/src/hubot-matteruser/node_modules/redis/index.js:274:27)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Dockerfileの修正
laofoe/hubot-matteruserの一部を修正します.
hubot-rss-readerではなく,派生版のhubot-rss-rolfモジュールを使います.
これによりハマりポイントを回避できます.
FROM node:10
ARG hubot_owner
ARG hubot_description
ARG hubot_name
RUN useradd -m -s /bin/bash hubot-matteruser
RUN mkdir -p /usr/src/hubot-matteruser
RUN chown hubot-matteruser:hubot-matteruser /usr/src/hubot-matteruser
RUN chown hubot-matteruser:hubot-matteruser /usr/local/lib/node_modules/
RUN chown hubot-matteruser:hubot-matteruser /usr/local/bin/
WORKDIR /usr/src/hubot-matteruser
USER hubot-matteruser
RUN npm install -g yo
RUN npm install -g generator-hubot
RUN npm install -g hubot-redis-brain #追加
RUN echo "No" | yo hubot --adapter matteruser --owner="${hubot_owner}" --name="${hubot_name}" --description="${hubot_desciption}" --defaults \
&& sed -i '/heroku/d' external-scripts.json
RUN npm install hubot-rss-rolf --save #追加
RUN npm install coffee-script@">=1.10.0" --save #追加
RUN rm hubot-scripts.json
CMD ["-a", "matteruser"]
ENTRYPOINT ["./bin/hubot"]
EXPOSE 8080
external-scripts.jsonの作成
docker-compose.ymlと同じディレクトリにexternal-scripts.jsonを作成して以下を記述してください.
デフォルトの全てのモジュールが含まれているので不要な物を削除してください.
[
"hubot-diagnostics",
"hubot-help",
"hubot-google-images",
"hubot-google-translate",
"hubot-pugme",
"hubot-maps",
"hubot-redis-brain",
"hubot-rules",
"hubot-shipit",
"hubot-rss-rolf"
]
docker-compose.ymlの修正
hubot-brainを使用する必要があるので
version: "3.7" #変更
services:
hubot-matteruser:
build:
context: .
args:
hubot_owner: <CHANGEME>
hubot_name: <CHANGEME>
hubot_description: <CHANGEME>
restart: always
user: hubot-matteruser
ports:
- "8080:8080"
environment:
- MATTERMOST_HOST=<CHANGEME>
- MATTERMOST_GROUP=<CHANGEME>
- MATTERMOST_USER=<CHANGEME>
- MATTERMOST_PASSWORD=<CHANGEME>
- MATTERMOST_LOG_LEVEL=info
- MATTERMOST_USE_TLS=false
- MATTERMOST_TLS_VERIFY=false
- MATTERMOST_WSS_PORT=80
#以降追記
- REDIS_URL=redis://mm-hubot-brain:6379
- HUBOT_RSS_INTERVAL=3600
- HUBOT_RSS_USERAGENT=Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0
- HUBOT_RSS_LIMIT_ON_ADD=10
- HUBOT_RSS_HEADER=:dango:
- HUBOT_RSS_PRINTSUMMARY=true
- HUBOT_RSS_PRINTIMAGE=true
- HUBOT_RSS_PRINTERROR=true
- HUBOT_RSS_IRCCOLORS=false
volumes:
- ./external-scripts.json:/usr/src/matteruser/external-scripts.json
mm-hubot-brain:
image: redis:6.0.9-alpine
container_name: mm-hubot-brain
volumes:
- hubot-brain-data:/data
command: redis-server --appendonly yes
volumes:
hubot-brain-data:
driver: local
起動と動作確認
以下のコマンドhubotを起動する.
docker-compose up -d
起動後正常に動作していればhubotのbotへのダイレクトメッセージで以下を実行してnothingと出ていれば成功です.
以下のコマンド内のhubotはbuild argのhubot_nameを指定した場合,その名前に置換してください.
hubot rss list
// hubot nothing
おわりに
RSSは最近の記事が少なくなっていて動く構成を探すのに苦労しました.
この記事が他の方の少しでも助けになれば幸いです.