Zadig和ChatOps能不能擦出火花

网站建设3年前发布
38 0 0

Zadig 是目前很火的云原生持续交付平台,具备灵活易用的高并发工作流、面向开发者的云原生环境、高效协同的测试管理、强大免运维的模板库、客观精确的效能洞察以 及云原生 IDE 插件等重要特性,为工程师提供统一的协作平面,可以满足大部分的企业交付场景。,但是,大家有没有遇到过以下情况:,总之,随时随地都可能叫你发流水线,对于这种无聊而又频繁的操作,有没有更好的解决办法呢?,Zadig 在1.15.0版本的时候,已经很友好的支持手机端了,按理说应该能满足平时的工作需求。但是,作为一个爱折腾的运维,并不满足于此,我希望能够通过机器人的方式来完成某些运维工作,比如合并分支、发流水线、执行脚本等,这样做主要有以下两个好处:,这其实就是 ChatOps 的实现,但是这只是初级阶段——也就是字符串匹配的方式进行操作,但是随着人工智能、机器学习等技术不断成熟,ChatOps 的交付性体验会越来越好。,当然,我还停留在初级阶段,本文也是带大家通过钉钉机器人的方式发布 Zadig 流水线。,ChatOps 的核心在于把 WEB 端或者命令行下的人工操作,转换能通过聊天工具机器人来完成,所以整体的架构并不会很复杂,如下:,20230306005318c43494a447ff2fb5b163563d65958e73eab832539,整体流程如下:,要想接入到 ChatOps,需要服务有对应的开放 API。所幸,Zadig 提供了一些 API【1】,可以到文档中进行查看学习。,为了不重复造轮子,我使用的是 Github 上一个 ChatOps bot 框架,【2】,该框架已经实现了命令行、微信网页版、企业微信、钉钉等聊天机器人,我们只需要在此基础上实现具体的业务即可。,要实现对 Zadig 进行 API 操作,就需要我们封装 HTTP 请求,为了便于操作,我将 Zadig 的一些 API 封装了一个 SDK【3】,该 SDK 简单实现了 Zadig 开发 API 的功能(没仔细调试,也许有 Bug),如下:,20230306005318252979a995f8c9752126355f1bcd5c8e07549c657,现在我们只需要在项目中实现自己需要的功能即可。,首先,需要创建 Zadig 请求,创建一个zadig/zadig.go文件,实现 Zadig 初始化,代码如下:,!! PS:token、url 这些配置其实是可以放到配置文件中,这里为了便于演示,就放在代码文件中了。,其中:,然后再在该文件中实现CreateWorkflowTask方法,该方法用于执行工作流,如下:,该方法接收执行工作流所需的参数,然后调用 SDK 完成执行。由于我这里都是构建部署​的方式,所以只写了Targets实现。,上面简单的把 Zadig 执行工作流的请求封装了,接下来就注册 Zadig 插件了。,rboot 项目【2】采用插件的方式注册新的指令,系统会自动把这些指令加载到应用中,并且可以通过使用help命令查看运行规则。,在robot/plugins​中创建zadig/zadig.go文件,用来注册 zadig 执行流水线指令,内容如下:,其中:,Action 脚本的处理函数,Ruleset 是指令规则,Usage 使用方式,Description 描述信息,workflow 是工作流名称,branch 是分支名,serviceType 是服务类型,有 k8s 和 helm 服务,env 部署环境信息,上面的匹配规则、环境信息等比较简单粗暴,最好是把这些数据存到数据库里,我这里为了不引入额外的组件就直接放代码中了。,业务代码开发完,我们需要把 zadig 插件引入,在 robot/plugins/plugins.go 中 import 即可,如下:,至此,执行流水线业务开发完成。,开发完成就要部署,部署要分几个阶段:,创建聊天机器人,该聊天机器人不是钉钉的普通自定义机器人,而是需要在钉钉开发者后台【4】创建机器人,具体操作见文档【5】,这里不再赘述。,创建到内部机器人过后,就会在钉钉上生成一个测试群并创建了一个机器人,如下:,2023030600510146d6b3792250c009ea3084151509d29643bad4604,该机器人和普通机器人的不同之处在于多了一个 POST 地址,该地址是我们创建机器人的时候配置的,也是应用的访问地址。,随着机器人的不断开发,关键词会越来越多,所以我这里选择的是加签校验。,部署应用,(1)修改配置文件,为了简单,我直接将配置文件放到代码仓库,推到镜像中。在代码根目录下创建.env 文件,内容如下:,配置转接器名称以及钉钉机器人相关信息。,(2)添加 Dockerfile,用于制作应用镜像,如下:,(3)添加应用 K8S YAML 配置清单,主要有 deployment、service、ingress 资源,如下:,(4)在 Zadig 上部署应用 由于我们这里使用的 YAML 类应用,所以先在 Zadig 上创建一个 YAML 类项目,如下:,20230306005318588337d67c8e97737ca4323b83345d2a39208b319,然后在项目中创建添加服务,我们选择从代码仓库中同步,如下:,2023030600570473fb2ce674b11189f896574742128c101fe85d649,接下来我们需要给该应用增加构建操作,配置如下:,20230306005320021cf7408312f4eac9d35713bbd37e607b8ad3869,接着我们把服务添加到环境即可。,现在就可以执行工作流发布任务了,如下:,20230306005103889123273d27e2d4e43961269f2bf22f37a1c9228,测试机器人,现在我们可以在群里进行测试了,先测试简单的help​,看能不能输出我们想要的帮助信息,如下:,202303060051040608cfb24a02633d28d887dc3eb585964845b3755,我们发现可以得到我们想要的信息。,接下来测试发布 Zadig 流水线,如下:,20230306095217164791b02c98c83e3137943697c24af4d747b9383,可以看到给我们反馈的是流水线创建成功,那到底有没有成功呢?,我们到 Zadig WEB 端查看如下:,20230306005104b7d4baf37333005dbe1639c11b727f668359ce243,我们可以看到有一个由 openAPI 触发的流水线正在运行,这表示流水线已经触发成功。,为了得到工作流执行的最终结果,我们可以在 Zadig 上为工作流添加 IM 通知,同样可以使用该机器人,这样就形成闭环了。,到此,我们把 Zadig 和 ChatOps(聊天机器人)结合就算完成了,当然,这种机器人需要我们根据规则来玩,如果你输的指令和规则不匹配,就没法进行下一步了。,在整个过程中,还是发现一些问题:,聊天机器人,可以接入很多能力,如果某种操作比较频繁且无趣,可以考虑做成各种自动化,chatops 就是其中的选择之一。,【1】Zadig 开放 API https://docs.koderover.com/zadig/v1.15.0/api/usage/,【2】ChatOps 框架 https://github.com/ghaoo/rboot.git,【3】Zadig SDK https://github.com/joker-bai/go-zadig.git,【4】钉钉开发者后台​ https://open-dev.dingtalk.com,【5】钉钉内部机器人文档 https://open.dingtalk.com/document/robots/enterprise-created-chatbot,

© 版权声明

相关文章