场景
对于运维人员来说,用ssh
登录自己的服务器进行各种操作几乎成了家常便饭。每次开发人员提交代码后,登录服务器执行git pull
,或者把数据备份后压缩并下载也成为了日常工作。能不能省掉这些烦琐的步骤,让开发人员自己完成呢?现在好了,你可以用slack
和hubot
搭建一个自己的运维机器人,再也不用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
,会带上heroku
和redis
,如果用不到的话,可以卸载掉:
npm uninstall hubot-heroku-keepalive --save
在hubot
目录下的external-scripts.json
文件中把有关heroku
和redis
的两行删掉就行了,否则老是会报几个警告。
然后,再把hubot-scripts.json
删掉,目前我们暂时还用不到它:
rm -f hubot-scripts.json
好了,现在总算可以了。用一下看看吧:
./bin/hubot
执行:
hubot help
hubot ping
按ctrl+c
可以退出。
连接hubot
和slack
那么怎么和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 ./
修改一下external-scripts.json
,添加上以下模块:hubot-script-shellcmd
。如果到此为止,你操作的步骤和我基本一样的话,你的external-scripts.json
应该长的像这个样子:
[
"hubot-diagnostics",
"hubot-help",
"hubot-google-images",
"hubot-google-translate",
"hubot-pugme",
"hubot-maps",
"hubot-rules",
"hubot-shipit",
"hubot-script-shellcmd"
]
接下来:
cd bash/handlers
这里面的helloworld
就是个例子,没什么用,可以删掉:
rm -f helloworld
把update
改造成如下这样的:
#!/bin/bash
cd /your/path
git pull
echo "successfully updated!"
exit 0
好了,现在你重启一下小机器人,在你的slack
端对机器人说:
hubot shellcmd update
看看效果吧!
常用脚本
当前CPU使用情况
在bash/handlers
文件夹下新建一个文件,名字就叫比如说cpu
,内容如下:
#!/bin/bash
top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f%%\n", prefix, 100 - v }'
exit 0
然后,你每次只需要在slack
里执行:
hubot shellcmd cpu
就能知道你的服务器当前cpu
使用率了,再也不用去服务器端执行top
命令,也不用安装任何系统监控软件,然后打开浏览器看结果。是不是很方便呢?当然类似这样的脚本你还可以写很多,就不一一列举了。
可选操作
由于每次启动hubot
时,都需要执行以下一串长长的命令:
env HUBOT_SLACK_TOKEN=xoxb-你的token ./bin/hubot --adapter slack
如果你不想这么麻烦的话,可以把这个环境变量放在fish
的config
里,路径是:~/.config/fish/config.fish
。
添加以下一行命令:
set -x HUBOT_SLACK_TOKEN xoxb-你的token
这样你每次启动hubot
时,就只需要执行以下这句就行了:
./bin/hubot --adapter slack
同样,如果你嫌shellcmd
太长的话,也可以加下这一句:
set -x HUBOT_SHELLCMD_KEYWORD run
这样你以后再需要hubot
帮你执行命令的时候,只要说这一句就行了:
hubot run update
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。