為什麼我們需要 CI / CD ?
在比較小且快速的循環中,持續驗證系統開發結果 ,小部分小部分地儘早確認,期望開發產出能符合原始需求,或依據產出進行快速修正。 簡單來說就是儘量減少手動人力,將一些日常工作交給自動化工具。例如:環境建置、單元測試、日誌紀錄、產品部署。
CI的目的
降低風險。
減少人工手動的繁複程序。
可隨時產生一版可部署的版本。
增加系統透明度。
建立團隊信心。
什麼是持續性整合(CI)呢?持續性整合的目的為:針對軟體系統每個變動,能持續且自動地進行驗證。此驗證可能包含了:
建置 (build)
測試 (test)
程式碼分析 (source code analysis)
其他相關工作 (自動部署)
驗證完成後,進一步可以整合自動化發佈或部署 (Continuous Delivery / Continuous Deployment) 。透過此流程可以確保軟體品質,不會因為一個錯誤變動而產生錯誤結果或崩潰(Crash)。此流程中的各類工具,也會產生一些回饋給開發者或其他角色,包含網頁/報表等等,用來追蹤並改善軟體潛藏的問題。
工具的選擇
Jenkins
談到 CI,最廣為人知且老牌的工具是 Jenkins。Jenkins的功能完整,也提供了上千個外掛 (Plugins) 來對應各種開發語言與工具。Jenkins目前已發展到了 2.x 版,新版本中對於 Pipeline 概念及容器 (Container) 整合也趨於完整,是一套可以自訂運用的系統。但也因為其功能強大、客製程度高,上手需要一些時間。然而一旦流程被定義,並整合好相關環境,它可以發揮持續性整合威力,大幅增加開發生產力
Git — 版本管理
GitHub — 程式碼託管、審查
CircleCI — 自動化建置、測試、部署
Docker — 可攜式、輕量級的執行環境(使用 Docker,統一開發者、測試人員、以及產品的執行環境。)
AWS Elastic Beanstalk — 雲端平台
Slack — 團隊溝通、日誌、通知
建立 CI / CD 流程雛形
我們結合了 Git Flow + Protected Branch Flow 的開發流程,流程如下:
開發者 (Developer) 先開立 (create) 一個功能分支 (feature branch)。
開發者提交一個 Pull Request, SCM 系統會自動觸發 Jenkins 進行建置以及測試。這個觸發通常是經由 Webhook 來實現。
在軟體建置完成後,在 Jenkins 增加一個步驟來送出原碼掃瞄 (Code Scan) 的請求給 Sonarqube 系統。Sonarqube 則在完成程式碼掃瞄後將結果寫回 SCM 系統。
由於我們在 SCM 上連結了 Slack,每個步驟完成(成功或失敗)的通知便可以送到 Slack 群組。
原碼審核者 (Reviewer) 可以到 SCM 上查看這個Pull Request的相關訊息,搭配 Code Scan的結果決定是否將這個分支合併 (merge) 回主線(develop/master branch)。
分支合併可以觸發另一個 CI 工作,使 Jenkins 將主線建置後部署到測試環境提供給其他人員進行測試。
訂閱:
張貼留言 (Atom)
網誌存檔
-
▼
2018
(30)
-
▼
10月
(17)
- 《面試官別再問》PHP-高並發和大流量的解決方案
- 《面試官別再問》PHP實作CI3 + JQuery前後端分離
- 《面試官別再問》PHP運用多執行緒(Multi-thread)實現非阻塞方法
- 《面試官別再問》跨站請求偽造(Cross-site request forgery)&& JWT (...
- 《面試官別再問》Web 前後端分離有意義嗎?
- 《面試官別再問》行為驅動BDD / 測試驅動TDD 軟體開發模式
- 《面試官別再問》What is RESTful API? GET 與POST 有什麼差別?
- 《面試官別再問》什麼是持續整合、持續發佈(Continuous Integration & Cont...
- 《面試官別再問》什麼叫Scrum 敏捷式開發?
- 《面試官別再問》MySQL 大量寫入的加速技巧
- 《面試官別再問》你的資料庫是怎麼優化?
- 《面試官別再問》資料庫正規化(Normalization)
- 《面試官別再問》ApacheBench 網站壓力測試使用方法
- 《面試官別再問》PHP 5到PHP 7常用語法整理
- 《面試官別再問》PHP include()和require()方法的差別
- 《面試官別再問》PHP常用特殊符號轉換以及一些常用函數
- 《面試官別再問》MySQL-MyISAM與InnoDB差別
-
▼
10月
(17)
-
詳細的請參考: 多程序還是多執行緒的選擇和區別 ,感覺這位牛人寫的特別清楚。下面我們再來看看php環境下使用多程序和多執行緒要注意的。 PHP是單進程同步模型,一個請求對應一個進程,I/O是同步阻塞的。通過nginx/apache/php-fpm等服務的擴展,才使得P...
-
這個系統的目標是讓 LINE 的訊息可以透過網頁介面讓客服人員回覆。 好的,這是一個從 LINE 用戶發送訊息開始,到客服人員在網頁上回覆的完整步驟流程: 打造高併發 LINE 客服系統:設計與實踐 前言:以技術解決即時通訊挑戰 在高流量即時通訊場景下,系統的穩定性與響應速度是企...
-
在高併發交易場景下,使用 Laravel 9 搭配 Redis 在 AWS EC2 和 RDS 環境中,需要一套全面的策略來應對挑戰。這涉及到架構設計、程式碼優化、服務配置和監控。 高併發交易問題的核心挑戰 資料庫鎖 (Database Locks) :高併發寫入導致行鎖、表鎖...
沒有留言:
張貼留言