持續(xù)集成(
Continuous Integration
)
?
?
持續(xù)集成(
Continuous Integration
),縮寫為
CI
p
是一項
軟件開發(fā)實踐
,其中團隊的成員經(jīng)常集成他們的工作,通常每個人每天至少集成一次
——
這導(dǎo)致每天會
集成多次
。每次集成是通過
自動化的構(gòu)建
(包括測試)進行的,目的是盡快地檢查
集成錯誤
。許多團隊發(fā)現(xiàn)這樣做能夠減少大量的集成問題,讓團隊能夠更快的開發(fā)一致的軟件。
p
自動化的構(gòu)建:
獲取版本、編譯、單元測試、靜態(tài)檢查、集成測試、系統(tǒng)測試、軟件部署、信息反饋等全部自動化。
持續(xù)集成是沒有任何爭議的業(yè)界優(yōu)秀實踐
?
版本控制庫、
CI(
持續(xù)集成
)
服務(wù)器、構(gòu)建腳本、反饋機制
?
開發(fā)人員日常工作步驟:
①
開發(fā)人員基于最新版本開發(fā)
1
個新特性
②
從配置庫上將更新過的文件同步到本地,確保本地代碼和庫文件是最新的
③
在本地完成編譯、單元測試、代碼靜態(tài)檢查
④
準(zhǔn)備提交代碼前再次從配置庫上將更新過的文件同步到本地
⑤
再次在本地完成編譯、單元測試、代碼靜態(tài)檢查
⑥
成功后向配置庫提交代碼,自動觸發(fā)
CI
集成服務(wù)器的一次構(gòu)建,構(gòu)建失敗后要立即修復(fù)直到構(gòu)建成功
⑦
推薦采用令牌方式提交代碼
?
?
本地構(gòu)建是開發(fā)人員自我質(zhì)量保證、持續(xù)集成質(zhì)量和版本質(zhì)量的基礎(chǔ)
?
?
?
微軟
p
持續(xù)集成人員占開發(fā)人員的
1%
,如微軟
2000
人的
windows
部門,有
20
人專職做持續(xù)集成
p
check in
是頭等大事
,認(rèn)為對
check in
都不認(rèn)真,那么就沒什么事能認(rèn)真作了。
如果
check in
的代碼
Build
(持續(xù)集成)不通過,
24
小時任何時間通知,必須回公司修正;
2
次
Build
不通過會導(dǎo)致責(zé)任人在項目組壓力非常大,甚至呆不下去。
?
Ericsson
p
愛立信
CTO HAKAN
認(rèn)為愛立信產(chǎn)品
交付周期縮短
50%
,效率不斷提升的三個
法寶
是
Daily build
(持續(xù)集成)
,
Streamline
以及
One track
。
p
E
公司版本構(gòu)建
3
次不通過開發(fā)經(jīng)理將被轉(zhuǎn)崗!
?
業(yè)界
持續(xù)集成招聘
崗位
是軟件開發(fā)
崗位
的
0.7%
p
業(yè)界招聘信息看,持續(xù)集成崗位的發(fā)展速度是軟件開發(fā)崗位的
5
倍,招聘崗位是軟件開發(fā)的
0.7%
。
?
?
?
開發(fā)效率提升
30%
?
開發(fā)成本節(jié)約
30
%
?
錯誤減少
30%
?
構(gòu)建速度提升
100%
?
配置效率提升
40%
?
發(fā)布頻率提升
40%
?
大型項目的效率提升更大
全球
81.7%
的軟件項目采用持續(xù)集成
?
?
?
每天生成可部署的軟件,避免產(chǎn)品最終集成時爆發(fā)大量問題
p
缺陷的檢測和修復(fù)變得更快
p
軟件的健康程度可以度量
?
團隊成員每天都看到自己的可工作的軟件成果,增強自信心
?
?
持續(xù)集成可以
真實
的
反映產(chǎn)品
的
開發(fā)進度
p
可以工作的軟件是衡量進度的唯一標(biāo)準(zhǔn)。
p
在傳統(tǒng)的集成模式下,
“
最后
10%
的工作仍需要
90%
的時間完成
”
。
p
實施持續(xù)集成的團隊,進度通過特性的完成率來表示,
90%
的完成率意味著
90%
的特性開發(fā)測試完畢。
?
持續(xù)集成是產(chǎn)品開發(fā)的
“
心跳
”
,是產(chǎn)品質(zhì)量的
晴雨表
p
開發(fā)人員每天的工作都立刻合入版本,構(gòu)建結(jié)果快速反饋給項目經(jīng)理,項目過程質(zhì)量一目了然,管理者可以度量真實的進度和質(zhì)量,確定風(fēng)險,并積極地進行風(fēng)險控制。
?
增強開發(fā)人員
自信心
p
每次代碼修改,團隊成員都知道自己的軟件遵守編碼標(biāo)準(zhǔn)和設(shè)計標(biāo)準(zhǔn),通過測試驗證,往前邁進的每一步都非常堅實。
p
任務(wù)越小,工作越輕松。
?
?
持續(xù)集成!
=
持續(xù)編譯
持續(xù)集成!
=
工具
+
技術(shù)
持續(xù)集成!只是開發(fā)人員的事情
?
?
任何一點集成方面的努力都是值得肯定的
,
哪怕即使只是持續(xù)編譯,只要保證每天都能夠編譯通過,也已經(jīng)具有很大的價值了。
?
持續(xù)集成關(guān)鍵是:
持續(xù)測試
。即持續(xù)集成在很大程度上依賴測試策略和自動化程度。
?
?
?
持續(xù)集成的內(nèi)涵更多是軟件開發(fā)理念,絕非只是工具和技術(shù)
p
持續(xù)集成的技術(shù)和工具能做的就是自動提供快速反饋
p
團隊收到反饋之后的行為
,
才是降低風(fēng)險
,
提高質(zhì)量的關(guān)鍵
p
持續(xù)集成更多的是一種開發(fā)文化:
工作完成的唯一標(biāo)準(zhǔn)是構(gòu)建成功
?
?
?
持續(xù)集成更多的是管理(需要管理者下決心),例如制定產(chǎn)品級別的集成策略,包括:
p
專用的持續(xù)集成硬件環(huán)境
p
導(dǎo)致主干版本構(gòu)建失敗的行為要嚴(yán)懲
p
修復(fù)失敗的構(gòu)建是最高優(yōu)先級的事情
p
經(jīng)常(每天多次)提交代碼,提交代碼前執(zhí)行足夠多的測試保證質(zhì)量
p
編寫自動化的測試用例(
UT
、
IT
、
ST
)
p
每次構(gòu)建必須通過所有測試和審查
?
?
?
解決
版本構(gòu)建失敗的
問題是
團隊
最高優(yōu)先級任務(wù)
p
最近提交代碼的開發(fā)者必須參與修復(fù)失敗的構(gòu)建
p
短期內(nèi)不能修復(fù)的構(gòu)建代碼必須回滾
?
開發(fā)人員應(yīng)
每天提交至少一次代碼
p
每天至少向版本控制庫提交一次代碼。頻繁的提交將促使開發(fā)人員把工作分解成更小的粒度,既降低工作難度,又有利于監(jiān)控項目的進展。
?
自己提交
的
代碼不能導(dǎo)致
其他成員的
代碼構(gòu)建失敗
p
不要提交無法編譯或不能通過測試的代碼
p
開發(fā)人員提交代碼前必須做本地構(gòu)建,確保合入代碼正確
?
開發(fā)人員
不僅開發(fā)代碼
,
更要編寫自動化測試用例
p
開發(fā)人員不僅開發(fā)代碼,同時要編寫自動化的
UT
、
IT
的測試用例來驗證軟件
p
開發(fā)人員要持續(xù)維護和更新自動化測試用例
?
開發(fā)人員須
先在本地構(gòu)建成功,才可提交代碼到配置庫
p
代碼提交到版本控制前;所有代碼都必須遵守通用的編碼和設(shè)計標(biāo)準(zhǔn),包括編譯、
PCLINT
檢查,編程規(guī)范檢查,常見錯誤檢查,復(fù)雜度檢查,重復(fù)代碼檢查、
UT
測試
100%
通過等。
?
始終保證主干版本的構(gòu)建成功
p
保持所有人工作在主干版本上,并且始終保持其能構(gòu)建成功
p
永遠不要讓主干版本長期處于
build
不通過的狀態(tài)
?
不要在下班的時候留下失敗的構(gòu)建
?
不要在失敗的構(gòu)建上更新、提交代碼
?
?
?
開發(fā)、測試及設(shè)計共同負責(zé)(參與測試場景討論、測試策略制定、測試結(jié)果分析)
?
功能測試用例能夠及時納入持續(xù)集成環(huán)境
p
自動化測試設(shè)計和實現(xiàn),與產(chǎn)品代碼開發(fā)并行
p
自動化測試用例在本地調(diào)試通過后及時納入持續(xù)集成環(huán)境,以便盡早的執(zhí)行用例發(fā)現(xiàn)問題
?
持續(xù)集成環(huán)境中測試失敗導(dǎo)致構(gòu)建失敗
p
構(gòu)建成功標(biāo)準(zhǔn)包括自動化測試用例
100%
通過
p
導(dǎo)致構(gòu)建失敗的用例開發(fā)和測試要共同關(guān)注并及時修復(fù)
?
?
?
管理者重要職責(zé)是審視持續(xù)集成的結(jié)果
,出現(xiàn)問題促使盡快解決
p
從關(guān)注計劃、文檔到
關(guān)注持續(xù)集成結(jié)果
的轉(zhuǎn)變,持續(xù)集成反映了產(chǎn)品真實的進度和質(zhì)量。
?
保證持續(xù)集成人力投入,產(chǎn)品持續(xù)集成有
專人負責(zé)
,其職責(zé):
p
負責(zé)制定產(chǎn)品分級分層分布式的產(chǎn)品持續(xù)集成策略
p
負責(zé)持續(xù)集成環(huán)境的搭建和維護
p
負責(zé)維護產(chǎn)品的模塊依賴關(guān)系(如
Makerfile
、測試執(zhí)行的順序)
p
提供在各種不同環(huán)境下(如操作系統(tǒng)、硬件配置、軟件配置)的工具配置和使用
p
及時定位和解決持續(xù)集成環(huán)境存在的問題
?
負責(zé)產(chǎn)品持續(xù)集成的專人應(yīng)當(dāng)是
資深員工
而
不是沒有經(jīng)驗的員工
p
持續(xù)集成需要對產(chǎn)品架構(gòu)、模塊依賴關(guān)系、開發(fā)活動順序、環(huán)境部署、配置庫等都非常熟悉的人才可以制定出正確的產(chǎn)品持續(xù)集成策略。
p
持續(xù)集成是系統(tǒng)工程,涉及設(shè)計、開發(fā)、測試、工具、技術(shù)等之間協(xié)同,需要對產(chǎn)品有系統(tǒng)視野的人。
?
?
n
實踐
1
:單一的代碼源,所有軟件資產(chǎn)集中管理;
n
實踐
2
:經(jīng)常提交代碼,每天至少提交一次代碼;
n
實踐
3
:不要提交無法構(gòu)建的代碼,提交代碼之前先執(zhí)行本地構(gòu)建;
n
實踐
4
:構(gòu)建過程完全自動化;
n
實踐
5
:每次變更都要觸發(fā)一次集成構(gòu)建,在一臺獨立的構(gòu)建機器上;
n
實踐
6
:立即修復(fù)無法通過的構(gòu)建;
n
實踐
7
:使構(gòu)建足夠快,必要的話,采用分級構(gòu)建策略;
n
實踐
8
:將軟件部署到接近真實的環(huán)境上進行測試;
n
實踐
9
:任何人可隨時取到最新的可執(zhí)行程序;
n
實踐
10
:所有人都知道最新的構(gòu)建狀態(tài);
?
?
?
持續(xù)集成(Continuous Integration),