一、持續部署
1. 裝修廚房
全部裝好之后發現燈不亮,電路有問題;冷熱水裝反了,管路有問題。這些問題要解決就必須把地磚、牆磚拆掉——
一個環節有問題,其他環節跟着返工。
那怎么做會好一些呢?任何安裝完成及時測試,確保其可以正常工作。
2. 項目開發
開發過程中進行單元測試能夠通過,但是部署到服務器上運行出現問題。
那怎么做會好一些呢?僅僅單元測試還不夠,各個模塊都必須能夠在服務器上運行。
3. 關注點
持續部署的關注點在於項目功能部署至服務器后可以運行,為下一步測試環節或最終用戶正式使用做好准備。
二、持續集成
1. 裝修廚房
裝修廚房時我們需要鋪地磚,如果把所有地磚都切好再拿去鋪就會發現:每一塊地磚
單獨看都是好的,但是實際鋪的時候,把所有地磚
整合起來,發現和廚房地面總體尺寸
不匹配,邊邊角角的地磚需要重新切,時間和物料成本陡然升高。
那怎么做會好一些呢?切一塊鋪一塊,根據需要的尺寸來切,盡早發現尺寸變化,避免返工。
2. 項目開發
各個小組分別負責各個具體模塊開發,本模塊
獨立測試雖然
能夠通過,但是上線前夕將所有模塊整合到一起
集成測試卻發現
很多問題,想要解決就需要把很多代碼返工重寫而且仍然有可能有問題,但現在時間很可能不夠了。
那怎么做會好一些呢?經常性、頻繁的把所有模塊集成在一起進行測試,有問題盡早發現,這就是持續集成。
3. 關注點
持續集成的關注點在於盡早發現項目整體運行問題,盡早解決。
三、持續交付
1. 裝修廚房
全部裝修好之后房屋主人來驗收,各項功能都正常,但是水龍頭的樣式主人不喜歡,灶台的位置主人不滿意,要求返工。
那怎么做會好一些呢?房屋主人隨時查看裝修進度,施工團隊及時調整。
2. 項目開發
項目的各個升級版本之間間隔時間太長,對用戶反饋感知遲鈍,無法精確改善用戶體驗,用戶流失嚴重。
那怎么做會好一些呢?用
小版本不斷進行
快速迭代,不斷收集用戶反饋信息,用最快的速度改進優化。
3. 關注點
持續交付的關注點在於研發團隊的最新代碼能夠盡快讓最終用戶體驗到。
四、總體目標
好處1:降低風險
一天中進行多次的集成,並做了相應的測試,這樣有利於檢查缺陷,了解軟件的健康狀況,減少假定。
好處2:減少重復過程
產生重復過程有兩個方面的原因,一個是編譯、測試、打包、部署等等固定操作都必須要做,無法省略任何一個環節;另一個是一個缺陷如果沒有及時發現,有可能導致后續代碼的開發方向是錯誤的,要修復問題需要重新編寫受影響的所有代碼。
而使用 Jenkins 等持續集成工具既可以把構建環節從手動完成轉換為自動化完成,又可以通過增加集成頻次盡早發現缺陷避免方向性錯誤。
好處3:任何時間、任何地點生成可部署的軟件
持續集成可以讓您在任何時間發布可以部署的軟件。從外界來看,這是持續集成最明顯的好處,我們可以對改進軟件品質和減少風險說起來滔滔不絕,但對於客戶來說,可以部署的軟件產品是最實際的資產。利用持續集成,您可以經常對源代碼進行一些小改動,並將這些改動和其他的代碼進行集成。如果出現問題,項目成員馬上就會被通知到,問題會第一時間被修復。不采用持續集成的情況下,這些問題有可能到交付前的集成測試的時候才發現,有可能會導致延遲發布產品,而在急於修復這些缺陷的時候又有可能引入新的缺陷,最終可能導致項目失敗。
好處4:增強項目的可見性
持續集成讓我們能夠注意到趨勢並進行有效的決策。如果沒有真實或最新的數據提供支持,項目就會遇到麻煩,每個人都會提出他最好的猜測。通常,項目成員通過手工收集這些信息,增加了負擔,也很耗時。持續集成可以帶來兩點積極效果:
(1) 有效決策:持續集成系統為項目構建狀態和品質指標提供了及時的信息,有些持續集成系統可以報告功能完成度和缺陷率。
(2) 注意到趨勢:由於經常集成,我們可以看到一些趨勢,如構建成功或失敗、總體品質以及其它的項目信息。
好處5:建立團隊對開發產品的信心
持續集成可以建立開發團隊對開發產品的信心,因為他們清楚的知道每一次構建的結果,他們知道他們對軟件的改動造成了哪些影響,結果怎么樣。