前面的文章中介紹了,Devops的概念以及企業(yè)應(yīng)用Devops能夠帶來的好處,請參考文章:
DevOps究竟能給企業(yè)解決什么問題
接下來我來介紹一下Devops要想實際落地,那么我們需要解決的問題有哪些。我將從產(chǎn)品需求、開發(fā)、測試、運(yùn)維的角度來分享Devops落地的實際經(jīng)驗。
核心
部署流水線核心軟件開發(fā)過程是一個將客戶或用戶的想法變成一個真實可用的特性的過程。部署流水線是這個過程中的一部分,是指軟件從版本控制庫到用戶手中這一過程自動化的展現(xiàn)形式。這一過程包括編譯構(gòu)建、代碼檢查、上傳制品庫、測試和部署等,并且這些階段的執(zhí)行都應(yīng)該是自動執(zhí)行的。自動化帶來的好處是這個流程變得更快、可重復(fù)且更加可靠。部署流水線的核心是使用jenkins作為各個節(jié)點的串聯(lián),然后在各個流程節(jié)點中使用一系列的工具來實現(xiàn)流水線的自動化!如下圖所示:
13條經(jīng)驗
產(chǎn)品需求
1.產(chǎn)品定義、里程碑規(guī)劃和用戶需求分析
可以使用影響地圖、用戶故事、看板等方法。
開發(fā)
2.代碼預(yù)檢查
代碼預(yù)檢查就是在代碼提交到代碼庫之前對代碼進(jìn)行檢查,包括靜態(tài)檢查、Code Review、測試、編譯等多種方式。
3.技術(shù)債務(wù)管理
主要的技術(shù)債務(wù)包括:
沒有文檔或者跟版本不同步;
過時的架構(gòu)設(shè)計;
需要重構(gòu)的代碼;
遺留代碼缺乏文檔和單元測試,無人能改,無人敢改。
注意:未實現(xiàn)的功能需求不屬于技術(shù)債務(wù)。
技術(shù)債務(wù)管理的核心是:在技術(shù)債務(wù)產(chǎn)生之前能避免則避免,不能避免的可以借助工具提前發(fā)現(xiàn),對于發(fā)現(xiàn)的技術(shù)債務(wù)盡可能早的償還掉。
4.第三方組件管理
使用第三方組件,可以不必“重復(fù)造輪子”,節(jié)約了時間和精力,加快了軟件開發(fā)的過程。第三方組件已經(jīng)是軟件開發(fā)不可或缺的組成部分。然而,使用第三方組件并非易事。主要有以下幾方面的問題:
組件會存在缺陷或安全漏洞;
組件的版本會過時;
組件需要額外的維護(hù)成本。
通常對第三方組件管理需要關(guān)注以下兩個方面:
依賴掃描:能夠掃描出依賴存在的問題,包括是否存在安全漏洞以及版本是否過時。
依賴管理:制定黑白名單,控制策略和影響范圍。黑名單指不允許使用的組件。白名單是可以使用的組件。控制策略指的是當(dāng)發(fā)現(xiàn)組件有問題時采取的措施,如阻斷,警告。影響范圍指的該控制策略的應(yīng)用范圍,如當(dāng)前系統(tǒng),所有系統(tǒng)等。當(dāng)檢測到依賴組件中包含了黑名單中的組件,按照設(shè)置好的控制策略對該組件進(jìn)行處理,比如編譯失敗,郵件通知負(fù)責(zé)人等。
5.非功能需求的管理
非功能需求的實現(xiàn)是有成本的,而且它們之間可能彼此排斥,因此我們必須權(quán)衡利弊。比如,對安全性要求高的系統(tǒng)往往易用性就不會太好。在實際開發(fā)中,考慮到系統(tǒng)的交付時間,系統(tǒng)的總成本,往往會根據(jù)非功能需求的實現(xiàn)難度,做出權(quán)衡。
6.API管理
API 管理就是有效管理企業(yè)內(nèi)部各服務(wù)提供的API 接口和對外暴露的共有接口,管理 API 接口的創(chuàng)建、測試、發(fā)布等生命周期,以及 API 接口的版本、并提供 API 開發(fā)者門戶供開發(fā)人員查看。服務(wù)的 API 接口在構(gòu)建時自動地注冊到 API 管理平臺的 API Gateway 中,其他調(diào)用方可以通過 API Gateway 訪問這些接口提供的服務(wù),并基于 API Gateway 進(jìn)行 API 的自動化測試,保證 API 的正確性和健壯性。
7.配置管理
配置管理是指一個過程,通過該過程,所有與項目相關(guān)的產(chǎn)物,以及它們之間的關(guān)系都被唯一定義、修改、存儲和檢索。例如,可以基于 Git 的方式,在應(yīng)用程序部署時提供特定環(huán)境的配置文件,實現(xiàn)了代碼與配置的隔離,保證了代碼的唯一性。
8.持續(xù)集成
這里持續(xù)的意思并不是“始終,一直”,它的意思是“隨時”。比較恰當(dāng)?shù)念l率是:每當(dāng)有人提交代碼,同時集成一次。通常分為即時集成和定時集成。
即時集成:是指團(tuán)隊成員每次提交之后就進(jìn)行集成,并執(zhí)行編譯、構(gòu)建、自動化測試等任務(wù)來檢查個人提交的代碼是否可用。這種集成方式要求執(zhí)行的時間要短,要快速反饋結(jié)果,因此只能執(zhí)行一些簡單的測試。
定時集成:類似每日構(gòu)建(Daily Build),是指每天定時(一般為晚上)自動執(zhí)行一次集成過程,第二天將執(zhí)行結(jié)果發(fā)送給關(guān)系人。這種集成方式注重的是檢測的全面性和徹底性,對執(zhí)行時長要求不高。
測試
9.測試數(shù)據(jù)管理
測試數(shù)據(jù)管理指對測試數(shù)據(jù)的自動創(chuàng)建以及銷毀。主要包括驗證業(yè)務(wù)基礎(chǔ)功能的少量測試數(shù)據(jù)和驗證核心業(yè)務(wù)性能所需要的大規(guī)模測試數(shù)據(jù)。
10.自動化測試
指對產(chǎn)品的UI測試、服務(wù)的接口測試以及代碼的單元測試通過測試代碼來實現(xiàn)。
運(yùn)維
11.實時監(jiān)控
將所有主機(jī)加入監(jiān)控,時刻掌握他們的狀態(tài),一旦有指標(biāo)不正常,觸發(fā)器觸發(fā)告警,可通過微信、釘釘、郵件方式進(jìn)行告警.
12 日志收集
當(dāng)集群環(huán)境壯大之后,某一個模塊可能會部署多個節(jié)點,再登錄到機(jī)器上查看某一模塊的日志就變得很困難,通常可以通過elk來建立集中式日志收集系統(tǒng),將所有節(jié)點上的日志統(tǒng)一收集,管理,訪問。
13 環(huán)境管理
環(huán)境管理就是準(zhǔn)備部署環(huán)境的過程以及部署之后對環(huán)境的管控。既能保證準(zhǔn)備環(huán)境的快速和一致性,又使得部署后的環(huán)境能夠有效利用。一般環(huán)境分為,集成環(huán)境、測試環(huán)境\類生產(chǎn)環(huán)境和生產(chǎn)環(huán)境。如果想要高效管理各種環(huán)境,必須通過腳本實現(xiàn)環(huán)境的創(chuàng)建與部署工作,即一鍵部署。