持續(xù)集成、持續(xù)交付與持續(xù)部署

持續(xù)集成CI(Continuous Integration):持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作,通常每個(gè)成員每天至少集成一次,也就意味著每天可能會(huì)發(fā)生多次集成。每次集成都通過自動(dòng)化的構(gòu)建(包括編譯,發(fā)布,自動(dòng)化測試)來驗(yàn)證,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤。

集成問題會(huì)導(dǎo)致大量的返工,包括不得不通過手動(dòng)合并解決變更沖突,以及多名開發(fā)人員共同解決導(dǎo)致自動(dòng)化測試或手動(dòng)測試失敗的合并問題。因?yàn)樵趥鹘y(tǒng)的開發(fā)模式里,代碼集成工作通常發(fā)生在項(xiàng)目末期,所以在集成工作消耗過多時(shí)間時(shí),我們不得不為了按時(shí)發(fā)布而偷工減料。這會(huì)導(dǎo)致另一個(gè)惡性循環(huán):既然合并代碼如此痛苦,那么大家就索性減少合并次數(shù),而這會(huì)使未來的合并工作更加令人痛苦。

持續(xù)集成旨在通過將合并代碼融入日常工作來解決這個(gè)問題。以下圖說明持續(xù)集成的流程:


CI流程圖(來源:mindtheproduct)

開發(fā)人員通將代碼變更提交到版本控制倉庫,觸發(fā)CI系統(tǒng),CI服務(wù)器立即對代碼進(jìn)行構(gòu)建、單元測試,輸出結(jié)果,從而可以確定新代碼是否可以和原有代碼正確的集成在一起。

持續(xù)交付(Continuous Delivery):持續(xù)交付是指所有開發(fā)人員都在主干上進(jìn)行小批量工作,或者在短時(shí)間存在的特性分支上工作,并且定期像主干合并,同時(shí)始終讓主干保持可發(fā)布狀態(tài),并能做到在正常的工作時(shí)間段里按需進(jìn)行一鍵式發(fā)布。

開發(fā)人員在引入任何回歸錯(cuò)誤時(shí)(包括缺陷、性能問題、安全問題、可用性問題等),都能快速得到反饋。一旦發(fā)現(xiàn)這類問題,就立即加以解決,從而保證主干始終處于可部署狀態(tài)。

以下圖說明持續(xù)交付流程圖:


持續(xù)交付流程圖(來源:mindtheproduct)


持續(xù)交付在持續(xù)集成的基礎(chǔ)上,自動(dòng)將代碼在類生產(chǎn)環(huán)境中進(jìn)行測試,也就是說項(xiàng)目開發(fā)人員在提交代碼后,在通過集成、構(gòu)建、單元測試后,還會(huì)進(jìn)行自動(dòng)化的類生產(chǎn)環(huán)境測試,以確保當(dāng)代碼部署到生產(chǎn)環(huán)境后可以正常工作。至此,我們的代碼就隨時(shí)處于可部署狀態(tài)。

持續(xù)部署(Continuous Deployment ):在持續(xù)交付的基礎(chǔ)上,由開發(fā)或運(yùn)維人員自助式地定期像生產(chǎn)環(huán)境部署優(yōu)質(zhì)的構(gòu)建版本,這通常意味著每人每天至少做一次生產(chǎn)環(huán)境部署,甚至每當(dāng)開發(fā)人員提交代碼變更時(shí),就觸發(fā)一次自動(dòng)化部署。

以下圖說明持續(xù)部署流程圖:


持續(xù)部署流程圖(來源:mindtheproduct)

通過將代碼部署過程自動(dòng)化,從而實(shí)現(xiàn)從開發(fā)人員從提交代碼到編譯、測試、部署的全流程不需要人工的干預(yù),加快代碼提交到功能上線的速度。從而使開發(fā)人員快速看到客戶對新特性的滿意度,并且能夠快速修復(fù)故障而不必等運(yùn)維人員提交故障單。

通常自動(dòng)化部署必須具備以下條件:

-? ? 保證在持續(xù)集成階段構(gòu)建的軟件包可以部署到生產(chǎn)環(huán)境;

-? ? 使生產(chǎn)環(huán)境的就緒情況一目了然;

-? ? 為能在生產(chǎn)環(huán)境中部署的任何代碼,建立一鍵式和自助式的發(fā)布機(jī)制;?

-? ? 自動(dòng)記錄審計(jì)和合規(guī)管理所需的相關(guān)內(nèi)容,包括在哪臺(tái)機(jī)器上運(yùn)行了命令,運(yùn)行了什么命令,是誰授權(quán)的,以及結(jié)果如何;

-? ? 通過冒煙測試驗(yàn)證系統(tǒng)正常工作,并且數(shù)據(jù)庫連接字符串等配置正確;

-? ? 為開發(fā)人員快速提供反饋,使他們能夠盡快了解部署結(jié)果(例如部署是否成功,應(yīng)用是否能在生產(chǎn)環(huán)境正常運(yùn)行等等)。

總結(jié):從上述定義可知,持續(xù)集成是持續(xù)交付的前提條件,而持續(xù)交付是持續(xù)部署的前提條件。通過將集成和部署融入日常工作,能夠大大縮短集成時(shí)間,降低集成的復(fù)雜度,并把部署時(shí)間從幾個(gè)月縮短到幾分鐘,使我們能夠快速地向客戶交付價(jià)值,同時(shí)避免意外事故和服務(wù)中斷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容