DevOps 自動化實踐:提升效率的 Bot

RightCapital發表於2020-05-29

在我們公司,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」

本作品採用《CC 協議》,轉載必須註明作者和本文連結

歡迎關注我們的微信公眾號「RightCapital」

相關文章