持續(xù)交付
目的
-
快速發(fā)現(xiàn)錯(cuò)誤
“快速失敗”,在對(duì)產(chǎn)品沒(méi)有風(fēng)險(xiǎn)的情況下進(jìn)行測(cè)試袱箱,并快速響應(yīng);
每完成一點(diǎn)更新义矛,就集成到主干发笔,可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易凉翻。
最大限度地減少風(fēng)險(xiǎn)了讨,降低修復(fù)錯(cuò)誤代碼的成本;
-
將重復(fù)性的手工流程自動(dòng)化
- 讓工程師更加專注于代碼;
保持頻繁部署前计,快速生成可部署的軟件胞谭;
防止分支大幅偏離主干。如果不是經(jīng)常集成残炮,主干又在不斷更新韭赘,會(huì)導(dǎo)致以后集成的難度變大,甚至難以集成势就。
-
增強(qiáng)開(kāi)發(fā)人員對(duì)軟件產(chǎn)品的信心
提供項(xiàng)目的能見(jiàn)度,方便團(tuán)隊(duì)成員了解項(xiàng)目的進(jìn)度和成熟度脉漏;
幫助建立更好的工程師文化苞冯;
準(zhǔn)則
持續(xù)集成不是工具,而是一種實(shí)踐
所有人投入一定的精力
修復(fù)那些破壞了應(yīng)用的任意源代碼修改是團(tuán)隊(duì)優(yōu)先級(jí)最高的任務(wù)
有限性依賴于團(tuán)隊(duì)的紀(jì)律
實(shí)現(xiàn)方式
-
準(zhǔn)備工作
-
版本控制
產(chǎn)品代碼
測(cè)試代碼
數(shù)據(jù)庫(kù)腳本
構(gòu)建腳本
部署腳本
-
自動(dòng)化構(gòu)建
-
前提條件
- 人和計(jì)算機(jī)都能通過(guò)命令行自動(dòng)執(zhí)行應(yīng)用的構(gòu)建侧巨、測(cè)試以及部署過(guò)程
-
目標(biāo)
自動(dòng)化執(zhí)行整個(gè)過(guò)程舅锄,能對(duì)出現(xiàn)問(wèn)題的做審計(jì)
構(gòu)建腳本應(yīng)該與應(yīng)用代碼同等對(duì)待
構(gòu)建過(guò)程應(yīng)該容易理解、維護(hù)司忱、調(diào)試和協(xié)作
-
-
-
持續(xù)集成系統(tǒng)
-
工具
- Jenkins
文檔記錄和自動(dòng)化持續(xù)集成構(gòu)建服務(wù)器的配置
-
工作步驟
- 7個(gè)步驟的流程圖隨后可以畫(huà)一個(gè)
-
期望結(jié)果
- 環(huán)境只要與我的持續(xù)集成環(huán)境一直皇忿,我的軟件就可以工作
-
前提條件
-
頻繁提交
每天至少幾次
-
代碼的主干-分支
提交到主干
不推薦使用分支
分支無(wú)法實(shí)現(xiàn)持續(xù)集成
-
創(chuàng)建全面的自動(dòng)化測(cè)試集合包
-
單元測(cè)試
-
對(duì)象
每個(gè)方法
每個(gè)函數(shù)
一組方法和函數(shù)之間的調(diào)用
十分鐘內(nèi)完成所有測(cè)試
-
-
組件測(cè)試
測(cè)試幾個(gè)組件的行為
可能需要連接數(shù)據(jù)庫(kù)、訪問(wèn)文件系統(tǒng)坦仍、外部接口
需要較長(zhǎng)時(shí)間完成測(cè)試
-
驗(yàn)收測(cè)試
測(cè)試是否滿足預(yù)定義的業(yè)務(wù)需求
-
其它方面
容量
有效性
安全性
整個(gè)應(yīng)用最好運(yùn)行在類生產(chǎn)環(huán)境
運(yùn)行一整天或者更長(zhǎng)
-
-
構(gòu)建和測(cè)試過(guò)程維護(hù)在更短的時(shí)間內(nèi)
理想的時(shí)間:十分鐘內(nèi)鳍烁,最好五分鐘內(nèi),越短越好
-
效率工具
JUnit
NUnit
-
將測(cè)試分成若干階段
-
第一階段:提交階段
編譯軟件
執(zhí)行單元測(cè)試
構(gòu)建部署包
冒煙測(cè)試(可選)
-
第二階段
驗(yàn)收測(cè)試
集成測(cè)試
性能測(cè)試(可選)
任務(wù)可以并行
大于半小時(shí)就需要通過(guò)投入更多運(yùn)算資源降低時(shí)間消耗
-
-
管理開(kāi)發(fā)工作區(qū)
從一個(gè)已知最新的正確版本的起點(diǎn)開(kāi)始
精細(xì)的配置管理是基礎(chǔ)
注意依賴的庫(kù)文件
應(yīng)用可以在開(kāi)發(fā)機(jī)上跑起來(lái)
自動(dòng)化測(cè)試(含冒煙測(cè)試)能在開(kāi)發(fā)機(jī)上跑通
使用持續(xù)集成軟件
-
基本操作
-
動(dòng)作
第一部分:按時(shí)間間隔執(zhí)行工作流水線
第二部分:展示流水線運(yùn)行結(jié)果
-
-
鈴聲和口哨
使用聲光電等提示錯(cuò)誤提示手段
第一時(shí)間了解構(gòu)建狀態(tài)
現(xiàn)在可以發(fā)送:Slack等即時(shí)線上通訊手段
-
相關(guān)分析
測(cè)試覆蓋率
重復(fù)代碼
編碼標(biāo)準(zhǔn)的遵從
健康指標(biāo)
最佳實(shí)踐
構(gòu)建失敗后停止新代碼提交
-
提交前在本地和持續(xù)集成服務(wù)器測(cè)試執(zhí)行所有目標(biāo)測(cè)試
保證構(gòu)建一直是綠的
-
預(yù)提交測(cè)試
pretested commit
personal build
preflight build
在本地測(cè)試將要提交的代碼
等提交通過(guò)之后再繼續(xù)工作
構(gòu)建必須成功后才能回家
-
隨時(shí)準(zhǔn)備回滾到前一個(gè)舊版本
- 不能在構(gòu)建失敗的情況下提交代碼
-
回滾前要規(guī)定一個(gè)修復(fù)時(shí)間
- 例如:十分鐘無(wú)法修復(fù)代碼就回歸到前一個(gè)版本
不要將失敗的測(cè)試注釋掉
為自己所導(dǎo)致的問(wèn)題負(fù)責(zé)
使用測(cè)試驅(qū)動(dòng)開(kāi)發(fā)
推薦實(shí)踐
極限編程開(kāi)發(fā)實(shí)踐
若違背了架構(gòu)原則繁扎,就讓構(gòu)建失敗
-
若測(cè)試運(yùn)行變慢了幔荒,就讓構(gòu)建失敗
本地測(cè)試容忍時(shí)間:秒級(jí)
盡早解決測(cè)試的性能問(wèn)題
-
若編譯告警或代碼風(fēng)格有誤,就讓測(cè)試失敗
-
代碼檢查工具
Simian
CheckStyle
FindBugs
提高代碼質(zhì)量
-
小結(jié)
快速發(fā)布梳玫。能夠應(yīng)對(duì)業(yè)務(wù)需求爹梁,并更快地實(shí)現(xiàn)軟件價(jià)值。
編碼->測(cè)試->上線->交付的頻繁迭代周期縮短提澎,同時(shí)獲得迅速反饋姚垃;
高質(zhì)量的軟件發(fā)布標(biāo)準(zhǔn)。整個(gè)交付過(guò)程標(biāo)準(zhǔn)化盼忌、可重復(fù)积糯、可靠。
整個(gè)交付過(guò)程進(jìn)度可視化碴犬,方便團(tuán)隊(duì)人員了解項(xiàng)目成熟度絮宁;
更先進(jìn)的團(tuán)隊(duì)協(xié)作方式。從需求分析服协、產(chǎn)品的用戶體驗(yàn)到交互 設(shè)計(jì)绍昂、開(kāi)發(fā)、測(cè)試、運(yùn)維等角色密切協(xié)作窘游,相比于傳統(tǒng)的瀑布式軟件團(tuán)隊(duì)唠椭,更少浪費(fèi)。
持續(xù)集成提高了團(tuán)隊(duì)的生產(chǎn)效率
需要良好的團(tuán)隊(duì)記錄
-
相關(guān)基礎(chǔ)設(shè)施
一個(gè)巨大的可視化指示器
結(jié)果報(bào)表系統(tǒng)忍饰,供給給測(cè)試團(tuán)隊(duì)的安裝包
為項(xiàng)目經(jīng)理提供項(xiàng)目資料監(jiān)測(cè)的應(yīng)用或報(bào)表
用持續(xù)部署的流水線贪嫂,為所有人員提供能延伸到生產(chǎn)環(huán)境的一鍵式部署
持續(xù)集成-實(shí)踐
-
實(shí)踐工具
- Jenkins