Skip to main content

CI / CD (持續整合 / 持續部署)

和康顧問 版權所有 2023 © All Rights Reserved

現今企業大多會採用敏捷式開發,然而在開發、維運、程式碼審查、版本測試等工作將會耗費許多時間與人力成本,為了使以上流程不再人工作業,反而以自動化的方式進行,出現了稱為CI/CD工具。CI/CD工具不僅能將以上流程自動化、加速開發過程、減少時間與人力成本的損耗,還能為為開發人員審核並偵測程式碼有無問題。關於CI/CD的概念將由以下進行說明 :

CI/CD 概念

在介紹CI/CD的概念之前,先來講述 DevOps。 DevOps 簡單講就是 Development + Operation,也就是開發與維運,但大多數的人都會說是「開發」、「測試」、「維運」三者的結合,如同下圖所示 :
當三者交集時,才稱之為DevOps。DevOps 最為核心的要領為 CLAMS,分別為 :
  • Culture
  • Auaomation
  • Lean
  • Measurement
  • Sharing
DevOps 的五大要領此處不做詳細說明,詳情請網上查看。DevOps 的目標是開發團隊與維運團隊因為思考點、出發點與想法常秉持著不同意見,造成一些衝突與摩擦,為了解決衝突、資訊公開透明化、增加雙方團隊的合作性,才誕生了DevOps,但這是最初也是其一的目標。
從其他文章會發現DevOps最為重要的目標為速度,從客戶需求、訪談到產品正式上線的時間越短,能得到的回饋與市場就越大,但單純快是不行的,還要兼顧品質!如果只有快,而欠缺品質,只是把有問題的程式碼或bug上線,這種種作法只會徒然破壞企業名聲,也因此,DevOps的目標與概念是讓整個開發工作能夠同時兼顧速度與品質,所產生的一套合作方式(文化)。透過開發人員與IT人員的協同運作、技術整合、流程自動化,可有效提升組織間的合作效率及產品品質。而CI/CD工具也是為了此概念而誕生的自動化工具,接下來就為大家講解CI/CD概念。

CI (Continous Integration) 持續整合

持續整合(Continous Integration,CI)顧名思義是指當開發人員完成階段性程式碼時,透過自動化工具進行測試、驗證,檢查程式碼有無問題,並建置即將部署上線的版本。CI的流程為 :

  • 程式建置(build)
    開發人員在開發並撰寫程式碼的時候,通常會使用版本控制進行Commit&Push,且Push上去的程式碼不會因為環境變數、套件不同而造成無法編譯,如果工程師在每次Push後都需手動編譯的話會太麻煩,因此可透過自動化編譯的方式將程式建置起來。

  • 程式測試
    當程式編譯完成後,會透過單元測試或整合測試,測試程式碼有無問題、功能是否正確、是否影響到現有功能等,當然,前提是單元測試等需寫得好,整個測試過程才會順利。

  • 目的
    在CI階段,可以有效降低人為疏失的風險、進行版本控制,並減少團隊的loading,工程師只要Push上去即可,後面就由CI工具以自動化的方式進行程式碼的檢查、測試與驗證,只要發現錯誤,即可立即修改。不僅節省許多時間,還減少人工手動的作業。

CD (Continous Deployment) 持續部署

持續部署(交付)(Continous Deployment,CD)為CI階段完後的下個步驟,測試完成後的程式碼將會透過CD工具以自動化的方式部署至伺服器,並使其運作且公開對外服務。此外,較好的設計為運作過程中會一併啟動監控程式,監控服務是否發生異常現象,並主動通知相關人員以利第一時間解決。 底下為CI/CD流程圖 :

CI/CD 的好處

1. 維護軟體品質

有寫過程式的人一定都知道,如果能及時發現bug並修正錯誤,就能避免軟體上線後所造成的災害,以及出現難以修復的狀況。透過CI/CD工具,能自動化的檢查程式碼有無bug、是否正確且符合標準,確認無誤後才發布並上線,便可大幅降低錯誤發生的機率,提高軟體的品質。

2. 減少各項成本

因程式碼的編譯、檢查、測試,甚至是部署的動作都以自動化的方式進行,且透過CI/CD工具快速找出問題點,預防小錯誤演變成複雜問題,不僅減少大量的時間與人力成本,還加快了整體開發的流程。

CI/CD 工具

市面上有非常多的CI/CD工具,底下列出幾種較多人常用的工具 :

  1. Github (版本控制工具)
  2. Gitlab (版本控制工具)
  3. Jenkins (自動化建置工具)
  4. Circle CI (自動化測試、建置、部署工具)
  5. Drone (自動化建置工具)
  6. Docker (迅速部署環境工具)
  7. ELK (Elasticsearch : 日誌或Log搜尋引擎工具、Logstash : Log 過濾、整理與分析工具、Kibana : 資料視覺化工具)
  8. Telegram (通訊或通知工具)
  9. Slack (通訊或通知工具)