一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

持續(xù)集成之“分支策略”(續(xù))

  在前文中,咱們談到生命周期長(zhǎng)短不同的兩種分支策略。對(duì)于不超過(guò)二十人的小團(tuán)隊(duì)來(lái)說(shuō),推薦使用短生命周期的分支策略。Joe的團(tuán)隊(duì)在首次發(fā)布之前,也一直使用這種方式。然而,首次發(fā)布之后,因市場(chǎng)反響非常好,公司決定加大開(kāi)發(fā)投入,希望更快地推出升級(jí)平臺(tái),以及更多基于平臺(tái)的游戲

  一、按特性分支的持續(xù)集成策略

  現(xiàn)在,Joe的團(tuán)隊(duì)中,開(kāi)發(fā)人員快速增加,已接近30人了。由于首次發(fā)布后的市場(chǎng)壓力,大家一直在趕進(jìn)度,持續(xù)集成的失敗頻率越來(lái)越高,修復(fù)構(gòu)建的時(shí)間也越來(lái)越長(zhǎng),排隊(duì)等待提交的代碼也越積越多。“這種狀況不能再持續(xù)下去了,需要想個(gè)辦法解決它。”Joe決定下午召集主要人員開(kāi)會(huì),分析一下原因和對(duì)策。

  “現(xiàn)在我們還在使用提交令牌(參見(jiàn)《Checkin Dance》一文的最后一節(jié)),可我們的開(kāi)發(fā)人數(shù)已經(jīng)翻了一倍。而且,我們自動(dòng)化測(cè)試用例的數(shù)量也激增。”Joe說(shuō)道,“有時(shí)候我想提交代碼都要排隊(duì)等很長(zhǎng)時(shí)間。”

  “嗯,每天等待提交的人也挺多的。”Alice說(shuō)道,“現(xiàn)在看來(lái),雖然持續(xù)集成讓我們每次提交的質(zhì)量都更有保證,但是在同一個(gè)主干上開(kāi)發(fā)的人數(shù)太多,它就成了一個(gè)提高開(kāi)發(fā)效率的瓶頸了。”

  “要不這樣吧:我們把大家分成小組,每個(gè)小組從主干上拉出一個(gè)分支,完成一組相近特性的開(kāi)發(fā)后,再合并回主干。”Bob邊說(shuō)邊在白板上畫了出來(lái)(如圖1所示)。

  “對(duì)應(yīng)的持續(xù)集成方案也需要調(diào)整。包括:

  • 保留現(xiàn)有主干對(duì)應(yīng)的持續(xù)集成平臺(tái),但不許在主干上直接開(kāi)發(fā)代碼;
  • 每個(gè)分支增加一個(gè)相對(duì)應(yīng)的持續(xù)集成平臺(tái);
  • 每個(gè)分支的持續(xù)集成平臺(tái)構(gòu)建中需要包括該分支對(duì)應(yīng)特性的單元測(cè)試、功能測(cè)試;
  • 每次向主干合并時(shí),都會(huì)觸發(fā)主干上的持續(xù)集成,構(gòu)建中應(yīng)包含整個(gè)系統(tǒng)的單元測(cè)試、功能測(cè)試等。

  這樣,每個(gè)小組的人數(shù)不會(huì)太多,提交時(shí)需要等待他們提交完成的概率應(yīng)該不會(huì)太大。另外,每個(gè)分支的持續(xù)集成上只運(yùn)行自己分支對(duì)應(yīng)特性的單元測(cè)試和功能測(cè)試,這樣,構(gòu)建時(shí)間也會(huì)縮短。”

  “聽(tīng)上去是個(gè)好辦法,”Alice答道,“可是,我對(duì)這個(gè)方案有幾個(gè)疑問(wèn)。比如說(shuō),這幾個(gè)小組在什么時(shí)候做同步?每個(gè)小組什么時(shí)候向主干合并代碼?”

  “嗯,好問(wèn)題。我還沒(méi)有想到這么多呢。”Bob皺了皺眉,感到很沮喪。

  Joe笑了笑,說(shuō)道:“的確是不錯(cuò)的方案。只要加一點(diǎn)同步與合并規(guī)則,改進(jìn)一下。”然后,他拿起白板筆,在圖上加了幾筆(所圖2所示)。

  “規(guī)則如下:

  • 每個(gè)小功能在盡可能短的時(shí)間里開(kāi)發(fā)且測(cè)試完成,最好是在一周之內(nèi)。
  • 每組做完一個(gè)小功能后,一旦該分支上的持續(xù)集成構(gòu)建通過(guò),而且手工驗(yàn)證沒(méi)有問(wèn)題,就可以向主干合并代碼。
  • 合并后,與主干對(duì)應(yīng)的持續(xù)集成平臺(tái)會(huì)立即驗(yàn)證這些代碼。
  • 如果主干持續(xù)集成平臺(tái)的構(gòu)建失敗,那么是哪個(gè)小組提交導(dǎo)致的,就由哪個(gè)小組負(fù)責(zé)修復(fù)。
  • 每天各組在開(kāi)始工作之前,都要將主干上那個(gè)最新且通過(guò)主干持續(xù)集成構(gòu)建成功的代碼檢出,并與各自分支的代碼進(jìn)行合并。

  其實(shí),這就是小組級(jí)別的‘Checkin Dance’。目的還是要持續(xù)集成,即盡量要將各小組的工作成果集成在一起。如果每個(gè)小組能夠做到頻繁與主干代碼同步。”

  Alice問(wèn)道:“由于每個(gè)分支上都是多人開(kāi)發(fā),那么當(dāng)某個(gè)功能完成后,并需要合并回主干時(shí),該分支上可能已經(jīng)有一些代碼是屬于尚未完成功能的代碼。我們需要把屬于該功能的代碼修改挑選出來(lái)后提交到主干嗎?”

  “你是說(shuō)Cherry Picking吧。只要我們能夠通過(guò)技術(shù)手段確保用戶無(wú)法訪問(wèn)到未完成的功能,就不需要Cherry Picking了。比如通過(guò)配置項(xiàng)或功能開(kāi)關(guān)的方式。”Joe說(shuō)道。

  “這樣做,聽(tīng)起來(lái)挺好的,但還有一個(gè)問(wèn)題需要解決,那就是:現(xiàn)在大家的代碼耦合度太高啦。每增加一個(gè)小功能,都要修改很多個(gè)位置的代碼。”Bob說(shuō)道,“如果這么做的話,各組之間的代碼沖突會(huì)很多,合并可能帶來(lái)很多問(wèn)題。”

  “的確是這樣的,目前的持續(xù)集成方案只能緩解合并問(wèn)題,但無(wú)法解決合并中的代碼沖突問(wèn)題,只有通過(guò)對(duì)代碼的結(jié)構(gòu)進(jìn)行調(diào)整才能夠解決。”Job說(shuō)道。“而且,對(duì)于我們這樣的軟件系統(tǒng)來(lái)說(shuō),對(duì)架構(gòu)進(jìn)行調(diào)整帶來(lái)的益處更大。”

  二、模塊化應(yīng)用程序的持續(xù)集成

  “啊哈!架構(gòu)調(diào)整?”Bob笑道,“架構(gòu)這個(gè)詞讓人用得太濫了,還是不要提的好。一提到架構(gòu)調(diào)整,我就想起在前一雇主公司干的活了——每次架構(gòu)調(diào)整都是重寫代碼。”

  “哦,事實(shí)上,我們系統(tǒng)的架構(gòu)基本上是模塊化的,比如平臺(tái)與具體游戲之間的邊界還算清晰。”Joe回應(yīng)道,“現(xiàn)在我們所要做的是強(qiáng)化模塊化。因?yàn)椋录尤氲拈_(kāi)發(fā)人員對(duì)系統(tǒng)了解不夠深入,有些功能的耦合度開(kāi)始增高了。我希望每個(gè)游戲就作為一個(gè)獨(dú)立模塊,進(jìn)行開(kāi)發(fā)與測(cè)試。而它所依賴的游戲平臺(tái)需要提供穩(wěn)定的對(duì)外接口。”

  Alice說(shuō)道:“那我們就可以不用前面提到的特性分支策略了,只要把每個(gè)模塊做為一個(gè)獨(dú)立的代碼庫(kù)進(jìn)行開(kāi)發(fā),將它所依賴的游戲平臺(tái)作為外部依賴進(jìn)行集成就行了。”

  “的確是這樣的。”Joe肯定的回答道。“如果每個(gè)模塊對(duì)外都有某種形式的接口(比如API,接口定義文件),而所有外部依賴都通過(guò)這些接口與其進(jìn)行交互的話,就可以這樣做。”如圖3所示。

  “如果這么做的話,我們的持續(xù)集成方案應(yīng)該是什么樣的呢?”Bob問(wèn)道。

  “那不是一樣嘛,即然都是獨(dú)立的,各模塊做各自的持續(xù)集成不就行了嘛。”Alice說(shuō)道。

  “當(dāng)然不行,因?yàn)檫@些模塊之間仍舊需要通過(guò)彼此交互才能正常運(yùn)行起來(lái),尤其是對(duì)于那些有信息交換的游戲模塊,集成測(cè)試就更加重要。”Joe回答道,“既然需要集成,就要做持續(xù)集成。”

  Alice問(wèn):“那我們有這么多個(gè)游戲,每個(gè)游戲都要與基礎(chǔ)游戲平臺(tái)進(jìn)行持續(xù)集成,到底應(yīng)該怎么做呢?”

  “我們可以這么做。”Bob拿起筆在白板上畫了起來(lái)(如圖4所示)。“為每個(gè)模塊的代碼庫(kù)建立對(duì)應(yīng)的持續(xù)集成環(huán)境,包括每個(gè)游戲和基礎(chǔ)平臺(tái)。無(wú)論哪個(gè)模塊代碼庫(kù)修改了代碼,都會(huì)觸發(fā)對(duì)應(yīng)的持續(xù)集成構(gòu)建,一旦該模塊的持續(xù)集成構(gòu)建成功以后,就會(huì)觸發(fā)一個(gè)包含所有游戲和平臺(tái)的集成構(gòu)建。”

  “這樣不錯(cuò),但是現(xiàn)在每個(gè)模塊都對(duì)應(yīng)獨(dú)立的代碼庫(kù)了,那么在最后各模塊集成構(gòu)建時(shí),到底用各模塊的哪個(gè)版本呢?”Alice問(wèn)道。

  Joe說(shuō)道,“Alice的問(wèn)題非常好。在最后各模塊集成構(gòu)建時(shí),除了那個(gè)主動(dòng)觸發(fā)構(gòu)建的模塊使用最新版本外,其它模塊都使用最后一次令該集成構(gòu)建成功的那個(gè)對(duì)應(yīng)版本。”Joe邊說(shuō)邊在白板上畫了一個(gè)例子。

  “比如,對(duì)于我們目前的系統(tǒng)來(lái)說(shuō),一共有四個(gè)游戲模塊和一個(gè)基礎(chǔ)平臺(tái)。假如最后一次成功的集成構(gòu)建中,各模塊對(duì)應(yīng)的版本分別是123, 245, 212, 467 和12387。當(dāng)我們對(duì)游戲模塊A進(jìn)行了一次提交,其版本變?yōu)?24,并且通過(guò)了它自己的持續(xù)集成構(gòu)建以后,就會(huì)觸發(fā)最后的集成構(gòu)建。這次集成構(gòu)建所對(duì)應(yīng)的各模塊版本分別為124, 245, 212, 467和12387。如果這次構(gòu)建成功,則下次最后集成構(gòu)建就以這些版本為基礎(chǔ);如果這次構(gòu)建失敗了,則標(biāo)記游戲模塊A的124版本是可疑版本,盡管它通過(guò)了其自身模塊的構(gòu)建。同時(shí)需要有人對(duì)這次集成構(gòu)建進(jìn)行分析,進(jìn)行問(wèn)題定位并修復(fù)。”如圖5所示。

  “那么,我們的基礎(chǔ)游戲平臺(tái)也是由多個(gè)模塊組成的。我們是否也需要把這些模塊獨(dú)立成庫(kù),使用同樣的方式進(jìn)行持續(xù)集成呢?”Bob問(wèn)道。

  Joe回答道:“我認(rèn)為現(xiàn)在還不需要。平臺(tái)內(nèi)部模塊化是應(yīng)該的,但因?yàn)樗陨淼臉?gòu)建時(shí)間并不長(zhǎng),還沒(méi)有必要獨(dú)立成庫(kù)。”

  Alice此時(shí)說(shuō)道:“這樣看來(lái),我們的持續(xù)集成問(wèn)題可以按這種方案來(lái)解決。讓我們?cè)囋嚢伞?rdquo;

  那么,Joe的團(tuán)隊(duì)使用這種持續(xù)集成方案以后,還會(huì)遇到什么情況呢?比如,基礎(chǔ)平臺(tái)的構(gòu)建時(shí)間變長(zhǎng),會(huì)怎么樣呢?

  需要注意的是,無(wú)論采用哪種方法,我建議都不要讓同一組人一直工作在一個(gè)模塊上(雖然這是在各組織中經(jīng)常見(jiàn)到的),而是讓一組人工作在一組模塊或功能上,并讓小組成員在各組間流動(dòng)。這樣有利于組間的知道共享,對(duì)保持架構(gòu)的一致性也會(huì)起到積極作用。

it知識(shí)庫(kù)持續(xù)集成之“分支策略”(續(xù)),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲成a | 一级做a爰片欧美aaaa | 视色4se视频在线观看 | 成人免费视频在线观看 | 欧美日韩加勒比一区二区三区 | 黄网站色成年片大免费软件 | 成年美女黄网站色大片免费软件看 | 天天影院色| 久久97久久97精品免视看秋霞 | 亚洲精品国产综合久久一线 | 日韩精品亚洲专区在线影视 | 中文字幕 亚洲一区 | 欧美高清在线观看视频 | 亚欧三级 | 亚洲黄色高清视频 | 国产精品免费观看视频 | 久久国产精品国语对白 | 91精品久久久久久久久中文字幕 | 欧美亚洲图片小说 | 成人春色在线观看免费网站 | 国产精品亚洲视频 | 欧美日韩国产一区二区三区在线观看 | 成人亚洲国产综合精品91 | 激性欧美在线播激性欧美 | 久久综合精品国产一区二区三区 | 国内精品欧美久久精品 | 伊色综合久久之综合久久 | 亚洲香蕉久久一区二区三区四区 | 国内视频精品 | 劲爆欧美第1页婷婷 | 婷婷久久综合网 | 目韩一区二区三区系列片丶 | 九九视频在线看精品 | 亚洲综合激情六月婷婷在线观看 | 成人99国产精品 | 2021精品国产品免费观看 | 精品四虎免费观看国产高清 | 一区二区三区鲁丝不卡麻豆 | 国产一区二区精品在线观看 | 欧美人体一区二区三区 | 色四月婷婷 |