学习贴:两步开启研发团队专属ChatOps

最近几天,ChatGPT 真是杀疯了 !

相信大家的朋友圈,已经被调戏、询问或探讨 ChatGPT 的贴子刷屏。

看到这个上知天文、下知地理,博古通今、学贯中西,不管什么问题都能告诉我们答案的 “杀手级应用”,不禁想问:“这么好玩东西不会只拿来玩吧,能不能帮我分担一些工作?”

虽然ChatGPT还没答应,但另一个不吃不喝不摸鱼的 “智能” 员工——ChatOps,已经在上班了。

一起来看极狐GitLab ChatOps 的设计与实践

「什么是 ChatOps?」

顾名思义,ChatOps 就是 Chat + Ops 的组合词,是使用即时通讯软件客户端、聊天机器人和实时通信工具,来促进软件开发和操作任务的通信和执行方式。ChatOps 往往也被认为是对话驱动的 DevOps。

在 ChatOps 中,所有任务都是由对话驱动,团队成员只需在聊天软件中键入相应的命令或包含相应关键字的内容,聊天机器人就会自动调用相关内容的平台,从而自动完成各种任务

而这些任务的范围,从代码部署到安全事件响应,从团队成员通知到任务进度查询。理论上,ChatOps 可以继承 DevOps 大多数工具与优点,进一步提升团队自动化水平。

| 技术架构

一般来讲,ChatOps 由三部分组成:即时通讯软件客户端(也就是聊天 APP)、连接中心(机器人)、基础设施应用。

| 聊天APP

ChatOps 主要动作,就是将之前 DevOps 中通过 Web 页面进行的操作,通过聊天机器人来代替。也就是说,聊天 APP 成为用户进行操作的一个客户端,用户的任何操作,都可以通过聊天 APP 来实现。

这也为聊天 APP 提出了要求,它需要将用户的输入发送给响应与连接中心,也就是我们常说的聊天机器人,这样机器人才能进行后续的自动化操作。所以聊天 APP 需要支持像 slash commands 或 outgoing 这样的机制,允许用户将自己在聊天框中输入的内容发送向第三方平台。

| 连接中心

一般情况下,大家都喜欢叫这部分为机器人或聊天机器人,但这个表述并不精确,经常会造成误解,所以这里将其描述为连接中心。

它的工作就是接收聊天 APP 发送来的消息,识别处理消息内容,根据识别内容调用基础设施中的应用,等待基础设施应用完成任务,并返回通知(可选)。

可以看出这部分的主要作用,就是接受识别请求并连接基础设施应用,只有在识别请求处接入自然语言识别系统,其能力才更贴近机器人。

| 基础设施应用

这部分与 DevOps 系统与各个基础设施应用的连接方式相同,如果已有则可以直接复用,需要注意的是,基础设施应用不同版本的 API 可能有所差异,需要谨慎维护这部分代码。

「极狐GitLab ChatOps 功能与实践」

极狐GitLab 已和国内外众多主流 IM 产品进行集成,从而实现 ChatOps。

如飞书、钉钉、Slack、Mattermost、Discord、Google Chat、Microsoft Teams、Webex Teams。其中和飞书、钉钉的集成是极狐专享功能,已在极狐GitLab 15.1 旗舰版本正式对外发布。

在极狐GitLab SRE 团队如何落地实践 ChatOps?

| 需求

极狐(GitLab) SRE 团队的日常工作大部分都实现了代码化,并分布在各个项目。

例如,服务器配置管理放在 ansible playbooks 项目里,K8S 部分部署放在了 helm chart 项目中,还有一系列基于目标系统 api 的操作需求。

SRE 团队希望基于 ChatOps,可以进一步降低这些自动化资产使用的复杂度,使团队成员都可以轻松上手琐碎的运维工作,实现操作与操作人解耦;同时,包装好的命令也可以在程序上对操作者的行为做出一定限制,避免操作者直接接触环境,提高操作安全性。

| 设计与实现

为此,极狐(GitLab) SRE 创建了 ChatOps(名为chatops-go)项目,该项目直接与 Slack 的 slash command 绑定,作为运维统一入口。

1.多项目下的 ChatOps 命令模式

由于 SRE 运维脚本分布在各个项目中,我们将 ChatOps 的命令类型分成这三种模式:

  • 直接执行:针对一些快速的、简单的 API 操作,执行动作直接在 ChatOps 项目中完成。
  • 触发下游并等待:ChatOps 的 job 不会直接执行操作任务,而是触发下游项目流水线,并等待下游流水线的返回结果。这个场景适用于,对应的系统需要较为复杂的维护脚本(如ansible palybook),且这些脚本在其他项目中。
  • 触发下游并直接返回:仍然通过 ChatOps 触发下游项目流水线,但是触发成功后不等待下游流水线执行完成,而是直接返回流水线的链接地址。这个场景适用于,要触发的任务耗时较长,如环境升级等。

2.权限控制

在 ChatOps 中,我们往往需要比常规的流水线控制,更细粒度的权限划分。如小 A 作为 SRE 可以调整负载均衡的流量配比,小 B 作为开发可以查看当前环境下某个功能开关的的开启状态等。

极狐 GitLab 在这方面支持很好的扩展。在 ChatOps 触发的流水线作业中,我们可以通过一些CI预定义的变量,在权限上做一些「手脚」:

  • CHAT_INPUT:用户通过 ChatOps 传入的额外参数;
  • CI_JOB_NAME:用户通过 ChatOps 执行的命令名称;
  • CHAT_CHANNEL:用户执行 ChatOps 命令时所在的Slack channel;
  • GITLAB_USER_LOGIN:执行 ChatOps 命令的用户在极狐GitLab 中绑定的用户名。

通过这些变量,ChatOps 程序可以很好的回答这些问题:是谁在执行?在哪执行?执行了什么命令?传入了那些参数?

得到这些问题的答案后,接下来,就是 ChatOps 项目做权限判断的时候了。

| 使用场景

以下就是极狐(GitLab) SRE 团队的 ChatOps 日常使用场景:

1.开启极狐GitLab SaaS的功能开关

这是一个直接执行的命令模式。直接通过 ChatOps CI 中的程序与极狐GitLab SaaS 的功能开关做交互,实现功能开关管理。

使用示例:

2.管理负载均衡的流量比

极狐GitLab SRE 的大量服务器配置管理工作依赖于 Ansible playbook 项目,因此此类工作不会直接在ChatOps 自动完成。这个命令采用的是「触发下游并等待」的模式,命令传入到 ChatOps 项目后,触发Ansible playbook项目流水线,实现对负载均衡器管理。

使用示例如下:

3.管理Helm Chart部署

K8S 上的负载通过 helmfile + hem chart 管理,因此也不会直接在 ChatOps 项目中执行。出于部署时长和安全性的考虑,ChatOps 只会直接返回部署流水线的 URL,并且使用者需要在该流水线中点击手动作业才会执行。

使用示例如下:

以上,就是 ChatOps 的定义、价值与最佳实践。

在 ChatOps 能力加成下,极狐GitLab 能够帮助企业研发团队大幅提升工作效率与工作体验,已获得众多客户认可。

虽然现在的 ChatOps 相较于 ChatGPT,还过于稚嫩。但我们相信在不远的未来,ChatOps 一定会成长为研发团队更智能和贴心的伙伴。ChatOps 下一步如何发展?让我们拭目以待。

#技术栈##技术交流##研发##极狐Gitlab##面试八股文#
全部评论

相关推荐

自从我室友在计算机导论课上听说了“刷 LeetCode 是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在 DP,请勿打扰,否则 Time Limit Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk is cheap. Show me the code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j] 代表第 i 个人坐在第 j 个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target node),我应该用 BFS 还是 DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点 (x, y),我们俩的路径有 k 个交点,为了最小化时间复杂度,应该在 (x/2, y/2) 处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是 O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到 O(log n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你 Two Sum 刷了几遍了?”“别提了,昨天遇到一道 Hard 题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode 真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务