1. 程式人生 > 其它 >20211009之隨筆(開發環境-CI構建流程)

20211009之隨筆(開發環境-CI構建流程)

內部各業務方的持續整合也大都是由研發團隊的 QA 負責的,我們CI 工具選擇了比較常用的 Jenkins,

通常,一個持續整合流程會包括以下步驟:程式碼檢出、單元測試、靜態掃描、編譯、構建、映象掃描和測試部署。好的持續整合流程一定是面向質量的,所以,在實踐過程中除了工具和流程,還需要做好程式碼質量相關的工作。

程式碼檢出: 通常需要在流水線中配置程式碼源、ssh 祕鑰以及程式碼分支等資訊,為了優化程式碼檢出效能,CI/CD 流水線會採用的 git 淺拷貝的方式來加速整個過程。

靜態掃描: 這是流水線至關重要的一環,執行時會將掃描的資料上傳至使用者預先配置好的 SonarQube 平臺,並且通過 SonarQube 的 QualityGate 進行質量卡點,除了 QualityGate,使用者還可以自定義一些流水線特有的卡點規則,並且配置通過郵件、網易 popo 等通知執行結果。

單元測試: 這是 CI 過程中必不可少的一環,CI/CD 流水線整合了常用的 Jacoco 工具,方便使用者在執行單元測試時生成對應的 UT 和覆蓋率報告,報告的內容可以在流水線執行詳情頁檢視,同時支援使用者設定單元測試通過率、UT 覆蓋率卡點,併發送相應的郵件通知。

程式碼編譯: 支援大部分主流的程式語言,比如 Java、Node.js、C++、Golang 等,並且針對各類語言做了相應的編譯加速方案,支援 Maven、Gradle、C++、Go mod 構建快取。

映象構建: 支援 Docker out of Docker、Kaniko 等多種構建方式,同時整合了網易輕舟 Harbor,集成了 Harbor 的映象掃描功能,支援在流水線執行過程中執行映象掃描、檢視映象安全報告,同時支援安全項卡點以及郵件通知等功能。

整合測試:CI/CD 流水線與網易內部自動化測試平臺 GoAPI 做了整合,使用者可以預先在平臺側配置好相應的介面執行集,然後在流水線中選擇對應的執行集執行,並在流水線詳情頁中檢視執行集的通過率,同時支援卡點以及郵件通知。

流水線觸發器: 多種觸發器,比如定時觸發、PollSCM、Webhook 以及流水線串聯觸發,其中 Webhook 還額外提供了對 Gitlab、Harbor 的支援,支援從 Gtilab、Harbor 的 payload 中提取相關引數,並在流水線階段中使用。

對於大部分團隊來說,CI 可能是由 QA 維護的,因此在實際使用過程中,會將線下環境的 CI 和線上分離開,線上通常更加註重持續部署,主要由 QA、PE 等角色負責,流程上會簡化一些,更加註重運維規範、上線稽核。

我們的CI整合較簡單一些,克隆程式碼(程式碼檢出)→編譯→歸檔程式碼(構建)→映象掃描,測試部署需要手動執行

什麼是容器映象掃描、靜態掃描

映象掃描是指分析容器映象的內容和構建過程,以檢測安全問題、漏洞或錯誤實踐。

靜態掃描是指在不執行程式碼的方式下,通過詞法分析語法分析控制流資料流分析等技術對程式程式碼進行掃描(測試),驗證程式碼是否滿足規範性、安全性、可靠性、可維護性等指標的一種程式碼分析技術