用 slack 和 hubot 搭建你自己的运维机器人

3,770 阅读3分钟
原文链接: segmentfault.com

场景

对于运维人员来说,用ssh登录自己的服务器进行各种操作几乎成了家常便饭。每次开发人员提交代码后,登录服务器执行git pull,或者把数据备份后压缩并下载也成为了日常工作。能不能省掉这些烦琐的步骤,让开发人员自己完成呢?现在好了,你可以用slackhubot搭建一个自己的运维机器人,再也不用ssh,开发人员只需要在聊天群里对着机器人喊一声,它就乖乖地做事去了,多么省心!在整个场景中,hubot是那个做事情的机器人,而slack是聊天工具,其实也有一种搭配方式是用微信配合hubot,但是为了这个微信,还要注册一个单独的账号,还要用二维码扫码登录,种种不便,所以我们最后选择的还是slack。另外一个方案是github自带的webhooks也可以实现开发人员提交后服务器自动拉取,但是不知什么原因,配置起来总是有点麻烦,而且不稳定。所以最终我们还是选择了slack+hubot的方案。

安装hubot

yum install npm

这时候刚安装完的node版本比较低,只有0.几,先不要着急安装hubot,先把node升级再说。

npm install -g n
n stable
node -v

好了,现在你的node已经升到最高版本,可以开始安装hubot了。

npm install -g hubot coffee-script yo generator-hubot

安装成功。执行:

mkdir /root/hubot
cd /root/hubot
yo hubot

如果是用root安装的话,这个时候可能会遇到很多权限上的错误,主要原因是它需要对于组有读写权限,所以:

chmod g+rwx /root /root/.config /root/.config/configstore

再安装还是不行:

chmod g+rwx /root/hubot
chmod -R g+rwx /root/.npm
yo hubot

安装过程中会问你安装什么样的adapter,手工输入slack
缺省安装的hubot,会带上herokuredis,如果用不到的话,可以卸载掉:

npm uninstall hubot-heroku-keepalive --save

hubot目录下的external-scripts.json文件中把有关herokuredis的两行删掉就行了,否则老是会报几个警告。
然后,再把hubot-scripts.json删掉,目前我们暂时还用不到它:

rm -f hubot-scripts.json

好了,现在总算可以了。用一下看看吧:

./bin/hubot

执行:

hubot help
hubot ping

ctrl+c可以退出。

连接hubotslack

那么怎么和slack打通呢?其实也很简单,你只需要在slack上安装好hubot的插件,它会自动生成一个token,把这个token记下来,输入:

env HUBOT_SLACK_TOKEN=xoxb-你的token ./bin/hubot --adapter slack

这时候hubot就启动起来,等待接收命令了。但是由于hubot缺省加入的是slack#general频道,如果你改掉了频道名字,或者删掉了这个频道的话,你需要重新邀请小机器人进入一个新的频道,否则没法对话。

现在你可以在slack的客户端和小机器人对话了,命令还是同上:

hubot help

hubot保持在线

但是如果这时候我们关掉ssh的话,小机器人就掉线了,怎么办呢?可以用nohup的方法让它留在后台,也可以用tmux

yum install tmux
tmux new -s hubot

tmux里执行上面的命令,然后按ctrl+b,然后再按d退出。如果再想进去,可以执行:

tmux a -t hubot

hubot执行shell脚本

这还没有完,我们需要小机器人来执行一些shell脚本,所以我们需要安装:

npm install hubot-script-shellcmd
cp -R node_modules/hubot-script-shellcmd/bash ./

这里面的helloworld就是个例子,没什么用,可以删掉:

rm -f helloworld

update改造成如下这样的:

#!/bin/bash
cd /your/path
git pull
echo "successfully updated!"

exit 0

好了,现在你重启一下小机器人,在你的slack端对机器人说:

hubot shellcmd update

看看效果吧!