jasmine214--love

          只有當(dāng)你的內(nèi)心總是充滿快樂(lè)、美好的愿望和寧?kù)o時(shí),你才能擁有強(qiáng)壯的體魄和明朗、快樂(lè)或者寧?kù)o的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          導(dǎo)航

          公告

          這里是我記錄學(xué)習(xí)與成長(zhǎng)的地方,文章大多摘自網(wǎng)絡(luò),如有不妥,作者可以跟我聯(lián)系,我會(huì)盡快刪除。
          <2011年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(10)

          隨筆分類(lèi)(920)

          隨筆檔案(724)

          收藏夾(15)

          Ajax

          JS

          VC++

          WLAN

          版本管理

          網(wǎng)管軟件

          項(xiàng)目管理

          高手成長(zhǎng)

          最新隨筆

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          原文:http://bbs.scmlife.com/thread-16603-1-1.html

          一個(gè)項(xiàng)目想要成功,那配置管理的努力是必不可少的。如何做一個(gè)好的配置管理,同時(shí)減輕自己的負(fù)擔(dān),那就是一個(gè)值得認(rèn)真思考的問(wèn)題拉。+ Z, Z7 d1 W/ J/ e) Q0 A* O1 J# i+ X
          一個(gè)產(chǎn)品想要實(shí)現(xiàn)持續(xù)集成及日創(chuàng)建,那么非得有一套好的自動(dòng)編譯系統(tǒng)支撐才可以,否則對(duì)于一個(gè)龐大的系統(tǒng)而言,一個(gè)配置管理就算累死也無(wú)法滿足需求的。
          下面以我的經(jīng)驗(yàn)說(shuō)說(shuō)任何構(gòu)建一個(gè)自動(dòng)編譯系統(tǒng)。
          $ E( i$ {4 U: N
          為了更好的自動(dòng)編譯,我想應(yīng)該建立一個(gè)這樣的系統(tǒng),那就是:
          1
          、開(kāi)發(fā)人員或定時(shí)觸發(fā)。
          2
          、自動(dòng)更新編譯環(huán)境。- P$ e; s  `% ^" c* U2 A0 L
          3
          、自動(dòng)編譯。
          ( b: C$ m* F  t: W9 w  l4
          、自動(dòng)分析編譯結(jié)果。. U5 A! [6 X4 h6 Z2 ]+ |4 V9 v
          5
          、自動(dòng)通知開(kāi)發(fā)、測(cè)試及配置管理員。$ C+ ~9 h& D! y4 m" c% d

          下面我假設(shè)情況如下:
          1
          、操作系統(tǒng):平臺(tái)包括:HP-UXSunOSAIXLinux Windows (均包括多個(gè)版本)、。  M! c$ t9 ": k
          2
          、數(shù)據(jù)庫(kù)包括:oracle 8i9i10G
          3、編譯器包括:aCCCCxlCgccbcb(windows 上的集成開(kāi)發(fā)環(huán)境) java(包括多個(gè)版本)/ R" N3 J* F$ "% L- R, D' b
          4
          、項(xiàng)目規(guī)模超過(guò)千萬(wàn)行代碼、模塊眾多、調(diào)用復(fù)雜。# H! A# y: "8 J% f7 C, G! j" `( E
          那么在這樣一個(gè)情況下,如果我們考慮用一般的商用工具做,顯然成本是很高的。0 y; l( I* Y: x
          對(duì)于這樣一個(gè)龐大,復(fù)雜的系統(tǒng),我想在項(xiàng)目啟動(dòng)后,首先要做的是:
          1
          、定義編碼規(guī)范。0 L# S* D9 |' y2 @3 @1 G  h
          2
          、定義C++java的編譯選項(xiàng)(由于C++語(yǔ)言中編譯器及平臺(tái)版本不同,3264位要求及數(shù)據(jù)庫(kù)的版本等不同要求,所以編譯選項(xiàng)顯然要提取出來(lái)單獨(dú)處理)。
          3
          、定義Makefile 規(guī)范。
          4
          、定義模塊目錄結(jié)構(gòu)。
          5
          、定義接口提供方式。
          4 C( J  w$ v1 n* _  {, {+ m
          在定義以上內(nèi)容的時(shí) 候,一定要遵循一個(gè)原則,符合命名規(guī)范、盡量可配置、易懂、易于理解。最后組合出的編譯命令的字符串不要太長(zhǎng)(unix操作系統(tǒng)下,不同版本的shell 對(duì)一個(gè)命令的長(zhǎng)度有不同要求、同時(shí)由于Makefile中如果有很多shell 腳本的話,編譯性能也會(huì)受影響)。3 U& P* h8 Q6 x& A8 E+ P
          在我用過(guò)的系統(tǒng)中,make 工具,unix 平臺(tái)我們使用的是 GNU make 版本3.80java 用的是 antwindows 平臺(tái)C++用的是bcb 自帶的make,不過(guò)在編譯前先要將bcb的工程文件bpr文件轉(zhuǎn)換為Makefile文件,使用的工具是bpr2make(之所以不用bcb直接編譯, 主要是為拉自動(dòng)編譯,自動(dòng)分發(fā)編譯結(jié)果)。
          2 [3 `" W; x% d- O
          為了更好的跟蹤代碼及需求、bug變更情況,自動(dòng)編譯系統(tǒng),應(yīng)該從開(kāi)發(fā)人員提交代碼開(kāi)始,到發(fā)布結(jié)束。( W- J% J4 O4 O/ E, a" m% s
          流程如下:( V+ t: ~4 G+ }3 V* e' H; G8 ": k
          1
          、開(kāi)發(fā)人員提交代碼。
          2
          、編譯腳本觸發(fā),從版本庫(kù)更新代碼到編譯服務(wù)器。
          3
          、設(shè)置編譯需要的環(huán)境變量。
          4
          、構(gòu)造編譯需要的Makefile6 z% i( G5 ~. U2 l( q# I3 ^+ z9 ~
          5
          、執(zhí)行編譯。
          6
          、分析編譯結(jié)果、記錄編譯結(jié)果。* N2 |9 P5 d% i: N. L
          7
          、發(fā)郵件通知開(kāi)發(fā)、配置管理、測(cè)試人員等相關(guān)人。# k5 |$ u9 ]2 `1 L2 ]0 I
          8
          、更新到測(cè)試環(huán)境測(cè)試。  t, {9 D4 y3 ?7 v( Y5 q8 H- @
          9
          、配置管理員發(fā)布。
          2 ]2 b# _: ]5 q5 S# G! S* F
          下面我以cvssvn為源碼版本庫(kù)做作說(shuō)明,需要寫(xiě)一些適當(dāng)?shù)哪_本,并且需要數(shù)據(jù)庫(kù)的配合才能工作的比較順利。
          1
          、建議用戶表
          ( z  q  O: |- F0 R6 r2
          、在數(shù)據(jù)庫(kù)中建立產(chǎn)品表。
          3
          、在數(shù)據(jù)庫(kù)中建立模塊表(需要記錄模塊優(yōu)先級(jí)、模塊路徑、Makefile 文件的名稱(chēng)等功能)。/ w* n9 y' D3 y3 R( L3 u9 x
          4
          、建立需求表、任務(wù)單表、bug表、編譯記錄表。, s' t5 N4 m5 L& t) N- Q* X* [
          5
          、編寫(xiě)代碼提交腳本。實(shí)現(xiàn)提交代碼的同時(shí),在編譯記錄表中增加記錄,并關(guān)聯(lián)需求單、任務(wù)單、BUG單功能。3 O+ N0 n3 e2 p' f
          6
          、編寫(xiě)自動(dòng)編譯腳本。實(shí)現(xiàn)定時(shí)查詢數(shù)據(jù)庫(kù),根據(jù)編譯單,進(jìn)行編譯的功能。需要實(shí)現(xiàn),獲取編譯單后,自動(dòng)生成編譯環(huán)境所需的環(huán)境變量,構(gòu)造編譯用 Makefile,更新待編譯代碼,編譯完成后分析編譯結(jié)果,給被編譯代碼打tag,獲取編譯結(jié)果的特征串,然后記錄到數(shù)據(jù)庫(kù)中,并發(fā)郵件通知開(kāi)發(fā)人員、 測(cè)試人員及配置管理人員。

          如果以上腳本實(shí)現(xiàn),那么,不管你是要日創(chuàng)建還是隨時(shí)編譯,還是全系統(tǒng)編譯,都是輕松的事情拉。
          雖然windows 平臺(tái)和unix 平臺(tái)差別很大,c++java的差異也很大,但是如果大家將以上要求都用函數(shù)實(shí)現(xiàn)。我想遷移還是很方便的。1 t" v+ t  U' U* `" N% ~. L
          尤其是腳本語(yǔ)言,多數(shù)是支持跨平臺(tái)的。
          2 _* W: V3 t/ Q0 _0 C' q/ k" @) j) T& m
          這里主要可能碰到的問(wèn)題是。7 r8 O- u! R2 t6 B% @
          1
          、模塊結(jié)構(gòu)規(guī)劃不合理。
          : ?# j  z: ?' |* g. |0 w. T* E9 n  m2
          、公共調(diào)用文件的安裝問(wèn)題。
          3
          、模塊編譯順序的問(wèn)題。對(duì)于復(fù)雜的系統(tǒng),那么調(diào)用關(guān)系就決定了編譯順序,可能要多次調(diào)整。
          4
          、編譯結(jié)果的安裝問(wèn)題。最好是編譯完成通知測(cè)試人員,讓他們自己安裝。否則你自動(dòng)殺掉他們正在測(cè)試的進(jìn)程,他們會(huì)找你算賬的。( k/ |( ?$ e' {$ T: q
          5
          、編譯結(jié)果的分析問(wèn)題。編譯結(jié)果的分析就需要自己寫(xiě)正則表達(dá)式來(lái)分析日志了,級(jí)聯(lián)編譯中是無(wú)法通過(guò)失敗信號(hào)獲取編譯失敗的,只能分析日志。
          6
          、郵件發(fā)送問(wèn)題。unix 平臺(tái),配置好DNSsendmail就好啦,windows平臺(tái),如果沒(méi)有找到你所用腳本語(yǔ)言的郵件發(fā)送函數(shù),那么你就的自己用telnet smtp 協(xié)議實(shí)現(xiàn)拉。- h5 F! e" h1 R3 N% F5 e

          6 `! g" j" Q- l$ f, U8 ^) W0 @# y# y
          可能有人奇怪我為什么要設(shè)計(jì)一個(gè)數(shù)據(jù)出來(lái),我想如果有數(shù)據(jù)庫(kù)的話,方便維護(hù)人員根據(jù)編譯目標(biāo)文件的特征串,查找出,這是那一次編譯的,生成他的源碼有那些,具體版本是什么。/ n3 i& _+ p9 n5 N) V& D  w
          同時(shí)也可以查找出是為那個(gè)需求或BUG而修改代碼的,修改了那些地方等。同時(shí)也可以通過(guò)數(shù)據(jù)庫(kù)統(tǒng)計(jì),分析出,模塊代碼的變更情況和工作量,進(jìn)度等。8 W/ |; s& w& x* v( |
          同時(shí)也可以分析出那些人老是提交錯(cuò),經(jīng)常容易犯那些錯(cuò)誤,編譯流程改進(jìn),作為cmmi 5級(jí)的數(shù)據(jù)提供。1 P/ e5 r$ D8 u0 j7 x' q' R0 ?
          拉拉雜雜寫(xiě)啦一大堆,希望對(duì)大家有用。

          看到論壇里面有很多人詢問(wèn),工具的選擇和使用問(wèn)題。個(gè)人建議:如果沒(méi)有采購(gòu)的想法。那么我建議使用SVN做版本管理工具。理由如下:
          一、SVN的開(kāi)發(fā)團(tuán)隊(duì)就是當(dāng)初CVS的開(kāi)發(fā)團(tuán)隊(duì)。( q3 "9 K- W( V" O* i/ n/ S" D
          1
          、正式由于CVS的很多缺陷,所以才放棄CVS,改開(kāi)發(fā)SVN的。
          2
          CVS以后只會(huì)修改BUG,不會(huì)在出新功能拉。
          3
          CVS的權(quán)限功能很不完全,猶如雞肋。
          二、SVN相對(duì)于CVS有很多優(yōu)點(diǎn)。) o+ p; C1 M3 f
          SVN
          的優(yōu)點(diǎn)如下:
          1
          、天然支持webSVN服務(wù)器是可以和apache集成的,所以天然就支持HTTP協(xié)議,就可以通過(guò)互聯(lián)網(wǎng)訪問(wèn),同時(shí)可以使用apache的權(quán)限系統(tǒng)。而CVS只能通過(guò)CVSWEB來(lái)通過(guò)瀏覽器訪問(wèn)。4 ^1 h3 V2 ]0 P( Z# [  q, `; "$ q
          2
          SVN支持文件的移動(dòng),支持文件的改名,支持目錄版本。
          3
          SVN提供拉API,提供拉各種語(yǔ)言的開(kāi)發(fā)庫(kù),這個(gè)是CVS所不支持的。CVS的二次開(kāi)發(fā),只能通過(guò)命令行的方式做腳本,否則你就要在CVSC代碼中做接口,才能增加或修改功能。
          4
          SVN便于和自己開(kāi)發(fā)的配置管理工具集成。原因如上。8 |3 g7 P  o/ _
          5
          SVN可以通過(guò)LDAP和公司的域結(jié)合起來(lái),實(shí)現(xiàn)單點(diǎn)認(rèn)證。
          三、相對(duì)于CVSSVNVSS有幾個(gè)個(gè)很大的缺點(diǎn)。
          1
          VSS是基于CHECKOUT、鎖模式的,而SVNCVS及基于CHECKOUT、合并模式的。后者顯然更適合協(xié)同開(kāi)發(fā),適合多人修改同一份代碼。而且作為配置管理員,也不用疲于奔命的去刪除鎖。
          2
          VSS只支持windows平臺(tái),而CVSSVN是跨平臺(tái)的。也許一時(shí)無(wú)所謂,但是如果有一天公司轉(zhuǎn)向類(lèi)unix平臺(tái),你就得遷移配置庫(kù),重新編寫(xiě)使用手冊(cè),并且做培訓(xùn),為什么不把問(wèn)題消滅在萌芽狀態(tài)呢。* }0 x4 `" `4 e2 `7 Q5 `% _
          3
          VSS是要共享目錄以便訪問(wèn)。這樣在網(wǎng)絡(luò)病毒猖獗的日子里,你就和病毒做斗爭(zhēng)去吧。同時(shí)代碼安全和是一個(gè)大問(wèn)題啊。
          4
          VSS是不支持web訪問(wèn)的。9 V5 b: _" E1 U# ?1 X" o
          5
          、權(quán)限配置也不夠友好。" S. y$ J, X8

          主站蜘蛛池模板: 玉田县| 大庆市| 双牌县| 开原市| 台东市| 延边| 灵川县| 安图县| 石嘴山市| 云梦县| 景谷| 虞城县| 宁南县| 新巴尔虎左旗| 永济市| 巴马| 庄河市| 遂昌县| 清涧县| 禄丰县| 开阳县| 湛江市| 衡东县| 修水县| 巴彦淖尔市| 翁源县| 梁山县| 曲松县| 新竹县| 德化县| 汪清县| 九龙坡区| 万宁市| 山西省| 重庆市| 天镇县| 垦利县| 九龙城区| 安龙县| 云林县| 台东市|