




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 企業(yè)軟件項(xiàng)目的持續(xù)集成Docker 微信號(hào) dockerone功能介紹 最專業(yè)的Docker文章,最權(quán)威的Docker新聞。關(guān)注容器生態(tài)圈的發(fā)展。持續(xù)集成(Continuous Integration),也就是我們經(jīng)常說(shuō)的 CI,是現(xiàn)代軟件開(kāi)發(fā)技術(shù)的基礎(chǔ)。本文論述了當(dāng)前軟件開(kāi)發(fā)過(guò)程中存在的問(wèn)題,講解了持續(xù)集成、持續(xù)集成服務(wù)器的概念,最終探討了為什么我們需要持續(xù)集成來(lái)解決這些問(wèn)題。當(dāng)前軟件開(kāi)發(fā)過(guò)程存在的問(wèn)題在沒(méi)有應(yīng)用持續(xù)集成之前,傳統(tǒng)的開(kāi)發(fā)模式是這樣的:項(xiàng)目一開(kāi)始是先劃分好模塊,分配模塊給相應(yīng)的開(kāi)發(fā)人員;開(kāi)發(fā)人員開(kāi)發(fā)好一個(gè)模塊就進(jìn)行單元測(cè)試;等所有的模塊都開(kāi)發(fā)完成之后,由項(xiàng)目經(jīng)理對(duì)所有代碼進(jìn)行
2、集成;集成后的項(xiàng)目由項(xiàng)目經(jīng)理部署到測(cè)試服務(wù)器上,被交由測(cè)試人員進(jìn)行集成測(cè)試;測(cè)試過(guò)程中出現(xiàn) Bug 就提把問(wèn)題記錄進(jìn)行 Bug 列表中;項(xiàng)目經(jīng)理分配 Bug 給相應(yīng)的責(zé)任人進(jìn)行修改;修改完成后,項(xiàng)目經(jīng)理再次對(duì)項(xiàng)目進(jìn)行集成,并部署到測(cè)試服務(wù)器上;測(cè)試人員在下一次的集成測(cè)試中進(jìn)行回歸測(cè)試;通過(guò)通過(guò)之后就部署到生產(chǎn)環(huán)境中;如果測(cè)試不通過(guò),則重復(fù)上述“分配 Bug - 修改 Bug - 集成代碼 - 部署到測(cè)* 試服務(wù)器上 - 集成測(cè)試”工作。這個(gè)過(guò)程中可能會(huì)出現(xiàn)如下問(wèn)題:Bug 總是在最后才發(fā)現(xiàn)隨著軟件技術(shù)的發(fā)展,軟件規(guī)模也在擴(kuò)大,軟件需求越來(lái)越復(fù)雜,軟件已經(jīng)不能簡(jiǎn)單地通過(guò)劃分模塊的方式來(lái)開(kāi)發(fā),往往
3、需要在項(xiàng)目?jī)?nèi)部互相合作,模塊之間存在一定的依賴關(guān)系,那么早期就存在的 Bug 往往會(huì)在最后集成的時(shí)候才被發(fā)現(xiàn)。越到項(xiàng)目后期,問(wèn)題越難解決很多開(kāi)發(fā)者需要在集成階段花費(fèi)大量的時(shí)間來(lái)尋找 Bug 的根源,加上軟件的復(fù)雜性,問(wèn)題的根源很難定位。而且我們都清楚,間隔的時(shí)間越久,Bug 修復(fù)的成本越高,因?yàn)檫B開(kāi)發(fā)人員自己都忘了當(dāng)初寫(xiě)得是什么鬼代碼,從而不得不從頭閱讀代碼、理解代碼。軟件交付時(shí)機(jī)無(wú)法保障正是因?yàn)槲覀儫o(wú)法及時(shí)修復(fù) Bug,或者是沒(méi)能在早期就修復(fù) Bug,從而令整個(gè)修復(fù) Bug 的周期拉長(zhǎng)了。不管怎么樣,我們不可能把明知存在 Bug 的軟件交付給客戶。而且,大量沒(méi)有在前期預(yù)估到的工作量產(chǎn)生了開(kāi)發(fā)
4、人員不得不花費(fèi)大把時(shí)間在查找 Bug 上;測(cè)試人員不斷的需要進(jìn)行回歸測(cè)試;項(xiàng)目經(jīng)理不得不疲命于該死的代碼的集成、部署這些重復(fù)性工作最終導(dǎo)致整個(gè)項(xiàng)目的周期拉長(zhǎng),交付時(shí)間點(diǎn)往后拖。程序經(jīng)常需要變更某些項(xiàng)目,程序會(huì)經(jīng)常需要變更,特別是敏捷開(kāi)發(fā)的實(shí)踐者。由于產(chǎn)品經(jīng)理在與客戶交流過(guò)程中,往往實(shí)際的軟件就是最好的原型,所以軟件會(huì)被當(dāng)作原型作為跟客戶交流的工具。當(dāng)然,客戶最希望的當(dāng)然是客戶的想法能夠馬上反映到原型上,這會(huì)導(dǎo)致程序會(huì)經(jīng)常被修改的。那么也就意味著“分配 Bug - 修改 Bug - 集成代碼 - 部署到測(cè)試服務(wù)器上 - 集成測(cè)試”工作無(wú)形又爆增了。無(wú)效的等待變多有可能開(kāi)發(fā)在等集成其他人的模塊;測(cè)
5、試人員在等待開(kāi)發(fā)人員修復(fù) Bug;產(chǎn)品經(jīng)理在等待新版本上線好給客戶做演示;項(xiàng)目經(jīng)理在等待其他人提交代碼。不管怎么樣,等待意味低效。用戶的滿足度低這里的用戶是廣義的,可以指最終的客戶,也可以是產(chǎn)品經(jīng)理、公司領(lǐng)導(dǎo)、測(cè)試人員,甚至可能是開(kāi)發(fā)人員自己。你想想看,本來(lái)三個(gè)月做完的項(xiàng)目被拉長(zhǎng)到了九個(gè)月甚至一年,用戶能滿意嗎!產(chǎn)品經(jīng)理、公司領(lǐng)導(dǎo)經(jīng)常需要拿項(xiàng)目作為演示的原型,結(jié)果告訴我在演示前一刻發(fā)現(xiàn)還有很多 Bug 沒(méi)有解決,項(xiàng)目啟動(dòng)不了無(wú)法訪問(wèn),這叫人情何以堪。持續(xù)集成、持續(xù)集成服務(wù)器的概念那么好了,在上面論述的這些問(wèn)題中,我們發(fā)現(xiàn)有些工作是無(wú)法避免的,比如測(cè)試工作、修改程序、集成工作、部署工作。但其實(shí)在
6、整個(gè)工作流程上,是存在可以優(yōu)化的空間的,比如,集成測(cè)試的工作是否可以提前做?可否有自動(dòng)化的手段來(lái)代替測(cè)試、集成、部署工作?圍繞這些,軟件行業(yè)的大師們提出“持續(xù)集成”口號(hào)。什么是持續(xù)集成、持續(xù)集成服務(wù)器在軟件工程中,持續(xù)集成(CI)是指將所有開(kāi)發(fā)者工作副本每天多次合并到主干的做法。 Grady Booch 在1991年的 Booch method 中首次命名并提出了 CI 的概念,盡管在當(dāng)時(shí)他并不主張每天多次集成。而 XP(Extreme programming,極限編程)采用了 CI 的概念,并提倡每天不止一次集成。而持續(xù)集成服務(wù)器就是能夠采用自動(dòng)化的手段,來(lái)解放人的雙手,實(shí)現(xiàn)項(xiàng)目持續(xù)集成的工
7、具。與之配套的軟件有 TeamCity、Jenkins、Go 等。怎么樣才算是“持續(xù)”對(duì)于一天需要集成多少次數(shù),并沒(méi)有一個(gè)明確的定義。一般就是按照自己項(xiàng)目的實(shí)際需要來(lái)設(shè)置一定的頻率,少則可能幾次,多則可能達(dá)幾十次??梢栽O(shè)置按照代碼的變更來(lái)觸發(fā)集成,或者設(shè)置一個(gè)固定時(shí)間周期來(lái)集成,也可以手工點(diǎn)擊集成的按鈕來(lái)“一鍵集成”。持續(xù)集成的工作流程當(dāng)開(kāi)始更改代碼時(shí),開(kāi)發(fā)人員會(huì)從代碼庫(kù)(如 SVN、Git 等)獲取當(dāng)前代碼庫(kù)的副本。當(dāng)其他開(kāi)發(fā)人員將更改的代碼提交到代碼庫(kù)時(shí),此副本將逐漸停止反映代碼庫(kù)中的代碼。代碼分支保持檢出的時(shí)間越長(zhǎng),當(dāng)開(kāi)發(fā)人員分支重新集成到主線時(shí),多個(gè)集成沖突和故障的風(fēng)險(xiǎn)就越大。當(dāng)開(kāi)發(fā)人
8、員向代碼庫(kù)提交代碼時(shí),他們必須首先更新他們的代碼,以反映代碼庫(kù)中的最新更改。當(dāng)存儲(chǔ)庫(kù)與開(kāi)發(fā)人員的副本不同,他們必須要花時(shí)間來(lái)先處理沖突。持續(xù)集成的好處解放了重復(fù)性勞動(dòng)自動(dòng)化部署工作可以解放了集成、測(cè)試、部署等重復(fù)性勞動(dòng),而且機(jī)器集成的頻率明顯可以比手工的高很多。更快地修復(fù)問(wèn)題由于持續(xù)集成更早的獲取變更,更早的進(jìn)入測(cè)試,也就能更早的發(fā)現(xiàn)問(wèn)題,解決問(wèn)題的成本顯著下降。更快地交付成果及早集成、及早測(cè)試減少了缺陷遺留到部署環(huán)節(jié)的機(jī)會(huì)。在某些情況下,更早地查找錯(cuò)誤還會(huì)減少解決錯(cuò)誤所需的工作量。如果集成服務(wù)器對(duì)代碼進(jìn)行構(gòu)建過(guò)程中發(fā)現(xiàn)錯(cuò)誤,可以及時(shí)發(fā)送郵件或者短信提供給開(kāi)發(fā)人員進(jìn)行修復(fù)。如果集成服務(wù)器在部署
9、環(huán)節(jié)發(fā)現(xiàn)當(dāng)前版本有問(wèn)題不可用,集成服務(wù)器會(huì)將部署回退到上一個(gè)版本。這樣服務(wù)器上始終都會(huì)有一個(gè)可用的版本。減少手工的錯(cuò)誤人與機(jī)器的一個(gè)最大的區(qū)別是,在重復(fù)性動(dòng)作上,人容易犯錯(cuò),而機(jī)器犯錯(cuò)的幾率幾乎為零。所以,當(dāng)我們搭建完成集成服務(wù)器后,以后的事就交給集成服務(wù)器來(lái)打理吧。減少了等待時(shí)間持續(xù)集成縮短了從開(kāi)發(fā)、集成、測(cè)試、部署各個(gè)環(huán)節(jié)的時(shí)間,從而也就縮短了中間可以出現(xiàn)的等待時(shí)間。持續(xù)集成,意味著開(kāi)發(fā)、集成、測(cè)試、部署也得以持續(xù)。更高的產(chǎn)品質(zhì)量集成服務(wù)器往往提供 Code review、代碼質(zhì)量檢測(cè)等功能。對(duì)代碼不規(guī)范或者有錯(cuò)誤的地方會(huì)進(jìn)行標(biāo)識(shí),也可以設(shè)置郵件、短信等進(jìn)行告警。而開(kāi)發(fā)人員通過(guò) Code
10、review 也可以持續(xù)提高編程的能力。持續(xù)集成的最佳實(shí)踐頻繁檢出代碼為了讓你本地的副本和代碼庫(kù)中的版本最小差異化,建議頻繁檢出代碼。有時(shí)候代碼沖突無(wú)可避免,但最小差異化最容易解決。而且,越早發(fā)現(xiàn)的問(wèn)題,解決成本也最低。頻繁提交代碼這個(gè)與第1條的原理類似,頻繁提交代碼,可以讓其他人的檢出副本和代碼庫(kù)中的版本最小差異化。減少分支,回歸主干雖然代碼管理工具都支持分支的概念,但應(yīng)盡量減少其使用。假設(shè)有多個(gè)分支并行,應(yīng)及早將變更集成到主干中,而不是同時(shí)維護(hù)軟件的多個(gè)版本。主干作為軟件開(kāi)發(fā)的工作版本。使用自動(dòng)化構(gòu)建可以使用 Maven、Ant 等來(lái)實(shí)現(xiàn)自動(dòng)化構(gòu)建,這些工具可以幫助你在構(gòu)建過(guò)程中實(shí)現(xiàn)自動(dòng)化
11、測(cè)試。前提是你有寫(xiě)單元測(cè)試用例,比如JUnit等。提交自測(cè)在提交工作之前,每個(gè)程序員必須本地集成所有的代碼,做一個(gè)完整的構(gòu)建和運(yùn)行,并通過(guò)所有單元測(cè)試。這樣就減少了集成測(cè)試在集成服務(wù)器上構(gòu)建失敗的風(fēng)險(xiǎn)。當(dāng)前狀態(tài)對(duì)于每個(gè)人都可見(jiàn)集成服務(wù)器在持續(xù)集成過(guò)程中發(fā)現(xiàn)問(wèn)題,應(yīng)能發(fā)送告警給相關(guān)的干系人。同時(shí),也可以在墻上等醒目的位置設(shè)置一個(gè)大屏顯示器,將集成服務(wù)器的狀態(tài)實(shí)時(shí)展現(xiàn)在大屏上,方便提醒組員“趕緊回去解決問(wèn)題”!持續(xù)集成可能會(huì)面臨的挑戰(zhàn)團(tuán)隊(duì)人員思想上的抵觸針對(duì)這個(gè)問(wèn)題,可以通過(guò)設(shè)置一定的持續(xù)集成技術(shù)培訓(xùn)、宣講得到改觀。無(wú)法接受新事物:不管怎么樣,求穩(wěn)心態(tài)的人還是多??偸怯腥苏J(rèn)為老的技術(shù)代表穩(wěn)定,新的事物往往會(huì)帶來(lái)問(wèn)題。認(rèn)為手工集成也沒(méi)有多少工作量:不是所有的人都參與到了整個(gè)持續(xù)集成的環(huán)節(jié),所以沒(méi)有辦法認(rèn)識(shí)到問(wèn)題全貌。管理層的抵觸針對(duì)這一點(diǎn),可以從開(kāi)發(fā)人員的成本和持續(xù)集成的投入(軟硬件)的成本上兩者做下估算。培訓(xùn)持續(xù)集成需要投入資金啊,沒(méi)錢。持續(xù)集成服務(wù)器要增加軟硬件成本啊,沒(méi)錢。開(kāi)發(fā)人員領(lǐng)了那么高的工資,多干活多加班應(yīng)該啊。生產(chǎn)環(huán)境的復(fù)雜
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (二模)晉中市2025年3月高考適應(yīng)性訓(xùn)練考試 地理試卷(含A+B卷答案詳解)
- 2025年初中人教版八年級(jí)上冊(cè)第二章第二節(jié)聲音的特性說(shuō)課稿
- 4.2《光的反射》說(shuō)課稿 2025年初中 人教版物理八年級(jí)上冊(cè)
- 【東吳證券】AI+服務(wù)消費(fèi)專題報(bào)告:AI在各消費(fèi)場(chǎng)景的落地空間-進(jìn)展幾何
- 研發(fā)中心裝修保修合同樣本
- 農(nóng)業(yè)人才培養(yǎng)與引進(jìn)發(fā)展方案
- 工廠光伏太陽(yáng)能發(fā)電
- 施工現(xiàn)場(chǎng)安全隱患整改方案
- 無(wú)菌醫(yī)療器械項(xiàng)目可行性報(bào)告
- 親子游樂(lè)場(chǎng)轉(zhuǎn)讓
- 我國(guó)醫(yī)療保障現(xiàn)狀問(wèn)題
- 工程項(xiàng)目部安全生產(chǎn)治本攻堅(jiān)三年行動(dòng)實(shí)施方案
- 家電以舊換新風(fēng)險(xiǎn)管控與應(yīng)對(duì)策略
- 第三單元名著閱讀《經(jīng)典常談》-2023-2024學(xué)年八年級(jí)語(yǔ)文下冊(cè)同步教學(xué)課件
- 排污許可證申請(qǐng)與核發(fā)技術(shù)規(guī)范 火電(二次征求意見(jiàn)稿)
- QB-T 2673-2023 鞋類產(chǎn)品標(biāo)識(shí)
- 鄰近鐵路營(yíng)業(yè)線施工安全監(jiān)測(cè)技術(shù)規(guī)程 (TB 10314-2021)
- 《中國(guó)帕金森病診療指南(第四版)》(2023)要點(diǎn)
- 2024年揚(yáng)州市職業(yè)大學(xué)高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 2024年北京京北職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 流感病人護(hù)理版
評(píng)論
0/150
提交評(píng)論