用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
相關文章
相關標籤/搜索