相信你們之前應該接觸過持續集成(Continuous integration)持續交付(continuous delivery)持續發佈(continuous deployment)的概念,下面咱們來講說三者的差別以及團隊如何入手 CI/CD。前端
做者:貓神。webpack
開發者儘可能時時刻刻合併開發分支至主幹分支。避免直到發佈日纔開始合併,掉入集成地獄。不管什麼時候新分支集成至項目,持續集成能夠自動化測試持續驗證應用是否正常。git
持續交付是持續集成的擴展,能夠保證穩定的發佈產品新特性。這意味着基於自動化測試,你能夠也能夠一鍵自動化發佈。理論上,持續交付能夠決定是按天,按周,按雙週發佈產品。若是確實但願可以享受持續交付的好處,那麼應該儘快發佈到新產品中。一旦出現問題時能儘早排除。github
持續部署是持續交付的下一步。經過這一步,每一個新特性都自動的部署到產品中。可是若是出現未經過的測試用例將會終止自動部署。持續部署能夠加速用戶反饋新特性,避免發佈日帶來的壓力。開發能夠着力於開發系統,開發結束後幾分鐘就能夠觸達到用戶。web
CI/CD 具體是個什麼樣的流程呢,以下圖所示,差別僅在因而否自動部署。瀏覽器
如今開發都講究投入產出比,那麼 CI/CD 具體須要作些什麼呢?安全
投入:服務器
須要爲每一個新特性編寫測試用例微信
須要搭建持續集成服務器,監控主幹倉庫,並自動運行測試用例併發
開發須要儘可能頻繁的合併分支,至少一天一次
產出:
投入:
投入:
若是開發的是一個新項目,暫時尚未任何用戶,那麼每次提交代碼後發佈將會特別簡單,能夠隨時隨地發佈。一旦產品開始開發後,就須要提升測試文化,並確保在構建應用程序時增長代碼覆蓋率。當您準備好面向用戶發佈時,您將有一個很是好的連續部署過程,在該過程當中,全部新的更改都將在自動發佈到生產環境以前進行測試。
若是正在開發的是一個老系統,就須要放慢節奏,開始打造持續集成&持續交付。首先能夠完成一些簡單可自動化執行的單元測試,不須要考慮複雜的端到端的測試。另外,應該儘快嘗試自動化部署,搭建能夠自動化部署的臨時環境。由於自動化部署,可讓開發者去優化測試用例,而不是停下來聯調發布。 一旦開始按日發佈產品,咱們能夠考慮持續部署,但必定要保證團隊已經準備好這種方式,文檔 & 售後支持 & 市場。這些步驟都須要加入到新產品發佈節奏中,由於和用戶直接打交道的是他們。
爲了得到 CI 的全部好處,每次代碼變動後,咱們須要自動運行測試用例。咱們須要在每一個分支運行測試用例,而不是僅僅在主幹分支。這樣能夠最快速的找到問題,最小化問題影響面。 在初始階段並不須要實現全部的測試類型。一開始能夠以單元測試入手,隨着時間擴展覆蓋面。
並非全部的測試都是對等的,實際運行中能夠作些取捨。
單元測試實現起來既快成本又低,由於它們主要是對小代碼塊進行檢查。另外一方面,UI 測試實施起來很複雜,運行起來很慢,由於它們一般須要啓動一個完整的環境以及多個服務來模擬瀏覽器或移動行爲。所以,實際狀況可能但願限制複雜的 UI 測試的數量,並依賴基礎上良好的單元測試來快速構建,並儘快得到開發人員的反饋。
要採用持續集成,您須要對推回到主分支的每一個變動運行測試。要作到這一點,您須要有一個服務來監視您的存儲庫,並聽取對代碼庫的新推送。您能夠從企業預置型解決方案和雲端解決方案中進行選擇。您須要考慮如下因素來選擇服務器:
自動化測試是 CI 的關鍵,但同時也須要團隊成員接受 CI 文化,並非心血來潮曬兩天魚,而且須要保證編譯暢通無阻。QA 能夠幫助團隊建設測試文化。他們再也不須要手動測試應用程序的瑣碎功能,如今他們能夠投入更多的時間來提供支持開發人員的工具,並幫助他們採用正確的測試策略。一旦開始採用持續集成,QA 工程師將可以專一於使用更好的工具和數據集促進測試,並幫助開發人員提升編寫更好代碼的能力。
以上文章主要是說明團隊實現 CI/CD 的取捨和可行性步驟。下面來講說但願 CI/CD 給筆者團隊帶來什麼樣的變化。目前筆者團隊已經實現前端項目發佈編譯工程化,採用的是基於 webpack 的自建工具雲構建模式。但如今面臨的問題是 1. 交互的系統比較多,交互系統提供的接入源變動後,須要人工通知其餘系統手動觸發編譯,並且每次手動編譯都須要在本地切換到指定分支,而後手動觸發雲構建,2. 多人協做,分支拆分較細,須要手動合併分支,觸發編譯。整個流程冗長,並且中間存在人力溝通成本,容易產生溝通偏差。因此首先但願解決的是 CI 自動化,當依賴變動後或者分支合併後,自動集成,自動編譯。固然生產環境暫時還不敢瞎搞,但大部分重複編譯的工做量主要集中在預發環境,因此手動部署生產環境的成本仍是能夠接受的。CI 自動化以前,須要提供系統之間交互的單元測試用例,每次 CI 後自動運行單元測試用例,最好能打通 QA 的測試用例,進行迴歸測試。流程對好比下:
能夠看出引入CI後,咱們的成本是須要搭建CI服務器,新增單元測試、打通迴歸測試案例,但前者能夠加快系統編譯效率,後者能夠進一步的提高代碼質量,減小回歸測試時間,這些成本都是能夠接受的。市面上已有不少開源持續集成工具,例如咱們熟悉的Jenkins,還有TeamCity、Travis CI、GO CD、Bamboo、Gitlab CI、CircleCI……等等等等。目前還在繼續調研中,這片文章應該會有第二篇,說說後續的實踐和CD。若是你想參與討論,請 點擊這裏,每週都有新的主題,週末或週一發佈。前端精讀 - 幫你篩選靠譜的內容。
關注 前端精讀微信公衆號
special Sponsors
版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享 3.0 許可證)