iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
Software Development

軟體架構備忘錄系列 第 26

Day 26 DevOps - CI自動建置 (知識點126~128)

  • 分享至 

  • xImage
  •  

思考的問題

DevOps中,如何觸發管理並觸發自動化建置呢?
除了後續測試之外,重要需要考慮的包含程式版本庫、程式碼審核、與自動化建置


程式版本庫

描述

程式版本庫 (Code Repository) 原先主要用途是將歷次更新的程式碼版本存入資料庫中。後續可比較歷次程式版本的差異,並以此為依據啟動新版程式的CICD流程。但現今伺服器設定、DockerFile、CICD流程、基礎設施即代碼等內容,也通常儲存在版本庫中。以便於快速比較、回溯各次修正內容。

使用情境

  • 備存程式碼
  • 備存DockerFile
  • 備存基礎設施即代碼、設定檔
  • 備存CICD流程

優點

  • 儲存歷次版本:每次修改的程式碼內容都儲存於版本庫
  • 比較版本差異:便於得知目前修改內容以及歷次修改的差異
  • 快速切換版本:提供指令快速取得特定版本的程式碼
  • 提供稽核軌跡:記錄各次程式送交的時間、人員、修改描述

不適合儲存

  • 大型影音資料:由於每個版本的內容都會儲存一份在版本庫,若每個版本的影音資料都儲存於版本庫,會佔據過多空間。
  • 程式運行狀態:程式運行時的狀態會產生大量細微差異的內容,這會造成紀錄的內容過多。
  • 系統運行Log:系統運行的Log應該由專門的Log Server進行記錄並進行大數據分析。

案例

  • Git
  • SVN

程式碼審核

描述

程式碼審核 (Code Review) 是CI過程中不可或缺的要素,程式碼送交版本庫後,應經由人工審核確認程式碼品質後,才可進行後續驗證與部屬。

常見審核內容

  • 設計正確:是否符合此次修改需求,是否過度設計
  • 符合程式碼標準:各組織都會有自己的程式碼撰寫習慣,確保符合這些習慣。
  • 註解:描述”Why”為何撰寫這段程式,而非”What” 這段程式在做甚麼。
  • 複雜度:確保程式碼易於瞭解、維護、使用
  • 文件:更新介面、架構後是否已更新相關說明文件
  • 命名:變數、方法等命名是否易於理解

自動化建置

描述

自動化建置 (Auto Build) 通過預先撰寫的Pipeline腳本,讀取版本庫中的程式碼、並且自動抓取相關套件後,進行程式編譯、封裝、產生簽章等動作。以產生軟體專案的成品(Artifact)。後續CICD工具將針對成品進行測試與部屬。

自動化建置常見流程

  • 啟動流程:可能是定時啟動、人工啟動 或是程式碼送交版本庫後自動啟動流程
  • 取得程式碼:自版本庫取得最新或指定版本的程式碼
  • 依賴套件管理:根據版本庫中指定的套件版本,由Maven、Gradle、npm、pip等工具進行依賴套件管理
  • 編譯、封裝:使用Maven、Gradle、Docker 等工具進行編譯並產生成品
  • 產生簽章:使用私鑰對成品產生數位簽名或通過產生Hash值以供後續驗證成品並未被竄改
  • 存放成品:將建置結果存放於Nexus Repository、Docker Hub等位置

可能建置成品

  • 可運行程式
  • 容器的Image

上一篇
Day 25 資料儲存 - 資料安全 (知識點122~125)
下一篇
Day 27 DevOps - CI功能測試 (知識點129~133)
系列文
軟體架構備忘錄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言