在傳統軟件開發過程中,集成通常發生在每個人都完成了各自的工作之后。在項目尾聲階段,通常集成還要痛苦的花費數周或者數月的時間來完成。持續集成是一個將集成提前至開發周期的早期階段的實踐方式,讓構建、測試和集成代碼更經常反復地發生。開發人員通常使用一種叫做CI Server的工具來做構建和集成。持續集成要求史蒂夫和安妮能夠自測代碼。分別測試各自代碼來保證它能夠正常工作,這些測試通常被稱為單元測試(Unit tests)。代碼集成以后,當所有的單元測試通過,史蒂夫和安妮就得到了一個綠色構建(Green Build)。這表明他們已經成功地集成在一起,代碼正按照測試預期地在工作。然而,盡管集成代碼能夠成功地一起工作了,它仍未為生產做好準備,因為它沒有在類似生產的環境中測試和工作。CI是需要對開發人員每次的代碼提交進行構建測試驗證。確定每次提交的代碼都是可以正常編譯測試通過的。在沒有持續集成服務器的時候,我們可以寫一個程序來監聽版本控制系統的狀態,當出現了push動作則觸發相應的腳本運行編譯構建等步驟。現在有了專業的持續集成服務器后,我們借助持續集成服務器來實現版本控制系統中代碼提交觸發構建測試等驗證步驟。持續合并開發人員正在開發編寫的所有代碼的一種做法。通常一天內進行多次合并和提交代碼,從存儲庫或生產環境中進行構建和自動化測試,以確保沒有集成問題并及早發現任何問題。「持續部署CD」:是基于持續交付的基礎上,將在各個環境經過測試的應用自動化部署到生產環境。其實各個環境的發布過程都是一樣的。應用發布到生產環境后,我們需要對應用進行健康檢查、添加應用的監控項、 應用日志管理。

獲取預生產環境制品,進行部署測試。測試成功后可以將制品上傳到生產庫中。
此時通知測試人員可以進行測試環境發布測試,獲取測試環境制品庫中的制品,發布到測試環境驗證。驗證通過將制品上傳到預生產環境制品庫。
我們可以將開發環境產出的制品部署進行測試,沒有問題后上傳到測試環境的制品庫中。
CI/CD 創建了一個可重復的、可靠的且可預見的發布流程,從而大大縮短了發布周期,使得新增功能和缺陷修復能更早與用戶見面。這么做為我們節省下了巨大的金錢成本,還節省了包括建立和維護這樣一個發布系統所需要的時間投入。部署工具為不同角色的人員提供了強大的靈活性,改變了以往傳統低效的工作方式。總而言之,團隊成員可以更好地控制工作節奏,從而改進工作質量,進而讓應用程序的質量得以提高。他們之間的協作更加有效,無用的交互更少,可以更高效地工作,因為不需要花太多的時間等待可用的版本。在整個開發的生命周期中,我們可能在各個環境將錯誤引入到軟件中。在最初的需求分析環節就有可能出錯,比如客戶提出錯誤的需求。如果需求分析人員將需求理解錯了,那么開發人員也寫出了到處都是缺陷的程序,此外還有由不良好的配置管理引入到生產環境的錯誤。而部署流水線則可以回避這里的由配置所導致的錯誤。交付項目往往是一件充滿壓力的事。當項目越臨近發布日期,就越能感覺到壓力,而壓力也往往帶來許多問題。而部署流水線可以大大減緩開發部署的壓力。如果發布只需要單擊一下按鈕,而且只需要等上幾分鐘,甚至幾秒鐘內就可以完成。另外,假如發生了非常糟糕的事情,只要花上相同的幾分鐘或幾秒鐘的時間就可以把剛部署的內容恢復到從前的老樣子。而且軟件發布周期總是很短,那么當前生產環境中的版本與新版本之間的差異應該非常小。如果上述設想都是事實的話,那么發布的風險一定會大大降低,發布是否成功的壓力也將大大減少。減少壓力的關鍵在于擁有一個我們前面所描述的自動化部署過程,并頻繁地運行它,當部署失敗后還能夠快速恢復到原來狀態。盡管剛開始做自動化時可能會很痛苦,但它會漸漸地變得容易起來,而它給項目和團隊帶來的好處是不可限量的。
