一其兴、什么是流水線
流水線這個詞起源于福特公司,1913年夸政,福特公司在汽車城底特律市建成了世界上第一條汽車裝配流水線元旬,使T型車成為大批量生產(chǎn)的開端,汽車裝配時間從12.5小時縮短到1.5小時,售價從開始的一輛850美元法绵,最后降到360美元箕速。
什么是部署流水線
部署流水線是指軟件從版本控制庫到用戶手中這一過程的自動化表現(xiàn)形式。我們知道軟件的每一次變更都會經(jīng)歷一個復(fù)雜的流程才能發(fā)布朋譬,這一流程包括軟件的構(gòu)建以及后續(xù)的一系列的測試和部署盐茎,而部署流水線相當于是在給這一過程進行建模。
二徙赢、有效的分支管理策略
個人認為這些自動化過程要依賴有效的分支管理策略有助于持續(xù)部署習慣的養(yǎng)成字柠。需要進行版本控制的不僅是源代碼,還有測試代碼狡赐、構(gòu)建和部署腳本窑业、依賴的庫文件等,并且對構(gòu)建產(chǎn)物的版本控制也同樣重要枕屉。只有這些內(nèi)容都納入版本控制了常柄,才能夠確保所有的開發(fā)、測試搀擂、運維工作能夠更好的開展西潘。
例如:
分支開發(fā),主干發(fā)布
表現(xiàn)為接到需求后拉出分支哨颂,后面的開發(fā)都在分支上提交喷市,每個分支生命周期較長,并且可能有多個并行分支威恼,直到快要上線時甚至上線后才合并到主干品姓。
因為多個功能可以完全并行開發(fā),互不干擾箫措。還可以按每個功能特性拉出分支腹备,那么每次提交都是完整的功能特性,分支劃分明確斤蔓、版本控制的記錄也會比較清晰易懂馏谨。并且由于不同需求的開發(fā)進度不同,可以選擇某個先開發(fā)完成的功能特性進行合并附迷、發(fā)布惧互,而不會被其它分支上未完成的功能特性阻塞。
主干開發(fā)喇伯,分支發(fā)布
代碼提交到主干喊儡,可以做到真正的持續(xù)集成,在沖突形成的早期發(fā)現(xiàn)和解決問題稻据,避免后期的大量合并沖突艾猜,這樣的整體成本才是最低的买喧。另外主干會一直保持健康的狀態(tài),每次合入代碼并驗證后都可進行安全的發(fā)布匆赃。
Git Flow
主要是通過為功能開發(fā)淤毛、發(fā)布準備和維護分配獨立的分支,讓發(fā)布迭代過程更流暢算柳。嚴格的分支模型也為大型項目提供了一些非常必要的結(jié)構(gòu).雖然比功能分支工作流復(fù)雜幾分低淡,但提供了用于一個健壯的用于管理大型項目的框架。
三瞬项、持續(xù)交付流水線四大要素
雖然沒有標準流水線這樣的東西蔗蹋,但典型的持續(xù)交付流水線包括以下階段:構(gòu)建自動化、持續(xù)集成囱淋、測試自動化和部署自動化猪杭。
自動化構(gòu)建
流水線首先會構(gòu)建可執(zhí)行文件來創(chuàng)建可交付成果,構(gòu)建后的交付成果被傳遞到后續(xù)階段妥衣。開發(fā)人員實現(xiàn)的新特性被持續(xù)集成到代碼庫中皂吮,并被構(gòu)建和進行單元測試。并形成最直接的反饋循環(huán)税手,它可以通知開發(fā)團隊其應(yīng)用程序代碼的健康狀況蜂筹。
自動化測試
在測試自動化中,新版本的應(yīng)用程序經(jīng)過嚴格各項自動化測試冈止,包括功能自動化測試,性能測試候齿,壓力測試等熙暴,以確保其達到所有預(yù)期的應(yīng)用質(zhì)量。通過流水線驗證所有相關(guān)方面極為重要 - 無論是功能慌盯、安全性周霉、性能或合規(guī)性。該階段可能涉及不同類型的自動或手動測試亚皂。
持續(xù)集成
持續(xù)集成是軟件個人研發(fā)的部分向軟件整體部分交付俱箱,頻繁進行集成以便更快地發(fā)現(xiàn)其中的錯誤,其中包括代碼掃描、Code Review灭必、自動化測試狞谱。“快速失敗”禁漓,在對應(yīng)用沒有風險的情況下進行大量測試跟衅,并快速響應(yīng);最大限度地減少風險,降低修復(fù)錯誤代碼的成本;將重復(fù)性的手工流程自動化播歼,保持頻繁部署伶跷,快速生成可部署的軟件。
自動化部署
每次將應(yīng)用程序在開發(fā)環(huán)境,測試環(huán)境叭莫,準生產(chǎn)環(huán)境中都需要進行部署蹈集,但部署自動化的最關(guān)鍵時刻是生產(chǎn)環(huán)境。由于前面的階段已經(jīng)驗證了應(yīng)用的整體質(zhì)量雇初,所以部署已是一個低風險的步驟拢肆。部署可以分階段,可以將新版本最初只發(fā)布到生產(chǎn)環(huán)境的一部分抵皱,而非全部善榛,并在完全上線之前進行監(jiān)控。確認沒有問題后再全部發(fā)布到生產(chǎn)環(huán)境呻畸。部署是自動化的移盆,如果需要,它可以在幾分鐘內(nèi)為用戶提供可靠的新功能
四伤为、總結(jié)
持續(xù)交付流水線的前提就是自動化咒循,測試的完備性,反饋的及時性绞愚,以及團隊成員對于持續(xù)交付的相關(guān)實踐叙甸。
畢竟持續(xù)交付的價值絕不僅僅是快,在提升軟件交付效率之外位衩,軟件交付流程和規(guī)范裆蒸、保證軟件交付質(zhì)量、降低軟件發(fā)布風險糖驴,這才是最重要的僚祷。