基于 CODING CD + Nocalhost 在大型应用的 ChatOps 实践

2021-08-19 19:28:07 +08:00
 CodingNET

本文作者:红亚科技 CTO——卢兴民

红亚科技聚焦信息技术发展,为信息技术相关专业提供优质教学服务

背景

ChatOps 最早起源于 GitHub,它以沟通平台为中心,通过与机器人产生对话和交互,使开发人员只需在聊天窗口即可完成 DevOps 所承载的工作。

服务 600+ 高校的 IT 实训教学平台“青椒课堂”,为何选择 ChatOps 来承载业务,又如何将 SaaS 工具与开源工具结合形成完整的技术方案,本篇文章将为你揭晓答案。

为什么“复杂应用”开发测试阶段需要 ChatOps

首先来看我们团队当前的部署流程所需要的步骤,需要经过“等待 CI 构建成功”、“发布单选择所需制品及环境”、“部署”这么几个流程。其中制品的选择,在每次发布时,都需要进行选择,当组件较多时,尤为繁琐。

并不是所有的场景都需要 ChatOps,这里重点强调“复杂应用”,是因为应用复杂度提高后,会面临配置复杂、制品复杂、流程复杂的局面,因此需要 ChatOps 工具来降低开发测试过程中的部署难度。而对于简单的应用,例如项目初始阶段的单体应用,则不必大费周折折腾复杂的工具流程,在 CI 中集成小部分自动更新测试环境的流程就很高效。

如何结合 CI/CD 体系和 IM 开放平台构建 ChatOps 工具

当前 CI/CD 落地的现状及选型思考

持续集成

持续集成是所有流程的基础,目标也很明确,就是将构建环境、制品类型进行统一,便于进行后续的部署使用。在当前容器化流程的背景下,我们也是选择了容器镜像作为最终制品,开发人员产出统一均为容器镜像,方便进行部署。所有的代码仓库,无论复杂与否,都会创建 Jenkinsfile 进行构建。

应用定义选型

在应用定义的选择上,经历了最初的 PaaS 平台自定义应用模型、代码仓库存储静态 Manifest 文件后,最终选择了 Helm 作为应用定义的工具,主要基于一下几个方面考虑:

应用部署工具选型

在应用部署工具上选择上使用了 CODING CD,主要基于以下的内容进行考虑:

将 Helm chart 及容器镜像作为制品输入,通过制品绑定,将 Helm chart 版本与 image 版本进行分离,实现应用定义和应用组件版本的独立配置。

使用 values 文件引用,方便的对“某一类”环境进行统一配置,例如公用云不同厂商间的差异化配置。

构建适合团队的 ChatOps 体系

ChatOps 工具构建的目标

开发测试过程流程梳理

如下图所示,我们对开发测试的整个部署流程进行梳理。其中最为繁琐的、需要多次人工操作的部分就是“部署配置” + “版本选择”这个过程,如何将制品按照一定的规则更新到对应的环境中,并且能够记住当前的选择便是这个流程的关键。

首先,我们需要将整个部署流程进行模板化,这里我们使用 Namespace 作环境间的隔离,将环境中最关键的两个因素,Namespace 、访问域名作为启动参数,将单一的部署流水线模板化。

通知隔离

通过接管 Webhook 事件,将原有的项目协同通知进行重新分发。当项目协同工具中产生迭代创建时,自动触发创建一个预制好 DevOps 机器人的群,并利用 IM 提供的卡片能力对消息进行优化,增加便捷的入口。项目协同事项变更时,自动对群内成员进行增删。同时,环境也与当前的迭代关联,在需要时通过聊天指令进行快速创建。在迭代结束时,回收群、测试环境等,进行清理工作。

当前 ChatOps 主要实现以下指令:

当环境创建成功后,ChatOps 控制器会记录当前环境的制品选择,当对应的制品有更新时,会自动更新当前的环境,实现测试环境一次配置,整个迭代内自动更新。

开发测试阶段如何快速调试应用

在日常的开发过程中,基于上述的 ChatOps 流程进行环境的部署和更新已经能满足大部分的需求,代码推送后,也可以在分钟级做到环境的更新。

单对于联调和测试时遇到的问题需要修改时,等待一个 CI/CD 的流程显得非常漫长,另外开发新的功能和新组件时,想快速放入测试环境中也较为繁琐。因此我们在寻求一个工具,用于快速调试开发环境。

在早年的服务端开发时,我们时常使用 sftp 插件,将本地代码同步到服务器上进行执行,那么 Nocalhost 就是容器化的 rsync 工具。Nocalhost 在进入调试模式时,把对应的 Container 镜像替换为指定的开发镜像,并增加一个文件同步的 Sidecar,可以将本地的代码同步至容器中,对于脚本类型的语言可以直接进行调试,像 Golang 需要编译的类型,可以在本地构建进行同步,也可以直接在容器中进行构建。

整个使用的过程中需要留意的关键步骤是制作适合开发调试使用的镜像,Nocalhost 提供了常见环境的开发镜像,但应用于自己团队内部时,镜像所包含的内容往往与组件相关,此时就需要定制一个适用于当前业务的开发镜像。主要基于以下几点考虑:

总结

随着业务的复杂程度提高,开发测试流程中重复繁琐的操作会变得越来越多,基于已有的 CI/CD 体系构建 ChatOps 工具是解决这种问题的一个思路,选择适合自己团队的方案才是最为重要。

点击立即开启高效云端研发工作流

592 次点击
所在节点    Coding
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/796857

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX