ChatOps的利器:Hubot

引言

近几年,DevOps 在各个企业用的风生水起,也衍生出了很多的其他的实践和理念,比如AIOps,DevSecOps, TestOps, BizOps 当然还有本文的主角 ChatOps大哥了。 说起ChatOps, 顾名思义就是通过聊天软件聊聊天就能把运维给做了,哎呀,天下还能有这样的好工作了,啧啧!以前做手工运维,可苦了运维大哥们,重复的脚本手工执行N次,同一个问题被不同的开发问了N次,就拿重启电脑这件简单的事情来说吧,也要远程登陆到目标的机器,输入重启命令,等待重启,然后在远程登陆进去看是否重启生效了,键盘敲的都酸了,而且无聊!这个时候,ChatOps大哥就想,看能不能有个机器人,而且是个知心暖心的机器人,我给他输入一个命令,他就自动帮我做了,而且我这个还可以建立一个聊天侃大山的群组,把机器人拖进去,独乐乐不如众乐乐,大家运维的事情,找机器人啊!这不,还真有这么个开源免费的机器人小弟,那就是Hubot,其官方网站就在github安了家。下面就是其官方文档里第一张图,初一看以为就是一个机器人的设计图,其实就是就是一张机器人的设计图,不过,是一个可以在电脑上安装的一个软件,而且是基于NodeJS大家族中的coffee语言哦。
在这里插入图片描述

为什么用Hubot

Hubot是一款开源的软件,其在Github的点赞已经达到惊人的15.7k,被Fork出来的次数更是达到了3700次。可谓是很受大家的欢迎。
在这里插入图片描述
此外,其License也是MIT的授权,和Apache的license大家可以放心使用与商业生产环境~
在这里插入图片描述
相对于下面的其他两款:
HubBot: 支持Javascript/CoffeeScript, MIT版权
Lita: Lita.io Ruby语言开发
Err Bot: Python语言开发,gplv3 版权
在这里插入图片描述
Hubot在成熟度,受欢迎程度和授权方面还是占有很大的优势。当然,如果你是Python的忠实粉丝,Err Bot也是一款很好的选择;如果你有Ruby On Rails 的优秀经验,Lita也是一个不错的选择,但是现在Ruby语言犹如明日黄花,已经很没落了,也很难找到合适的开发者了,想想还是不要选Lita了。

安装

安装的步骤也很简单。

步骤1. 确保安装了Node和npm

步骤2:安装 yo,generator-hubot 这样会帮我们生成hubot的项目代码,

npm install -g yo generator-hubot

这时才明白,其实hubot小弟就是一个NodeJs的项目的啊。而且源代码也公开了哦。

下面是我在本地Window10 电脑上执行的结果,大家不用担心不需要翻墙,速度还是不错的。
不过建议大家用最新的Node的版本,至少应该是v8以上的版本吧。笔者本机安装的就是v14.13.0
关于如何安装Node,网站的文章很多,大家可以自行搜索~

C:\Users\rodney>npm install -g yo generator-hubot
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated CSSselect@0.4.1: the module is now available as 'css-select'
npm WARN deprecated CSSwhat@0.4.7: the module is now available as 'css-what'
npm WARN deprecated simple-bufferstream@0.0.4: no longer maintained
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated cross-spawn-async@2.2.5: cross-spawn no longer requires a build toolchain, use it instead
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
C:\Users\rodney\AppData\Roaming\npm\yo -> C:\Users\rodney\AppData\Roaming\npm\node_modules\yo\lib\cli.js
C:\Users\rodney\AppData\Roaming\npm\yo-complete -> C:\Users\rodney\AppData\Roaming\npm\node_modules\yo\lib\completion\index.js
> core-js@3.6.5 postinstall C:\Users\rodney\AppData\Roaming\npm\node_modules\yo\node_modules\core-js
> node -e "try{require('./postinstall')}catch(e){}"
Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock
Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
> ejs@2.7.4 postinstall C:\Users\rodney\AppData\Roaming\npm\node_modules\yo\node_modules\ejs
> node ./postinstall.js
Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
> yo@3.1.1 postinstall C:\Users\rodney\AppData\Roaming\npm\node_modules\yo
> yodoctor
Yeoman Doctor
Running sanity checks on your system
√ No .bowerrc file in home directory
√ Global configuration file is valid
√ NODE_PATH matches the npm root
√ No .yo-rc.json file in home directory
√ Node.js version
√ npm version
√ yo version
Everything looks all right!
npm WARN notsup Unsupported engine for got@5.7.1: wanted: {"node":">=0.10.0 <7"} (current: {"node":"14.13.0","npm":"6.14.8"})
npm WARN notsup Not compatible with your version of node/npm: got@5.7.1
+ generator-hubot@0.4.0
+ yo@3.1.1
added 479 packages from 300 contributors, removed 21 packages, updated 98 packages and moved 4 packages in 1234.974s

步骤3: 新建一个文件夹,并在这个文件夹下新建一个项目

% mkdir myhubot
% cd myhubot
% yo hubot

注意执行上面的时候,会让大家填写一些机器人HuBot的信息,大家按照自己的填写就行。
在这里插入图片描述
需要注意的是,在输入的选项中 name的名字很重要,一定要记住,在后面使用hubot已经输入hubot的命令的时候,会用上,笔者给自己的hubot起了小名 henryhubot

填写好信息后,就会生成一个NodeJs的项目,其大概的项目的结构如下:
在这里插入图片描述
在执行 yo hubot 命令的时候,其控制台的输出类似与下面的输出。

C:\Users\rodney\myhubot>yo hubot_____________________________/                             \//\              |      Extracting input for    |\    _____    |   self-replication process   |//\  /_____\   \                             /======= |[^_/\_]|   /----------------------------|   | _|___@@__|__+===+/  ///     \_\| |_\ /// HUBOT/\\|___/\//      /  \\\      /   +---+\____/    |   || //|    +===+\//      |xx|? Owner 35490942@qq.com
? Bot name henryhubot
? Description Winner
? Bot adapter campfirecreate bin\hubotcreate bin\hubot.cmdcreate Procfilecreate README.mdcreate external-scripts.jsoncreate hubot-scripts.jsoncreate .gitignorecreate package.jsoncreate scripts\example.coffeecreate .editorconfig__________________________________              /                             \\    \             |   Self-replication process   ||    |    _____    |          complete...         ||__\\|   /_____\   \     Good luck with that.    /|//+  |[^_/\_]|   /----------------------------|   | _|___@@__|__+===+/  ///     \_\| |_\ /// HUBOT/\\|___/\//      /  \\\      /   +---+\____/    |   || //|    +===+\//      |xx|npm notice created a lockfile as package-lock.json. You should commit this file.
+ hubot-redis-brain@1.0.0
+ hubot-maps@0.0.3
+ hubot-rules@1.0.0
+ hubot-diagnostics@1.0.0
+ hubot-shipit@0.2.1
+ hubot-pugme@0.1.1
+ hubot-heroku-keepalive@1.0.3
+ hubot-scripts@2.17.2
+ hubot@3.3.2
+ hubot-google-images@0.2.7
+ hubot-help@1.0.1
+ hubot-google-translate@0.2.1
added 94 packages from 53 contributors and audited 94 packages in 84.787s1 package is looking for fundingrun `npm fund` for detailsfound 0 vulnerabilities

从上面的日志可以看出,其默认生成的项目会,会默认安装node下面的依赖。

{"name": "henryhubot","version": "0.0.0","private": true,"author": "35490942@qq.com","description": "Winner","dependencies": {"hubot": "^3.3.2","hubot-diagnostics": "^1.0.0","hubot-google-images": "^0.2.7","hubot-google-translate": "^0.2.1","hubot-help": "^1.0.1","hubot-heroku-keepalive": "^1.0.3","hubot-maps": "0.0.3","hubot-pugme": "^0.1.1","hubot-redis-brain": "^1.0.0","hubot-rules": "^1.0.0","hubot-scripts": "^2.17.2","hubot-shipit": "^0.2.1"},"engines": {"node": "0.10.x"}
}

如果需要集成Slack聊天软件的话,就需要通过下面的命令安装其适配器

npm install --save hubot-slack

到此,安装就告一段落了。下面来看如何让其跑起来。

运行

如果要其hubot启动起来,就需要在项目路径下(笔者的路径是C:\Users\rodney\myhubot)输入下面的命令 .\bin\hubot.cmd

C:\Users\rodney\myhubot>.\bin\hubot.cmd
audited 200 packages in 5.092s14 packages are looking for fundingrun `npm fund` for details
found 0 vulnerabilities
henryhubot> [Tue Oct 06 2020 01:31:38 GMT+0800 (中国标准时间)] WARNING Loading scripts from hubot-scripts.json is deprecated and will be removed in 3.0 (https://github.com/github/hubot-scripts/issues/1113) in favor of packages for each script.
Your hubot-scripts.json is empty, so you just need to remove it.
[Tue Oct 06 2020 01:31:38 GMT+0800 (中国标准时间)] INFO hubot-redis-brain: Using default redis on localhost:6379
[Tue Oct 06 2020 01:31:38 GMT+0800 (中国标准时间)] ERROR hubot-heroku-keepalive included, but missing HUBOT_HEROKU_KEEPALIVE_URL. `heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=$(heroku apps:info -s | grep web.url | cut -d= -f2)`

注意一定要在项目的根目录下,输入上面的命令,不能在bin目录下直接输入hubot.cmd
原因也很简单,咱们看看hubot.cmd 脚本里面干了些什么事情。

@echo offcall npm install
SETLOCAL
SET PATH=node_modules\.bin;node_modules\hubot\node_modules\.bin;%PATH%
node_modules\.bin\hubot.cmd --name "henryhubot" %* 

其需要吧node_modules\hubot\node_modules.bin 目录加入到path中去,而且是一个相对目录,所以必须在项目的根目录下执行上面的命令才行。

如果需要和Slack 进行交互,启动的时候则需要加一个 -a 的参数。因为笔者没有提供Slack的Token,其会报一个“ERROR No token provided to Hubot” 错误,只要我们把Slack的Token配置到项目的代码配置文件里面,就可以连接上Slack了。

C:\Users\rodney\myhubot>.\bin\hubot.cmd -a slack
audited 200 packages in 2.607s14 packages are looking for fundingrun `npm fund` for details
found 0 vulnerabilities
[Tue Oct 06 2020 01:35:53 GMT+0800 (中国标准时间)] INFO hubot-slack adapter v4.8.0
warn: SlackDataStore is deprecated and will be removed in the next major version. See project documentation for a migration guide.
warn: SlackDataStore is deprecated and will be removed in the next major version. See project documentation for a migration guide.
[Tue Oct 06 2020 01:35:53 GMT+0800 (中国标准时间)] ERROR No token provided to Hubot

咱们先从.\bin\hubot.cmd -a slack 切换到 普通的模式 .\bin\hubot.cmd
然后输入henryhubot help 命令,其提供了下面的默认命令给我们用。
在这里插入图片描述
比如,我们测试一下 henryhubot pug bomb N 命令,其输出如下。

henryhubot> henryhubot pug bomb 5
henryhubot> https://user-images.githubusercontent.com/260/81488901-49615f80-923d-11ea-9d4b-1ab01525ecea.jpg?00125790
https://user-images.githubusercontent.com/260/81488901-49615f80-923d-11ea-9d4b-1ab01525ecea.jpg?0040a4cf
https://user-images.githubusercontent.com/260/81488901-49615f80-923d-11ea-9d4b-1ab01525ecea.jpg?001c578e
https://user-images.githubusercontent.com/260/81488901-49615f80-923d-11ea-9d4b-1ab01525ecea.jpg?00fcedec
https://user-images.githubusercontent.com/260/81488901-49615f80-923d-11ea-9d4b-1ab01525ecea.jpg?00f06e76
https://user-images.githubusercontent.com/260/81488901-49615f80-923d-11ea-9d4b-1ab01525ecea.jpg?00bbc149

如果通过Slack的插件和Hubot相连接,我们就只需要在Slack里面输入上面的命令,其Hubot就会自动把其输出结果返回到Slack里面。

定制Hubot的执行命令

其实在使用Hubot的时候,如果默认的命令不能满足我们的要求的时候,该怎么办呢?大家第一想到就是定制代码。 那如何做呢? Hubot已经为我们想好了。只要在当前目录的scripts 目录下面添加一个
js或者coffee的文件即可,在文件里面我们遵循其特定语法接口即可,下面以一段官方帮助文档提供的代码为例子,在scripts 的文件夹下,新建一个helloworld.coffee的文件。

在这里插入图片描述
helloworld.coffee的内容如下:

module.exports = (robot) ->robot.hear /hello/i, (res) ->res.send "hello world~~~~~~~~~~~~~~~~"robot.respond /open the pod bay doors/i, (res) ->res.reply "I'm afraid I can't let you do that."robot.hear /I like pie/i, (res) ->res.emote "makes a freshly baked pie"

然后重启启动Hubot。输入hello命令
在这里插入图片描述
其就自动返回了"hello world~~~~~~~~~~~~~~~~" 还挺好玩的!

与Chat工具集成

目前市面上,有很多企业内部聊天工具,在和Hubot集成这一块做的比较好的
聊天软件主要有下面这些:
在这里插入图片描述
上面的这些聊天软件都会提供相应的Hubot 的适配器,比如Slack的适配器为
Hubot-slack,

在这里插入图片描述
其用法可以参考其Hubot Slack的官方文档:https://slack.dev/hubot-slack/
先在Slack的管理配置页面获取调用Slack API的Token, 然后 执行下面的命令,当然执行之前需要用npm 先安装hubot-slack的NodeJS的依赖

HUBOT_SLACK_TOKEN=xoxb-YOUR-TOKEN-HERE ./bin/hubot --adapter slack

总结

这篇文章主要和大家分享了Hubot在ChatOps的地位,已经如何安装启动Hubot,最后和大家简单分享了一下如何定制开发一个Hubot能识别和支持的命令~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20922.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型开发(五):实现Jupyter本地调用OpenAI API

全文共3000余字&#xff0c;预计阅读时间约15分钟 | 满满干货&#xff0c;建议收藏&#xff01; 大模型开发(五)&#xff1a;实现Jupyter本地调用OpenAI API OpenAI作为本轮大语言模型技术进步的先驱&#xff0c;其系列大型模型在效果上一直保持着领先。其推出的各类模型如文本…

[考研数据结构]第2章之顺序表的基本知识与操作

前言 从本篇文章开始&#xff0c;正式开启考研专业课之一的数据结构的复习之旅&#xff0c;数学与专业课并驾齐驱&#xff0c;早开始&#xff0c;后期才能游刃有余。另外博客重点分享数据结构需要动手实践的代码部分&#xff0c;对于概念的解释将被一笔带过或者忽略&#xff0c…

线程池 2(第二部分--循环队列)

在考虑如何去设计一个任务容器的时候&#xff0c;其实尝试了很多。最开始的时候直接用的是std::queue容器&#xff0c;主要是看了知乎上面的 “ 基于C11实现线程池 - 知乎 ”这个帖子&#xff0c;去封装一个安全队列。但是这个操作每次都要上一次锁&#xff0c;实在是太浪费时间…

ubuntu20.04 硬盘挂载、显卡驱动安装

前几天ubuntu系统莫名出问题了&#xff0c;修不好只能重装&#xff0c;在此记录安装ubuntu系统后的硬盘挂载和显卡驱动安装。 注意&#xff0c;本文并非教程&#xff0c;只是个人安装过程的记录&#xff0c;仅供参考 ubuntu系统&#xff1a;Ubuntu 20.04.6 LTS 硬件设备&…

一文带你搞清 ChatGPT 与 Azure OpenAI 的区别

这两周是我从2017年开始全职涉入 NLP 领域后最忙的两周&#xff0c;无数的同事和客户都在向我提出一个询问&#xff1a;ChatGPT 可以帮到我们什么&#xff1f; 特别是在2023年3月31日我做了一场微软 Azure OpenAI [布局助力企业]拥抱新智能时代的演讲之后&#xff0c;这几天我…

ChatGPT的真相:强泛化的秘密以及众多关键问题

进NLP群—>加入NLP交流群 本文转载自AI科技评论&#xff0c;作者韩庐山。 本文从ChatGPT带来的即时学习能力&#xff08;in-context learning&#xff09;入手&#xff0c;逐步深入地探讨了ChatGPT目前众多的关键性问题&#xff0c;包括&#xff1a; ChatGPT带来了从未有过的…

chatgpt赋能python:用Python向手机发送信息是如何实现的?

用Python向手机发送信息是如何实现的&#xff1f; 在今天的信息时代&#xff0c;随时随地保持联系已经成为生活不可或缺的一部分。随着技术的发展&#xff0c;我们可以使用各种方式发送和接收信息&#xff0c;而使用Python向手机发送短信是其中一种非常方便的方式。 Python的…

chatgpt赋能python:Python自动认证上网教程

Python自动认证上网教程 随着互联网的普及&#xff0c;越来越多的人需要通过手机、电脑等设备上网&#xff0c;而许多场所都要求进行认证才能使用网络。每次都手动操作认证费时费力&#xff0c;这时Python就可以派上用场了。Python是一种高级的编程语言&#xff0c;具有可读性…

双因素认证(2FA)教程

所谓认证&#xff08;authentication&#xff09;就是确认用户的身份&#xff0c;是网站登录必不可少的步骤。 密码是最常见的认证方法&#xff0c;但是不安全&#xff0c;容易泄露和冒充。 越来越多的地方&#xff0c;要求启用双因素认证&#xff08;Two-factor authenticatio…

如何实现双因素认证?

增强数字安全的愿望引起了世界各国政府的关注&#xff0c;所有政府都希望保护消费者和企业。因此&#xff0c;许多人提出了立法&#xff0c;将两因素身份验证 (2FA) 作为 IT 系统的强制性要求。其实&#xff0c;在我国等级保护制度中等级保护第三级以上都要求完成双因素认证的&…

网络安全合规-Tisax(汽车安全评估讯息交换平台)一

**TISAX&#xff08;汽车安全评估讯息交换平台&#xff08;可信信息安全评估交换平台&#xff09;&#xff09;**是2017年由德国汽车工业联合会(VDA) 联合欧洲网络交换所(ENX) 所推出的资讯交换平台&#xff0c;通过应用欧洲网络交换协会&#xff08;ENX&#xff09;和德国汽车…

从医疗保健攻击到HIPAA 合规性

医疗机构无疑是网络攻击的热门目标。攻击者因在暗网上出售一条健康记录而获取高额 佣金&#xff0c;在各行业网络安全报告中医疗保健行业的攻击事件占比居高不下&#xff0c;这有什么奇怪的吗&#xff1f; 根据2022 年 SonicWall 网络威胁报告&#xff0c;医疗保健行业&#x…

漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?

周末在家休息&#xff0c;女朋友在刷朋友圈&#xff0c;突然她问我&#xff1a; 鸿蒙OS回顾 2019年8月9日华为开发者大会上&#xff0c;华为消费者业务CEO余承东正式宣布发布自有操作系统鸿蒙&#xff0c;内核为Linux内核、鸿蒙微内核和LiteOS。未来将摆脱Linux内核和LiteOS&am…

腾讯研发动画组件,以后动画制作用PAG

你好&#xff0c;我是tiantian。 我们知道&#xff0c;动画特效可以辅助视觉制作焦点&#xff0c;引导注意力的方向&#xff0c;越来越为广大视觉设计师青睐&#xff0c;并广泛应用于各类场景开发。 关于动画设计工具&#xff0c;既有 Framer.js、Origami&#xff0c; 也有交互…

能直接修复代码 BUG,比 ChatGPT 还厉害

【公众号回复 “1024”&#xff0c;免费领取程序员赚钱实操经验】 大家好&#xff0c;又见面了&#xff0c;我是章鱼猫&#xff01; 最近 ChatGPT 非常的火&#xff0c;而且是火出圈的那种&#xff0c;各个领域的人都知道。但是不得不说程序员做的工具&#xff0c;对程序员还是…

chatgpt赋能Python-ipv4地址python

IPv4地址 Python编程介绍 IPv4地址在互联网中扮演着非常重要的角色&#xff0c;英文名称为 Internet Protocol Version 4 Address。每一个连接到互联网上的设备都会被分配一个唯一的IPv4地址&#xff0c;它由32位二进制数以点分十进制的形式呈现出来。在Python编程中&#xff…

chatgpt赋能Python-pythonip地址是否合法

Python中如何判断IP地址是否合法 在网络中&#xff0c;IP地址是非常重要的概念。它用来标识网络中每个设备的唯一地址。IP地址通常分为IPv4和IPv6两种类型。在Python中&#xff0c;有多种方法可以判断IP地址是否合法。在本文中&#xff0c;我们将介绍如何使用Python编程语言来…

可喜可贺,暴雪即将收购第一家工作室Proletariat,魔法吃鸡停运

暴雪娱乐在超过15年的时间里收购了第一家工作室。在VentureBeat的一份报告中&#xff0c;该公司收购了总部位于波士顿的工作室Proletariat。 “经过四年多的元素魔法和咒语组合&#xff0c;我们决定结束Spellbreak的研发&#xff0c;”该公司在其网站上写道。“这些服务器将于2…

修改战网昵称服务器错误,暴雪又改了游戏平台名字 暴雪战网回来了

暴雪一定是个纠结的处女座&#xff0c;距离上一次更改游戏平台名称之后&#xff0c;8月15日早上6点&#xff0c;暴雪中国又一次在微博上发表公告称“暴雪战网品牌名称更新”&#xff0c;名字从上一次的暴雪游戏平台改成了暴雪战网。 按暴雪的意思来看&#xff0c;之所以玩这么一…

暴雪战网服务器维护,炉石无法通过暴雪战网服务进行登录

有很多玩家常常遇到战网无法登陆、炉石传说无法登陆至战网服务等问题。那么下面就告诉大家这种解决办法&#xff0c;希望对你有帮助&#xff01; 1、关闭游戏或安装程序&#xff0c;打开任务管理器&#xff0c;终止以下进程&#xff1a;Agent.exe&#xff0c;Blizzard Launcher…