流水線有什麼價值? 如何搭建流水線?

老马啸西风發表於2024-12-01

前言

大家好,我是老馬。

“大不了就進廠打螺絲”,這大概是很多人的自嘲,或者是無奈的退路。

我們通常用“打螺絲”來指代一些簡單、重複、機械繁瑣的工作。

眾所周知,一件事物的複雜度是固定的,任何一個零件的加工都需要很多步驟。

那麼,如何讓其變得簡單固定呢?

工廠中的流水線

流水線是工業時代非常偉大的發明。

本質上是對一個複雜的流程進行拆解,改為標準化-簡單化-可度量-可規模化的一個流水線步驟。

好處是工人的門檻降低了很多,每個人只需要專注處理其中的一個小步驟,越簡單,越容易上手;越簡單,也不容易出錯。

當然,每一道工序是否合格,都可以在後續加一道 QA 檢測,驗證是否合格。

這種模式非常適合規模化的生產,可以隨著投入人數的增加,效率大幅度提升,及時響應市場的需求。

缺點

甘蔗不能兩頭甜,流水線模式的缺點也是有的。

流水線的基礎設施要求比較高,前期需要經過長期的規劃+建設,投資成本比較高。

且一旦建成,工業上想隨意修改的成本也會相對較高。

對工人而言,因為工作相對簡單,很容易厭倦和缺乏工作激情。

軟體中的流水線

工業的發展要比軟體早得多,所以有很多值得學習的地方。

1970 年,瀑布式開發模型由溫斯頓·羅伊斯提出,將軟體生命週期劃分為制定計劃、需求分析、軟體設計、程式編寫、軟體測試和執行維護等六個基本活動,規定了它們自上而下、相互銜接的固定次序。

1994 年,Grady Booch 提出持續整合。

看的出來,其實也沒有多少年。大部分公司,還是停留在瀑布開發模式中。

為什麼能提效?

個人理解,最主要的是 CI/CD 讓我們在協作時,可以讓程式碼保持是最新的。

每一個節點,可以新增嚴格的 QA 檢測,比如程式碼是否合併了最新的分支,sonar 掃描質量是否過關,單元測試覆蓋率是否滿足,迴歸用力地透過率是否滿足要求,介面文件自動更新等等。

這樣可以部分功能的提測,讓測試先介入進來。

測試不透過,可以打回讓開發改進最佳化。

因為是持續部署,所以運維這一步已經提前介入了,而不用等到最後交付的時候。

編碼、構建、測試、部署、監控和反饋,有些步驟的自動化減少了人工的干預,更加實時,而且錯誤率也更低。

如何搭建流水線呢?

說的挺好的,令人有些心動!

那麼,哪裡可以買到呢?(劃掉)怎麼自己搭建呢?

技術選型

流水線涉及到的點還是比較多的,真正轉型是一個比較漫長的過程,可以逐步改進。

下面羅列一些老馬比較看好的技術選型:

1. 版本控制系統 (VCS)

  • Git:Git 是最常用的版本控制工具,幾乎所有流水線都會與 Git 整合。推薦使用 GitHub、GitLab、Bitbucket 等託管平臺,或者自己搭建 Git 伺服器。
Gitlab 有可以本地部署的版本,大多數中小型公司的不二選擇。

2. 持續整合工具 (CI)

  • Jenkins:Jenkins 是一個非常流行的開源 CI/CD 工具,具有豐富的外掛支援,能夠與 Git 整合,實現自動化構建、測試等功能。

  • GitLab CI/CD:如果你使用 GitLab,它自帶 CI/CD 功能,配置較為簡便,適合中小型專案。

Jenkins 到目前為止還是技術的主流。

3. 構建工具

  • Maven / Gradle(Java):如果是 Java 專案,Maven 和 Gradle 是常見的構建工具,能夠處理依賴管理和專案構建。

  • npm / yarn(Node.js):對於 Node.js 專案,npm 和 yarn 是常見的包管理工具,支援構建、測試等。

  • Makefile:對於 C/C++ 專案,Makefile 是經典的構建工具。

老馬是 java 開發,平時 maven 用的最多;前端小夥伴對於 npm 應該不會陌生。

4. 程式碼質量和測試工具

  • SonarQube:一個開源的程式碼質量檢查工具,支援多種語言,能夠檢測程式碼的潛在問題、漏洞、重複程式碼等。

  • JUnit / TestNG / Mocha / Jest:根據不同的開發語言,選擇合適的單元測試框架。

  • Selenium:用於 Web 應用的自動化測試,可以整合到 CI 流水線中。

  • Linting 和格式化工具(如 ESLint、Prettier):確保程式碼風格統一,減少人工檢查的負擔。

單元測試還是推薦大家寫一寫,當然相對較長的業務鏈,還是需要歸回用例才更有價值。

SonarQube 是一個非常好用的 QA 工具,直接部署即可。

5. 容器化和虛擬化

  • Docker:容器化是現代軟體開發的趨勢,Docker 能夠保證環境一致性,並簡化部署。將應用和其依賴打包成映象,使得在開發、測試、生產環境中都能得到一致的體驗。

  • Kubernetes(可選):如果你的專案需要部署到叢集或雲環境,可以考慮使用 Kubernetes 管理容器。雖然 Kubernetes 本身較為複雜,但它能夠解決微服務架構中容器編排和服務發現等問題。

容器化這一塊老馬一直在使用,但是實際參與建設的並不多。

不過現在很多公司的 docker 容器化還是挺成熟的,用起來也確實方便快捷。

6. 部署工具

  • Ansible:一個簡單的自動化部署工具,適合管理伺服器的配置和部署任務。

  • Terraform:用於管理基礎設施的開源工具,適合部署到雲平臺。

  • Helm:如果使用 Kubernetes,可以使用 Helm 來簡化 Kubernetes 應用的部署和管理。

部署工具一般推薦自建,或者二開。

核心能力就是 ssh 到指定機器,然後排程執行對應的指令碼。

自建的好處是,後續可以更加靈活的定義巡檢作業+監控報警自愈的流程打通。

7. 監控與日誌管理

  • Prometheus + Grafana:監控工具,Prometheus 收集監控資料,Grafana 用於展示資料,適合在生產環境中使用。

  • ELK Stack(Elasticsearch, Logstash, Kibana):用於日誌收集、儲存和視覺化,幫助開發和運維人員快速定位問題。

  • CAT:CAT 作為服務端專案基礎元件,提供了 Java, C/C++, Node.js, Python, Go 等多語言客戶端,已經在美團點評的基礎架構中介軟體框架(MVC框架,RPC框架,資料庫框架,快取框架等,訊息佇列,配置系統等)深度整合,為美團點評各業務線提供系統豐富的效能指標、健康狀況、實時告警等。

  • SQL:SQL 這一塊主要是一些業務的處理,目前市面上看起來沒有特別好的,主要是自研。主要就是 SQL 的分散式定時排程。

監控報警是很重要的一個環節,也是老馬最近一直在重點學習的內容。

小結

後續老馬準備專門用一系列專題,實踐搭建一下流水線+DevOps 平臺。

對於中小公司,採用這些工具既能夠保證高效的開發流程,又能夠透過自動化提高程式碼質量和交付速度。

當然,流水線的實際搭建+推廣+使用確實會有很多阻力,但是收益也是巨大的。

分工提升效率,協作促進繁榮。

希望本文對你有所幫助,如果喜歡,歡迎點贊收藏轉發一波。

我是老馬,期待與你的下次相遇。

隨筆

從千萬粉絲“何同學”抄襲開源專案說起,為何純技術死路一條?

資料來源的統一與拆分

監控報警系統的指標、規則與執行閉環

我們的系統應該配置哪些監控報警項?

監控報警系統如何實現自監控?

java 老矣,尚能飯否?

一騎紅塵妃子笑,無人知是荔枝來!

張居正的考成法,對我們有何參考價值?

mongodb/redis/neo4j 如何自己打造一個 web 資料庫視覺化客戶端?

DevOps 平臺越發展,開發運維越快失業?

開源如何健康長久的發展

為什麼會有流水線?

既然選擇了遠方 便只顧風雨兼程

銀行是如何掙錢的?

相關文章