DevOps 自动化实践:提升效率的 Bot

在我们公司,DevOps 团队的职责不仅是负责 CI/CD 和线上服务器的维护,我们也负责开发一些提升效率的自动化工具,比如 bot。

因为我们从事的是一个创造型的工作,所以我们痛恨一切重复的人力劳动。我们会特别观察同事们平日工作中的一些重复工作,并开发一些自动化工具来消灭这些场景。

这篇文章我们会分享一些被我们的 bot 自动化的一些场景。

1. 自动升包

1.1 当为包发布新版本时

目前我们公司内部有多个 PHP application 项目,这些项目中需要大量的逻辑重用,因此我们将很多共用的逻辑封装成了包,现在我们已经有 50+ 个 PHP libs 项目。

为了保证所有 project 之间为差异性最小,已经降低技术债积累,我们都要求开发者在发布一个包的新版本之后还需要负责将所有 project 依赖的版本都升级到最新,这个过程异常痛苦且容易出错,因为:

  1. 每次都需要到几个 project 中执行 composer upgrade
  2. 对不常用的包经常搞不清楚他被哪些 project 依赖了,经常升级有遗漏
  3. 国内网络的原因,每次 composer upgrade 都异常耗时

为此,我们开发了自动升包 bot,他会在开发者给包发布新版本后,自动给 project 升包,依照如下策略:

  1. 自动解析包的依赖,检查哪些 project 依赖了这个包
  2. 根据 Semantic Version,与 project 当前依赖的版本对比
    1. 如果没有 breaking change,则直接将升包变更 commit 到开发分支
    2. 否则,将升包变更commit 到一个分支上,并自动创建一个 PR,同时 assign 给 manager review。

1.2 当 Cut Master 后

我们有一个每周的 release 周期,我们希望在每周开始一个新的 release 周期时,将仓库中的所有包升级到最新版本以避免技术债积累,因为我们仓库的数量极多以及网络原因,这也是每周就要经历一次痛苦。

而现在,我们的 bot 会在每周 cut master 之后自动升包

Git Flow

我们公司遵循 Git Flow 的分支管理策略,所以每次切换开发周期阶段,我们都需要 repo 中执行以下操作:创建 release 分支,merge release 分支到 develop,merge release 分支到 master,删除 release 分支,为 master 打 tag。

而因为我们公司有数个 project,到每个 repo 中都执行这么一套重复操作流程也是每周都需要经历的。而因为我们所有的 project 遵循一致的开发周期,所以这个流程完全能够批量自动化,为此我们开发了 Slack bot,只需要对它下达两个指令,它就会在所有 project 中自动完成上述工作。

摇号取餐

咳咳,这个 bot 就有意思了,场景是这样,因为我们同事间关系非常融洽,所以我们每天都会聚在一起点餐。但是吃饭的人这么多,所有人在同一个时刻一起浩浩荡荡地下楼取餐显然不是最优解,因此我们认为只需要一两个人下楼一次性把大家的午餐全部取回。怎么决定谁下去取餐,同时又不破坏同事间融洽的关系呢?我们探索出了:公平摇号!

只需要告诉大傻(我的猫)今天有哪些人一起点了餐,大傻就会随机选出两个人作为今日的取餐人。为什么选两个人呢? 还是为了维护同事间的融洽和谐的关系,让天选之人不过于孤独。

结语

以上就是我们公司中最常用的自动化 bot,当然实际中远远不止这些,但因为其中大多和我们自己的业务逻辑绑定太深或覆盖场景不通用,没有太多分享的价值。

如果你对我司的自动化 Bot 文化感兴趣,不妨 【投个简历】 加入我们。


欢迎关注我们的微信公众号「rightcapital」

bot
本作品采用《CC 协议》,转载必须注明作者和本文链接
欢迎关注我们的微信公众号「RightCapital」
RightCapital
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

天选之人在此; :joy:

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!