Hubot 运维机器人初探

如今运维人员都在强调自动化,降低运维成本。尽管现在搭建一套运维自动化体系架构并不难,然后有些工作还是必须需要运维手动工作,比如上线动作(上线的过程自动化,但是操作点由谁来操作,比如jenkins上谁去点击构建),或者偶尔有开发或测试会在直接找你手动更改数据操作,这些暂时都必须人为手动操作。次数多了,难免会想这些怎么去实现自动化,无需人为干预!知道有次在钉钉群有人添加生活机器人,互动回复天气情况。当时我在想后面的逻辑肯定是,当机器人收到指定后,自动调第三方接口,将数据返回。如果这个接口是我自己编写,实现自己的功能,不就可以将一些手动任务直接让机器人去执行了!换句话说,下次开发有条sql要执行,别@我,直接@机器人,然后机器人直接将sql执行,然后返回给对应的开发就完美了!还别说,真有人在做这样的事情,那就是Hubot。一些相关细节早就有人发过博客,我就不啰嗦了,请自动百度!以下是我尝试使用机器人,去模拟实现我目前工作中的一些简单任务。
一,安装nodejs,过程略

[bot@k8s-node1 scripts]$ node -v
v8.11.2
[bot@k8s-node1 scripts]$
[bot@k8s-node1 scripts]$ npm -version
6.4.1
[bot@k8s-node1 scripts]$

二,安装redis
hubot一些底层数据会默认存储在本机localhost:6379中,测试功能中,一切随简

[bot@k8s-node1 scripts]$ ps -ef | grep redis
redis    109616      1  0 Oct16 ?        00:04:22 /usr/bin/redis-server 127.0.0.1:6379
bot      111413  89457  0 15:39 pts/0    00:00:00 grep --color=auto redis

三,安装hubot,过程比较简单

npm install –y generator-hubot yo
mkdir myhubot && cd myhubot
yo hubot 

正常启动如下图


image.png

如果能看到上图说明hubot部署成功
当前文件下的文件如下

drwxrwxr-x.   2 bot bot    36 Oct 17 15:47 bin
-rw-rw-r--.   1 bot bot   288 Oct 17 16:30 external-scripts.json
-rw-rw-r--.   1 bot bot     0 Oct 18 14:12 hubot.log
-rw-rw-r--.   1 bot bot     2 Jul 19 17:51 hubot-scripts.json
drwxrwxr-x. 102 bot bot  4096 Oct 17 15:49 node_modules
-rw-------.   1 bot bot  6703 Oct 18 15:52 nohup.out
-rw-r--r--.   1 bot bot   694 Oct 17 13:14 package.json
-rw-rw-r--.   1 bot bot 28437 Oct 17 15:49 package-lock.json
-rw-r--r--.   1 bot bot    27 Jul 19 17:51 Procfile
-rw-r--r--.   1 bot bot  7856 Jul 19 17:51 README.md
drwxrwxr-x.   2 bot bot    85 Oct 18 13:25 scripts
-rw-rw-r--.   1 bot bot   401 Oct 16 17:26 touser.coffee

node_modules 目录是存放npm install packagename 第三方包的存放目录
external-scripts.json 将安装玩的第三方包要添加到此配置文件
scripts 文件夹用户存放用户自定义的,机器人能“读懂”的指令,具体使用情况请查看github地址:https://github.com/hubotio/hubot/blob/master/docs/scripting.md
启动:

[bot@k8s-node1 scripts]$ nohup ./bin/hubot -a bearychat 2&1> hubot.log

四,与聊天机器人结合
既然hubot作为聊天机器人,那么肯定要结合聊天工具,才能真正的实际意义。可惜的是国内办公聊天工具如钉钉,微信(如果算的话)官方暂未支持hubot机器人。所以只能用替代工具测试hubot功能,https://bearychat.com/,倍洽相当于国内的slack,官方支持hubot机器人,免费。
在页面直接添加机器人

image.png

token和url要是与hubot机器人服务端配合的关键信息,url是机器人服务的url
image.png

在服务端添加环境变量

export PATH=$PATH:/usr/local/go/bin
export HUBOT_BEARYCHAT_TOKENS=75f1fa443b9219d4e7d646898booxx
export HUBOT_BEARYCHAT_MODE=rtm
export EXPRESS_PORT=8090
export HUBOT_JENKINS_URL=http://papapa.jenkins.com:8080
export HUBOT_JENKINS_AUTH=admin:admin

安装倍洽adapter

[bot@k8s-node1 scripts]$ npm install hubot-bearychat --save

重启hubot服务

测试如下


image.png

机器人能回复说明一切正常

模块测试
npm install hubot-script-shellcmd
在./node_modules/hubot-script-shellcmd/bash/handlers 目录中添加自己定义好的可执行文件

将包名添加到external-scripts.json文件,并重启服务

[bot@k8s-node1 handlers]$ ll
total 16
-rwxrwxr-x. 1 bot bot  18 Oct 16 16:06 disk
-rwxrwxr-x. 1 bot bot  66 Nov 10  2017 helloworld
-rwxrwxr-x. 1 bot bot  39 Oct 16 16:32 run
-rwxrwxr-x. 1 bot bot 168 Nov 10  2017 update
[bot@k8s-node1 handlers]$

1.查看本地第一个脚本

[bot@k8s-node1 handlers]$ cat disk 
#!/bin/bash
df -h
[bot@k8s-node1 handlers]$

非常简单的一个查看磁盘使用情况脚本


image.png

这个模块好好利用还是非常强大的,比如可用配合工具一起使用
如在服务端安装ansible,mysql;甚至kubectl客户端。可以简化很多操作
2.测试ansible脚本

[bot@k8s-node1 handlers]$ cat /etc/ansible/hosts | grep -A2 test
[test]
192.168.138.131 
[bot@k8s-node1 handlers]$ cat run
#!/bin/bash

sudo ansible test -m ping
[bot@k8s-node1 handlers]$

测试结果如下


image.png

个人认为好好利用这个模块,能做的事情还是很多的!

hubot-jenkins模块

[bot@k8s-node1 handlers]$ npm install hubot-jenkins 

添加jenkins相关环境变量添加

export HUBOT_JENKINS_URL=http://papapa.jenkins.com:8080
export HUBOT_JENKINS_AUTH=admin:admin

重启hubot
测试结果如下


image.png

image.png

image.png

查看jenkins任务


image.png

正常构建

发起http请求
运维可以将一些负责的运维工作封装,暴露rest接口,通过机器人发送执行,发起请求;
测试如下
1.编写一个简单的接口

package main

import (
    "fmt"
    "net/http"
    "log"
    "encoding/json"
)

type job struct {
    Name string
    Counter int
    Execter string
}

func sayhelloName(w http.ResponseWriter, r *http.Request) {

    thisjob := job{
        Name: "soms",
        Counter: 19,
        Execter: "myself",
    }
    bytes, _ := json.Marshal(thisjob)
    fmt.Fprintf(w, string(bytes))
}

func main() {
    http.HandleFunc("/api/hubot", sayhelloName)
    err := http.ListenAndServe(":9898", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

测试接口


image.png

在scripts目录下添加脚本
http.coffee

module.exports = (robot) ->
  robot.respond /test http url get/i, (res) ->
    robot.http("http://172.21.53.67:9898/api/hubot")
      .header('Accept', 'application/json')
      .get() (err, response, body) ->
        data = JSON.parse body
        res.send "#{data.Name} build this job "

重启hubot服务
机器人测试如下


image.png

完美!一切都按照自己臆想的进行!

以上就是这次对hubot一些简单的探索,和尝试使用,当然还有很多强大的地方我没有写到,网友可以去github搜索hubot查看更深入的使用!这个实际是就是运维界有人推行的chatops理念,让机器人代理运维!但是这个理念推广的并不广泛,好多行业内的朋友都不知道这个东西!个人感觉这个还是很有可为,可以尝试在所在公司推广使用,但是必须要解决两个问题:权限问题,办公聊天工具支持!

码字,好累...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容