對於運維人員來講,用ssh
登陸本身的服務器進行各類操做幾乎成了屢見不鮮。每次開發人員提交代碼後,登陸服務器執行git pull
,或者把數據備份後壓縮並下載也成爲了平常工做。能不能省掉這些煩瑣的步驟,讓開發人員本身完成呢?如今好了,你能夠用slack
和hubot
搭建一個本身的運維機器人,不再用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
,會帶上heroku
和redis
,若是用不到的話,能夠卸載掉:npm
npm uninstall hubot-heroku-keepalive --save
在hubot
目錄下的external-scripts.json
文件中把有關heroku
和redis
的兩行刪掉就好了,不然總是會報幾個警告。
而後,再把hubot-scripts.json
刪掉,目前咱們暫時還用不到它:json
rm -f hubot-scripts.json
好了,如今總算能夠了。用一下看看吧:瀏覽器
./bin/hubot
執行:bash
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
看看效果吧!
在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