持續集成、持續交付、持續部署、Jkens、git


一  持續集成、持續交付、持續部署

    

       1. 持續集成

                  持續集成指的是,頻繁地(一天多次)將代碼集成到主干。持續集成的目的,就是讓產品可以快速迭代,同時還能

            保持高質量。它的核心措施是,代碼集成到主干之前,必須通過自動化測試。只要有一個測試用例失敗,就不能集

            成。持續集成並不能消除 Bug,而是讓它們非常容易發現和改正。

            它的好處主要有兩個。

          (1)快速發現錯誤。每完成一點更新,就集成到主干,可以快速發現錯誤,定位錯誤也比較容易。

          (2)防止分支大幅偏離主干。如果不是經常集成,主干又在不斷更新,會導致以后集成的難度變大,甚至難以集成。

            與持續集成相關的,還有兩個概念,分別是持續交付和持續部署。

       2. 持續交付

                  持續交付(Continuous delivery)指的是,頻繁地將軟件的新版本,交付給質量團隊或者用戶,以供評審。如果評

           審通過,代碼就進入生產階段。

                  持續交付可以看作持續集成的下一步。它強調的是,不管怎么更新,軟件是隨時隨地可以交付的。

       3. 持續部署

                  持續部署(continuous deployment)是持續交付的下一步,指的是代碼通過評審以后,自動部署到生產環境。

                  持續部署的目標是:代碼在任何時刻都是可部署的,可以進入生產階段。

                  持續部署的前提是能自動化完成測試、構建、部署等步驟。它與持續交付的區別,可以參考下圖。

                        

       4. 持續集成的流程

           根據持續集成的設計,代碼從提交到生產,整個過程有以下幾步。

         (1)提交

                  流程的第一步,是開發者向代碼倉庫提交代碼。所有后面的步驟都始於本地代碼的一次提交(commit)。

         (2)提交

                  代碼倉庫對 commit 操作配置了鈎子(hook),只要提交代碼或者合並進主干,就會跑自動化測試。

                  測試有好幾種:

                 單元測試:針對函數或模塊的測試

                 集成測試:針對整體產品的某個功能的測試,又稱功能測試

                 端對端測試:從用戶界面直達數據庫的全鏈路測試

                 第一輪至少要跑單元測試。

         (2)構建

                         通過第一輪測試,代碼就可以合並進主干,就算可以交付了。

                  交付后,就先進行構建(build),再進入第二輪測試。所謂構建,指的是將源碼轉換為可以運行的實際代碼,比如

                  安裝依賴,配置各種資源(樣式表、JS 腳本、圖片)等等。

                  常用的構建工具如下。

                  Jenkins

                  Travis

                  Codeship

                  Strider

                  Jenkins 和 Strider 是開源軟件,Travis 和 Codeship 對於開源項目可以免費使用。它們都會將構建和測試,在一

                  次運行中執行完成。

         (3)測試(第二輪)

                         構建完成,就要進行第二輪測試。如果第一輪已經涵蓋了所有測試內容,第二輪可以省略,當然,這時構建

                 步驟也要移到第一輪測試前面

                         第二輪是全面測試,單元測試和集成測試都會跑,有條件的話,也要做端對端測試。所有測試以自動化為主,

                 少數無法自動化的測試用例,就要人工跑。

                 需要強調的是,新版本的每一個更新點都必須測試到。如果測試的覆蓋率不高,進入后面的部署階段后,很可能會

                 出現嚴重的問題。

         (4)部署

                         通過了第二輪測試,當前代碼就是一個可以直接部署的版本(artifact)。將這個版本的所有文件打包

                 ( tar filename.tar * )存檔,發到生產服務器。生產服務器將打包文件,解包成本地的一個目錄,再將運行路徑的符

                號鏈接(symlink)指向這個目錄,然后重新啟動應用。這方面的部署工具有 Ansible,Chef,Puppet等。

         (5)構建

                         一旦當前版本發生問題,就要回滾到上一個版本的構建結果。最簡單的做法就是修改一下符號鏈接,指向上

                  一個版本的目錄。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM