一、持續集成的概念
互聯網軟件的開發和發布,形成了一套標准流程,其中最重要的組成部分就是持續集成(Continuous Integration)。原先手工部署包含拉取代碼、編譯打包、構建鏡像、發布鏡像、運行鏡像,通過持續集成將這些流程自動化。
持續集成指的是頻繁的將代碼提交到主干,優點有:1.能快速發現錯誤;2.防止分支大幅度偏離主干。持續集成強調了開發人員提交新代碼之后立刻進行構建、單元測試,根據測試結果可以確定新代碼是否能和原有代碼正確集成在一起,與持續集成相關的,還有兩個概念:持續交付和持續部署。
持續交付(Continuous delivery)指的是頻繁的將軟件的新版本交付給質量團隊和用戶,以供評審,如果評審通過,代碼就進入生產階段。持續交付可以看做持續集成的下一階段,他強調的是,軟件隨時是可交付的。
持續交付是在持續集成的基礎上,將持續集成后的代碼部署到更貼近真實環境的生產環境中。在持續交付中,代碼能自動部署到測試環境、類生產環境中,最后再手動部署到生產環境中。
持續部署(Continuous deployment)是持續交付的下一步,指的是代碼通過評審后,自動部署到生產環境中。持續部署的目標是代碼在任何時刻都是可部署的,可以進入生產環境。持續部署的前提是能夠自動化完成測試、構建、部署等步驟。在持續部署中,能將代碼自動部署到測試環境、類生產環境以及生產環境中。
二、持續集成的操作流程
根據持續集成的設計,代碼從提交到生產,包含以下流程:
提交
第一步,開發者向代碼倉庫提交代碼,所有后續的步驟都始於本地代碼的一次提交(commit)。
測試(第一輪)
代碼倉庫對commit操作設置了鈎子(hook),只要提交代碼或者合並進主干,就會啟動自動化測試。
第一輪至少跑完單元測試。
構建
通過第一輪測試,代碼合並進主干,就可以交付了。
交付后,就進行構建(build),再進入第二輪測試,構建指的是將源碼轉換為可以運行的實際代碼,比如安裝依賴、配置各種資源(樣式表、js腳本、圖片等)等。
常用的構建工具有:Jenkins、Travis、Codeship等。
測試(第二輪)
構建完成后,就進行第二輪測試,第二輪是全面測試,包含單元測試、集成測試,以自動化測試為主,新版本的每一個更新點都要測試到。
部署
通過第二輪測試,代碼就是可直接部署的版本,將這個版本的所有文件打包存檔,發到生產服務器,生產服務器將其解包成本地的一個目錄,再將運行路徑的符號鏈接指向這個目錄,然后重新啟動應用。
回滾
一旦之前的版本發生問題,就要回滾到上一個版本的構建結果。最簡單的做法是修改符號鏈接,指向上一個版本的目錄。
本文是基於原作者文章的總結,原文地址:www.funtl.com。