持續(xù)集成系統(tǒng)使用說明

概述

1.說明

本文檔共有四部分組成:

  • A.概述
  • B.自動化代碼質(zhì)量管理工具sonar
  • C.持續(xù)集成工具h(yuǎn)udson
  • D.一個自動化代碼檢查-編譯-部署的例子

2.什么是持續(xù)集成

持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊開發(fā)成員經(jīng)常集成它們的工作丈攒,通過每個成員每天至少集成一次海诲,也就意味著每天可能會發(fā)生多次集成坡脐。每次集成都通過自動化的構(gòu)建(包括編譯,發(fā)布鳖宾,自動化測試)來驗(yàn)證,從而盡早地發(fā)現(xiàn)集成錯誤【百度百科】。

持續(xù)集成是敏捷軟件開發(fā)工作當(dāng)中的一大組成部分悄泥。從一輪沖刺到下一輪沖刺,技術(shù)團(tuán)隊在“不斷前進(jìn)”的同時持續(xù)推出各類增量化功能肤粱。不過當(dāng)開發(fā)人員高度專注于添加功能的同時弹囚,代碼錯誤有時候也會不期而至、并導(dǎo)致軟件無法正常使用领曼。為了阻止此類錯誤被集成至軟件配置管理(簡稱SCM)方案當(dāng)中鸥鹉,持續(xù)集成服務(wù)器則扮演守門人的角色,幫助我們對代碼質(zhì)量進(jìn)行把關(guān)庶骄。即使糟糕代碼已經(jīng)被集成到SCM當(dāng)中毁渗,持續(xù)集成服務(wù)器仍然能夠快速告訴我們是哪里出了問題。

雖然持續(xù)集成工具能夠扮演守門員的角色单刁,但是還是希望開發(fā)人員在開發(fā)的時候灸异,盡量避免error級的錯誤被提交進(jìn)集成工具中。避免這一問題的唯一辦法是羔飞,當(dāng)我們提交代碼到svn時肺樟,至少在本地是測試通過的。

關(guān)于更廣泛的閱讀逻淌,可以看一下阮老師的博客 http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html

3.持續(xù)集成能給我們的好處

3.1. 減少風(fēng)險

一天中進(jìn)行多次的集成么伯,并做了相應(yīng)的測試,這樣有利于檢查缺陷卡儒,了解軟件的健康狀況田柔,減少假定誓篱。

3.2. 減少重復(fù)過程

通過自動化的持續(xù)集成可以將集成中重復(fù)的動作都變成自動化的,無需太多人工干預(yù)凯楔,讓人們的時間更多的投入到動腦筋的窜骄、更高價值的事情上。

3.3. 任何時間摆屯、任何地點(diǎn)生成可部署的軟件

持續(xù)集成開發(fā)可以在任何時間發(fā)布可以部署的軟件邻遏。利用持續(xù)集成,可以經(jīng)常對源代碼行一些小改動虐骑,并將這些改動和其他的代碼進(jìn)行集成准验。如果出現(xiàn)問題,項目成員馬上就會被通知到廷没,問題會第一時間被修復(fù)糊饱。不采用持續(xù)集成的情況下,這些問題有可能到交付前的集成測試的時候才發(fā)現(xiàn)颠黎,有可能會導(dǎo)致延遲發(fā)布產(chǎn)品另锋,而在急于修復(fù)這些缺陷的時候又有可能引入新的缺陷,最終可能導(dǎo)致項目失敗狭归。

3.4. 增強(qiáng)項目的可見性

持續(xù)集成讓我們能夠注意到趨勢并進(jìn)行有效的決策夭坪。

持續(xù)集成可以帶來兩點(diǎn)積極效果:

  • (1)有效決策:持續(xù)集成系統(tǒng)為項目構(gòu)建狀態(tài)和品質(zhì)指標(biāo)提供了及時的信息,有些持續(xù)集成系統(tǒng)可以報告功能完成度和缺陷率过椎。
  • (2)注意到趨勢:由于經(jīng)常集成室梅,我們可以看到一些趨勢,如構(gòu)建成功或失敗疚宇、總體品質(zhì)以及其它的項目信息亡鼠。

4.持續(xù)集成的一般步驟(適用于咱們公司)

4.1 開發(fā)者端的測試

開發(fā)者自檢,排除明顯的bug敷待,語法錯誤

4.2 提交svn代碼庫

把代碼提交到相應(yīng)的svn庫上

4.3 sonar檢測代碼

利用sonar的java語言檢測工具间涵,檢測開發(fā)者所寫java代碼的質(zhì)量。

4.4 hudson自動部署

Hudson利用maven工具進(jìn)行打包讼撒,并把打好的包交給tomacat進(jìn)行部署

5.持續(xù)集成的工具

  • 1.開發(fā)者使用svn對代碼進(jìn)行管理
  • 2.開發(fā)者使用maven對工程進(jìn)行管理
  • 3.Sonar對工程進(jìn)行代碼檢查
  • 4.Hudson綜合調(diào)度以上工具
  • 5.測試人員把測試環(huán)境下的bug提交到QC

6.技術(shù)負(fù)債

術(shù)語”技術(shù)債務(wù)“是由Ward Cunningham首次提出浑厚,指的是開發(fā)團(tuán)隊在設(shè)計或架構(gòu)選型時從短期效應(yīng)的角度選擇了一個易于實(shí)現(xiàn)的方案,但從長遠(yuǎn)來看根盒,這種方案會帶來更消極的影響钳幅,亦即開發(fā)團(tuán)隊所欠的債務(wù)。敏捷專家們就技術(shù)債務(wù)到底是什么以及如何對其進(jìn)行分類給出了自己的看法炎滞。

Martin Fowler認(rèn)為下面的定義最能表現(xiàn)技術(shù)債務(wù)的含義:

技術(shù)債務(wù)類似于金融債務(wù)敢艰,它也會產(chǎn)生利息,這里的利息其實(shí)就是指由于魯莽的設(shè)計決策導(dǎo)致需要在未來的開發(fā)中付出更多努力的后果册赛。我們可以選擇繼續(xù)支付利息钠导,也可以通過重構(gòu)之前魯莽的設(shè)計來將本金一次付清震嫉。雖然一次性付清本金需要代價,但卻可以降低未來的利息牡属。

Steve McConnell將技術(shù)債務(wù)分為兩類:

  • 無意的——由于經(jīng)驗(yàn)的缺乏導(dǎo)致初級開發(fā)者編寫了質(zhì)量低劣的代碼票堵。
  • 有意的——團(tuán)隊根據(jù)當(dāng)前而非未來進(jìn)行設(shè)計選型,這種方式可能很快就能解決當(dāng)前的問題逮栅,但卻很拙劣悴势。

Bob大叔補(bǔ)充到,有時人們將壞味道也看作是技術(shù)債務(wù)措伐,但這是錯誤的特纤,他說:

壞味道并非技術(shù)債務(wù)。壞味道就是壞味道侥加。技術(shù)債務(wù)的評價標(biāo)準(zhǔn)是真實(shí)的項目約束捧存,這些約束是風(fēng)險和好處并存的。壞味道的產(chǎn)生永遠(yuǎn)都不是理性的結(jié)果担败,而是由懶惰和外行導(dǎo)致的昔穴,未來也沒有機(jī)會償還了。壞味道總是意味著損失氢架。
Bob大叔說技術(shù)債務(wù)讓人們時刻牢記保持代碼的整潔傻咖,就好像一個人在背負(fù)巨大的抵押債務(wù)時需要時刻保持警醒一樣。他又說一旦團(tuán)隊決定采納技術(shù)債務(wù)岖研,那就意味著保持代碼的整潔將變得空前的重要。如果不這樣警检,情況很快就會變得糟糕不堪孙援,償還這些債務(wù)的代價也變得越來越大。

Martin Fowler認(rèn)為壞味道也是技術(shù)債務(wù)扇雕,只不過是另一種形式的技術(shù)債務(wù)而已拓售。

他覺得壞味道是一種不計后果(reckless)的債務(wù),相對于根據(jù)精確計算而得來的謹(jǐn)慎的(prudent)債務(wù)而言镶奉,壞味道會讓問題變得更加嚴(yán)重础淤。他又加上了故意(deliberate)以及無意(inadvertent)從而將技術(shù)債務(wù)劃分為四個象限。

Martin通過如下示例將技術(shù)債務(wù)劃分為4個象限:

  • 1.不計后果哨苛,故意的——團(tuán)隊沒有時間做設(shè)計鸽凶,僅僅給出了一個匆忙做出的方案,缺乏對質(zhì)量的預(yù)見建峭。
  • 2.謹(jǐn)慎玻侥,故意的——盡管有很多已知的缺陷,但團(tuán)隊必須現(xiàn)在交付產(chǎn)品亿蒸,同時對此造成的后果心中有數(shù)凑兰。
  • 3.不計后果掌桩,無意的——團(tuán)隊壓根就不知道基本的設(shè)計原則,更不用說引入的壞味道了姑食。
  • 4.謹(jǐn)慎波岛,無意的——那些擁有優(yōu)秀設(shè)計師的團(tuán)隊很容易遇到這種情況。他們交付的方案具有商業(yè)價值音半,但在完成方案后才明白什么才是最好的方案则拷。
    綜上所述,實(shí)際的項目中將不可避免地存在技術(shù)債務(wù)問題祟剔,這是無法杜絕的隔躲,但問題的關(guān)鍵在于千萬不能引入不計后果的債務(wù),因?yàn)樗鼤掷m(xù)不斷地產(chǎn)生壞味道物延,也很難對付宣旱。

自動化代碼質(zhì)量管理工具sonarqube

1. Sonarqube是什么?

SonarQube is an open platform to manage code quality. As such, it covers the 7 axes of code quality:

相關(guān)名詞

  • Svn Subversion的簡稱叛薯,是一個開放源代碼的版本控制系統(tǒng)
  • Git是一款免費(fèi)浑吟、開源的分布式版本控制系統(tǒng)
  • SCM 軟件配置管理
  • CI 持續(xù)集成

2. Sonarqube在持續(xù)集成系統(tǒng)中的作用

  • A 查看代碼是否有bug
  • B 查看是否符合代碼規(guī)范
  • C 查看是否通過單元測試
  • D 查看代碼復(fù)雜度
    。 耗溜。 组力。

對于團(tuán)隊管理人員來說,它能夠發(fā)現(xiàn)bug抖拴,給出修改bug相關(guān)的評估燎字,比如用時。

3. Sonarqube 查看代碼缺陷

  • A 登錄后界面
  • B 進(jìn)入工程根目錄
  • C 根據(jù)svn用戶名檢索bug
  • 4.coder在sonarqube上
    請閱讀 適合開發(fā)人員的sonar.docx

持續(xù)集成工具h(yuǎn)udson

1.Hudson是什么阿宅?

Hudson 是一款能夠執(zhí)行在軟件工程過程中出現(xiàn)的一些重復(fù)的工作候衍。比如,頻繁的編譯和打包洒放。

  • Building/testing software projects continuously. In a nutshell, Hudson provides an easy-to-use so-called continuous integration system, making it easier for developers to integrate(整合) changes to the project, and making it easier for users to obtain a fresh build. The automated, continuous build increases productivity.

  • Monitoring executions of externally-run jobs, such as cron jobs and procmail jobs(郵件分發(fā)任務(wù)), even those that are run on a remote machine. For example, with cron, all you receive is regular e-mails that capture the output, and it is up to you to look at them diligently and notice when it broke. Hudson keeps those outputs and makes it easy for you to notice when something is wrong.

2.Hudson在持續(xù)集成系統(tǒng)中的作用

整個系統(tǒng)的中樞地位:
(1 負(fù)責(zé)發(fā)現(xiàn)svn版本變化
(2 負(fù)責(zé)調(diào)取sonar進(jìn)行代碼質(zhì)量檢查
(3 負(fù)責(zé)執(zhí)行調(diào)取maven構(gòu)建
(4 負(fù)責(zé)進(jìn)行工程部署
(5 負(fù)責(zé)通知相關(guān)人員是否部署ok
(6 如果部署失敗蛉鹿,負(fù)責(zé)回滾部署

3.Hudson 用于自動化編譯與構(gòu)建

1.添加工程

2.配置工程

3.核心配置參數(shù)講解(供管理人員參考)

A 構(gòu)建觸發(fā)策略配置

第一個選項,是指當(dāng)此工程依賴別的工程的時候往湿,如果別的工程重建后妖异,里面重建這個工程。
第二個選項领追,是指由腳本文件控制控制構(gòu)建機(jī)制他膳,
第三個選項,是指指定時間進(jìn)行構(gòu)建蔓腐,如:每周4矩乐,0點(diǎn)0分進(jìn)行構(gòu)建

第四個選項,是指當(dāng)svn版本變化后多長時間進(jìn)行構(gòu)建,如:當(dāng)svn有變化時散罕,立馬執(zhí)行構(gòu)建

B Hudson中sonar的配置

一個自動化代碼檢查-編譯-部署的例子

演示一個工程如何加進(jìn)持續(xù)集成系統(tǒng)分歇。

演示步驟要點(diǎn):

  • 1.啟動hudson,sonar
  • 2.在hudson中添加工程并配置工程欧漱。
  • 3.運(yùn)行一次構(gòu)建
  • 4.查看 hudson
  • 5.查看sonar
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末职抡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子误甚,更是在濱河造成了極大的恐慌缚甩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窑邦,死亡現(xiàn)場離奇詭異擅威,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冈钦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門郊丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞧筛,你說我怎么就攤上這事厉熟。” “怎么了较幌?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵揍瑟,是天一觀的道長。 經(jīng)常有香客問我乍炉,道長绢片,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任岛琼,我火速辦了婚禮杉畜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衷恭。我一直安慰自己,他們只是感情好纯续,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布随珠。 她就那樣靜靜地躺著,像睡著了一般猬错。 火紅的嫁衣襯著肌膚如雪窗看。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天倦炒,我揣著相機(jī)與錄音显沈,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛拉讯,可吹牛的內(nèi)容都是我干的涤浇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼魔慷,長吁一口氣:“原來是場噩夢啊……” “哼只锭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起院尔,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蜻展,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邀摆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纵顾,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年栋盹,在試婚紗的時候發(fā)現(xiàn)自己被綠了施逾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡贞盯,死狀恐怖音念,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躏敢,我是刑警寧澤闷愤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站件余,受9級特大地震影響讥脐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啼器,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一旬渠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧端壳,春花似錦告丢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至照捡,卻和暖如春颅湘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栗精。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工闯参, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞻鹏,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓鹿寨,卻偏偏與公主長得像新博,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子释移,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容