用slack和hubot搭建你本身的运维机器人

场景

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

安装hubot

yum install npm

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

npm install -g n
n stable
node -v

好了,如今你的node已经升到最高版本,能够开始安装hubot了。github

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

安装成功。执行:web

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

若是是用root安装的话,这个时候可能会遇到不少权限上的错误,主要缘由是它须要对于组有读写权限,因此:redis

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

再安装仍是不行:shell

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

安装过程当中会问你安装什么样的adapter,手工输入slack
缺省安装的hubot,会带上herokuredis,若是用不到的话,能够卸载掉:npm

npm uninstall hubot-heroku-keepalive --save

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

rm -f hubot-scripts.json

好了,如今总算能够了。用一下看看吧:浏览器

./bin/hubot

执行:bash

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 ./

修改一下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

若是你不想这么麻烦的话,能够把这个环境变量放在fishconfig里,路径是:~/.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
相关文章
相关标签/搜索