前端持續集成之——概念篇

在談持續集成之前,我們先來回顧一下傳統的軟件開發模式-瀑布開發模型

ä¼ ç»å¢éç»ç»æ¹å¼

在傳統軟件開發流程中,開發、測試、運維三者是割裂開的,軟件開發流程被分割成了多個獨立的環節,分別由不同的人員執行。這使得軟件開發過程中需要付出高昂的溝通成本,層層手動的流程將大量時間浪費在了重複的任務環節。舉個例子:

  1. 公司的一個老項目來了個大版本的新需求交給你,確定了需求、交互之後,你開始開活兒了
  2. 你和後端把接口文檔定義好之後,從 master 上拉了個新分支 feature-xx 開始寫代碼
  3. 你們各自開發用了 20 天,然後你連後端開發的本地電腦開始聯調又用了 10 天。這一個月測試同學有可能就在喝茶、聊天、打王者
  4. 你們聯調完之後,告知測試同學,有測試同學將新分支 feature-xx 部署到測試環境開始測試,又花了 10 天。
  5. 測試結束之後,需要將 feature 分支合併到 release 分支部署到預發佈環境。由於有其他同學同時在開發這個項目,這時產生了大量的衝突,你不得不和相沖突的同學一起來解決這種問題,這又花了一天的時間。
  6. 解決完衝突之後,部署到了預發佈環境,這時候又發現新功能中的某些請求在預發環境下各種問題
  7. ......
  8. 等到所有問題都解決了,才部署上線

我們可以看到,這個開發、測試、部署都是串行的。且新分支由於開發週期長,與主幹偏離較大,造成集成困難等問題。

那麼持續集成可以爲我們帶來什麼,我們先來了解下幾個概念:

持續集成(Continous Integration,簡稱 CI)

持續集成就是把多個碼農寫的代碼集成到同一個分支,然後經過編譯、測試、打包之後將程序保存到 Artifact Repository 裏。根據執行結果來儘早的發現問題,保證產品的快速迭代。

持續交付(Continuous delivery,簡稱CD)

持續交付就是定時地、自動地從 Artifact Repository 將最新的程序部署到測試環境裏。它強調的是,不管怎麼更新,軟件是隨時隨地可以交付的。

持續部署(continuous deployment)

持續部署就是定時地、自動地將過去一個穩定的發佈版本部署到生產環境裏。持續部署的前提是能自動化完成測試、構建、部署等步驟。

常見的持續集成工具有以下幾種:

Jenkins     
      Jenkins是一款用Java編寫的開源的CI工具。當Oracle收購Sun Microsystems時,它作爲Hudson的分支被開發出來。Jenkins是一個跨平臺的CI工具,它通過GUI界面和控制檯命令進行配置。
      Jenkins非常靈活,因爲它可以通過插件擴展功能。Jenkins插件非常好用,同時你可以容易地添加自己的插件。除了它的擴展性之外,Jenkins還有另一個非常好的功能——它可以在多臺機器上進行分佈式地構建和負載測試。Jenkins是根據MIT許可協議發佈的,因此可以自由地使用和分發。Cloudbees還提供Jenkins in Cloud形式的託管解決方案。

      總結:Jenkins是最好的持續集成工具之一,它既強大又靈活。學習它可能要花費一些時間,但是如果你需要一個靈活的持續集成解決方案,那麼學習如何使用它將是非常值得的。

      官方網址:Jenkins
      可用性:免費
      平臺:跨平臺

  GitLab CI     

      GitLab CI是開源的Rails項目GitLab的一個組成部分,由GitLab公司將它帶到了大衆的視野中。 GitLab託管在GitLab.com上,GitLab.com提供了免費的託管服務,並且提供了git倉庫存儲和管理功能,如訪問控制,問題跟蹤,代碼評論等。

      GitLab CI能與GitLab完全集成,可以通過使用GitLab API輕鬆地作爲項目的鉤子。GitLab的執行部分(流程構建)使用Go語言編寫,可以運行在Windows,Linux,OSX,FreeBSD和Docker上。

官方的Go Runner可以同時運行多個作業,並具有內置的Docker支持。 Gitlab CI有兩個版本:開源的GitLab社區版和GitLab企業版

      總結:GitLab CI是一款令人印象深刻的託管工具,提供了免費版本和企業版本。

      官方網站:GitLab CI

      可用性:免費和付費

      平臺:託管(可以在Gitlab.com上託管)

 

      TeamCity    
      TeamCity是一款成熟的CI服務器,來自JetBrains公司。 JetBrains已經在軟件開發世界中建立了權威,他們的工具如WebStorm和ReSharper正被全球的開發者所使用。
TeamCity在它的免費版本中提供了所有功能,但僅限於20個配置和3個構建代理。額外的構建代理和構建配置需要購買,你可以在這裏找到價格。
      TeamCity安裝後即可使用,可以在多種不同的平臺上工作,並支持各種各樣的工具和框架。 能夠支持JetBrains和第三方公司開發的公開的插件。儘管是基於Java的解決方案,TeamCity在衆多的持續集成工具中提供了最好的.NET支持。TeamCity也有多種企業軟件包,可以按所需代理的數量進行擴展。
      總結:整體而言是TeamCity是非常好的持續集成解決方案,但由於其複雜性和價格,更適合      企業需求。
      官方網站:TeamCity
      可用性:3個代理和20個構建配置是免費的,額外的代理和配置需要付費
      平臺:Servlet容器(本地)

 

      Travis CI    

      Travis CI是最老的託管解決方案之一,贏得了很多人的信任。雖然它主要以託管解決方案而聞名,但它也以企業包的形式提供內部版本。

      Travis CI對GitHub上託管的所有開源項目以及前100個版本的構建都是免費的。有幾個定價計劃可以供你選擇,它們之間主要區別是你可以運行的併發構建數量。

      Travis CI的構建通過.travis.yml文件進行配置,該文件包含了在構建時所需要執行的任務。它能夠支持多種語言並提供完善的幫助文檔。

      總結:一個成熟的解決方案,提供託管和本地變種,被許多團隊喜愛和使用,非常有據可查。

      官方網站:Travis CI

      可用性:對開源計劃和前100個版本的構建是免費的,其他的服務需要付費

      平臺:託管和本地

 

      Go CD    

      Go是ThoughtWorks公司最新的Cruise Control的化身。除了ThoughtWorks提供的商業支持,Go是免費的。它適用於Windows,Mac和各種Linux發行版

      讓Go脫穎而出的是它的流水線概念,使複雜的構建流程變得簡單。關於流水線概念是如何幫助持續交付,以及如何與Jenkins的流水線流程進行比較,您可以在這裏閱讀到相關內容。它最初的設計時就支持流水線概念,消除了構建過程的瓶頸,並能夠並行地執行任務。

      總結:Go CD非常適合複雜場景,並且能夠免費提供付費的支持。

      官方網站:Go CD

      可用性:免費提供付費的支持

      平臺:Windows,Mac和一些Linux發行版

 

       Bamboo   

      Atlassian是專注於爲軟件開發團隊提供工具的公司,你或許已經通過JIRA和Bitbucket瞭解到了他們。Bamboo最初提供了雲端和本地兩種持續集成的解決方案,但在2016年5月,雲端版本不再支持Bitbucket Pipeline。Bitbucket Pipeline能夠支持Docker, 是一個非常高效且快速的持續集成解決方案,正在迅速發展,是Bamboo雲端版本的有利繼承者。

      Bamboo可以免費試用30天。作爲Atlassian工具,它能夠很好地支持JIRA和BitBucket,甚至可以將Jenkins配置輕鬆地導入到Bamboo中。

      總結:Bamboo是一款本地CI工具。其原本的雲段解決方案被Bitbucket pipeline所取代。有30天的免費試用,在此之後可以進行付費使用。

      官方網站:Bamboo

      可用性:付費免費試用

      平臺:本地

 

       CircleCI   

      CircleCI也來自GitLab公司,是另一款雲端的持續集成管理工具。CircleCI目前僅支持Github管理,它能夠支持的語言包括:Java, Ruby/Rails, Python, Node.js, PHP, Haskell, and Skala。

CircleCI和其他持續集成工具不同的地方在於他們提供服務的方式。CircleCI需要付費的主要是它的容器。你可以免費使用一個容器,當你開始使用更多容器的時候,你可以選擇你所需要的並行化級別來加速你的應用。

      主要有5個並行化級別可以供我們選擇: 1x, 4x, 8x, 12x and 16x。你可以選擇用16個容器進行一個項目的構建,此時並行化級別就爲16x,當然你也可以用16個容器同時進行4個項目的構建,此時並行化級別爲4x,如何選擇取決於你。同時CircleCI也能夠支持Docker。

      總結:CircleCI是一個靈活的雲端CI工具,提供的最大並行化級別爲16x。當你需要快速地進行項目構建時它將是一個不錯的選擇,同時它的價格也不是很貴。

      官方網站:CircleCI

      可用性:免費和付費

      平臺:託管

 

      Codeship  

      Codeship是一個本地的持續集成解決方案。它有兩種不同的版本:基本版和專業版。在基本版中提供了安裝即用的持續集成服務但是不能夠支持Docker,它的主要用途就是通過UI來進行應用的構建等操作。專業版本提供了更靈活的功能以及Docker支持。

      在基本版中有幾個可選的付費包,越貴的付費包並行能力越好。在專業版本中你可以選擇你的實例類型和並行級別(最高的級別爲20x),價格稍微有點貴,但是大多數的團隊應該會需要這種並行化構建的功能。

      總結:Codeship是一個強大的帶有Docker支持的本地持續集成解決方案

      官方網站:Codeship

      可用性:每個月的前100次構建免費,後續的構建需要付費

      平臺:託管

 

        Codefresh   

      上面所提到的很多工具都能夠支持Docker,但Codefrsh從設計到開發都將容器的理念貫徹其中。

      Codefresh的開發者們從一開始就意識到Docker會廣受歡迎。Codefresh除了能夠在現有的Docker文件中工作外,你也可以選擇幾個不同的模板來輕鬆地的將你的項目遷移到docker容器中。它的UI非常的乾淨和容易理解,你可以很容易地上手。

      之所以將Codefresh介紹給你們的原因在於它有一個讓人非常驚喜的功能。這個功能就是將你的鏡像發佈到一個臨時的環境中。當項目被建立時,它的鏡像也被建立了,你可以發佈這個鏡像並觀察它是如何工作的。那意味着你可以得到一個臨時的工作環境,而不需要一個額外的虛擬機,這就是它非常棒的地方。

      Codefresh是一款比較新的工具,有很多能夠改進的地方和新的特性可以增加。但是它把容器作爲它的重要組成部分使得它對任何一個打算使用Docker容器的團隊來說都將是一個非常好的持續集成解決方案。

      總結:Codefresh是一個支持Docker的持續集成工具,它可以發佈和建立本地環境的Docker鏡像。

      官方網站:Codefresh

      可用性:每個月的前200次構建,5個併發的構建和一個本地環境是免費的,額外的服務需要付費。

      平臺:本地

那麼,對於你和你的團隊來說,完美的持續集成工具是什麼?

       在爲您的項目選擇正確的CI工具時,需要牢記幾件事情:

      本地解決方案爲構建過程提供了足夠的靈活性,並且項目信息能被存儲在本地。這對你來說可能並不重要,但在某些情況下,對某些公司來說,這可能是強制性的。

另一方面,託管解決方案不會提供太多的設置選項和更大的可擴展性,因爲您不需要硬件來託管它們。

      另一個重要的事情是是否支持Docker。 Docker革新了我們分發應用程序的方式,併成爲不可忽視的一項技術手段。儘管上面所提到的絕大多數工具都支持Docker,但有些工具會比其他工具更能夠支持Docker。

      最後一個容易被忽視的方面是用戶界面。上述中的一些工具比其他工具更容易使用。任何一個好的CI工具的主要作用之一就是使構建過程更容易,因此UI操作不應該很難或複雜。

 

參考文獻:

  1. https://www.codercto.com/a/88165.html
  2. https://www.zhihu.com/question/23444990
  3. https://www.testwo.com/article/1170

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章