溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

實(shí)戰(zhàn) CruiseControl.NET+NAnt(一)- 簡(jiǎn)介

發(fā)布時(shí)間:2020-07-17 17:39:16 來(lái)源:網(wǎng)絡(luò) 閱讀:932 作者:瞿杰 欄目:編程語(yǔ)言

作者:Tony Qu

首先,我們先回顧下過(guò)去我們是怎么構(gòu)建build server的。

大部分人最先想到的肯定是bat還有Windows系統(tǒng)的計(jì)劃任務(wù),確實(shí),這兩個(gè)東西在過(guò)去誰(shuí)也離不開(kāi)誰(shuí),bat充當(dāng)腳本引擎,計(jì)劃任務(wù)充當(dāng)觸發(fā)器。但在實(shí)際操作中我們發(fā)覺(jué)bat的能力是有限的,需要很多輔助的工具,因?yàn)樗鼪](méi)辦法像高級(jí)語(yǔ)言一樣直接訪問(wèn)系統(tǒng)組件,比如需要用vbscript來(lái)訪問(wèn)adsi、訪問(wèn)com對(duì)象、控制IIS、訪問(wèn)注冊(cè)表、訪問(wèn)wmi等。通常我們的做法是借助一些輔助命令或工具,比如iis我們可以用系統(tǒng)自帶的iisweb.vbs, 操作ADSI也有相應(yīng)的vbs腳本或者可以自己寫一個(gè),但這樣以為著你要不停在各種語(yǔ)言中間切換,再加上vbscript和bat的調(diào)試并不容易(相對(duì)于.NET集成Visual Studio而言),這無(wú)形中增加了維護(hù)的成本和出錯(cuò)的可能。另外,bat本身沒(méi)有任何倒退機(jī)制,我們必須花大力氣構(gòu)建錯(cuò)誤處理機(jī)制,接著就是出錯(cuò)了如何退回到原來(lái)的狀態(tài),這些是非常費(fèi)時(shí)間的。另外有個(gè)很大的問(wèn)題就是bat只適合單機(jī)執(zhí)行,如何及時(shí)的獲取執(zhí)行的結(jié)果(比如編譯是否成功、編譯后的版本號(hào)),目前比較通行的做法是通過(guò)腳本發(fā)郵件出來(lái),當(dāng)然這確實(shí)是可行的,但要完全搭建出來(lái)確實(shí)要費(fèi)不少人力物力,這也是為什么現(xiàn)在很多公司設(shè)立了release engineer/manager職位。

如今越來(lái)越多的公司開(kāi)始上敏捷開(kāi)發(fā),其中非常重要的一個(gè)環(huán)節(jié)就是持續(xù)集成,但事實(shí)上很多公司依然使用傳統(tǒng)的編譯模式,讓release engineer專門負(fù)責(zé)編譯的執(zhí)行,雖然每天會(huì)有daily build,但如果是按需編譯,都需要專人來(lái)完成,而不是由dev自己觸發(fā)編譯動(dòng)作。傳統(tǒng)的編譯由于采用了bat,我們不得不登上某臺(tái)dev, qa, stage server去執(zhí)行編譯和部署腳本,這樣在有些時(shí)候會(huì)帶來(lái)一些問(wèn)題,比如允許登錄該機(jī)器的人數(shù)不夠,登不進(jìn)去(通常IT只給2-3個(gè)人的上限,因?yàn)樘摂M機(jī)處理能力有限);誰(shuí)執(zhí)行了上次編譯,帶來(lái)了哪些問(wèn)題,沒(méi)有任何log可查等一系列問(wèn)題。

接下來(lái)我們要請(qǐng)出今天的主角:CuriseControl.NET和NAnt。

CuriseControl.NET,簡(jiǎn)稱CC.NET,由ThoughtWorks公司出品,免費(fèi)開(kāi)源軟件,主要用于分布式版本發(fā)布,這款軟件的最大特點(diǎn)是部署方便,可以輕易搭建輕量級(jí)Daily Build Server,是中小企業(yè)做Build的首選,并且支持各種不同的第三方版本控制和build軟件,如svn, vss, nant, msbuild等。同時(shí)CC.NET提供了CCTray客戶端,可以在遠(yuǎn)程開(kāi)發(fā)機(jī)器上觸發(fā)Build,也可以實(shí)時(shí)查看Build的狀態(tài),是成功還是失敗,這樣就解決了Build Server上的權(quán)限分配問(wèn)題,我們不需要給所有的開(kāi)發(fā)Build Server的登錄權(quán)限,只需要給CC.NET的訪問(wèn)權(quán)限就可以了,由于它提供了Windows Service的運(yùn)行方式,部署就更加方便了(在調(diào)試時(shí)可以使用控制臺(tái)方式)。另外,當(dāng)然CC.NET還有很多細(xì)致的功能來(lái)協(xié)助你完成Build,比如你可以在Build成功或失敗時(shí)發(fā)郵件,可以把build直接部署到codeplex這樣的開(kāi)源技術(shù)社區(qū)等??偟膩?lái)說(shuō),CC.NET不僅提供了整套的Build部署方案,更多的是Build的管理。

CC.NET不僅提供了服務(wù)器端,也提供了客戶端,客戶端分為web和桌面兩種,web版就是CC.NET自帶的web dashboard,桌面版則是之前提到過(guò)的CCTray,從它的名字不難看出,它就是一個(gè)任務(wù)欄托盤程序,但有任何的編譯會(huì)及時(shí)通知所有人編譯的進(jìn)展情況,目前最新的版本號(hào)等,對(duì)于希望部署持續(xù)集成的團(tuán)隊(duì)來(lái)說(shuō),絕對(duì)是首選,更何況它是免費(fèi)的。CC.NET還提供了日志機(jī)制,能夠方便的記錄每次編譯的細(xì)節(jié),并可作為郵件附件發(fā)出來(lái),而你要做的不是編寫大段大段的腳本,只需要配置一個(gè)xml文件就可以了(ccnet.config),稍后我們來(lái)學(xué)習(xí)如何配置這個(gè)文件。

實(shí)戰(zhàn) CruiseControl.NET+NAnt(一)- 簡(jiǎn)介

以上就是CC.NET的web界面,看起來(lái)比較清爽,其中列出了所有編譯項(xiàng)目,當(dāng)然現(xiàn)在我只做了NPOI一個(gè)編譯項(xiàng)目,如果團(tuán)隊(duì)中有多個(gè)項(xiàng)目,只需要多建幾個(gè)Project就行了。web dashboard默認(rèn)部署在IIS默認(rèn)網(wǎng)站的ccnet目錄下面,在CC.NET安裝的時(shí)候會(huì)自動(dòng)創(chuàng)建,當(dāng)然前提是IIS已經(jīng)安裝并能正常工作。

實(shí)戰(zhàn) CruiseControl.NET+NAnt(一)- 簡(jiǎn)介

上面這個(gè)就是CCTray的界面,這兩個(gè)界面的區(qū)別在于,web dashboard只會(huì)列出當(dāng)前服務(wù)器的任務(wù),但CCTray通過(guò)配置是可以列出多個(gè)CC.NET服務(wù)器的任務(wù)的,你可以在File->Settings->Build Projects中選擇需要監(jiān)控的編譯/部署任務(wù)。另外CCTray還有些比較花哨的功能,比如更換不同狀態(tài)的圖標(biāo)(successful, failed, broken)、用語(yǔ)音觸發(fā)任務(wù)、根據(jù)不同狀態(tài)執(zhí)行命令、輸出x10硬件信號(hào)(可接外部設(shè)備,如紅綠燈)、根據(jù)狀態(tài)播放音頻等。

在使用CCNet時(shí)最讓人頭疼的莫過(guò)于配置ccnet.config文件,它位于server目錄(ccnet子目錄之一)下,所有的關(guān)于build項(xiàng)目的配置信息都是從這里面讀出來(lái)的,由于是xml文件,所以首先要保證不能寫錯(cuò)標(biāo)簽,其次是不能寫當(dāng)前版本不支持的東西。CCNet發(fā)展到現(xiàn)在已經(jīng)有了1.1, 1.2, 1.3, 1.4, 1.5,每個(gè)版本的配置文件都會(huì)有所不同,支持的東西也不同,出于這一點(diǎn)有人寫了個(gè)輔助的工具叫做CCNetConfig,這是一個(gè)簡(jiǎn)單的Winform程序,但是它非常有用,因?yàn)樗鉀Q了這個(gè)最棘手的問(wèn)題——寫ccnet.config。下面就是CCNetConfig的界面,讓繁瑣的xml配置工作轉(zhuǎn)變成了窗口操作,非常方便,說(shuō)實(shí)話,如果沒(méi)有這東西讓我直接寫ccnet.config,這簡(jiǎn)直就是噩夢(mèng)。

實(shí)戰(zhàn) CruiseControl.NET+NAnt(一)- 簡(jiǎn)介

以上各軟件的下載地址如下:

CC.Net下載地址:http://sourceforge.net/projects/ccnet/ 

CCTray下載地址:http://ccnetlive.thoughtworks.com/ccnet/CCTrayDownload.aspx

CCNetConfig下載地址:http://ccnetconfig.codeplex.com/

 

接著說(shuō)NAnt,相對(duì)于CC.NET,NAnt則更注重于Build的運(yùn)行,而非Build的管理。不得不提的是,NAnt是一個(gè)半移植半借鑒項(xiàng)目,來(lái)源于Java的Ant工具,但是NAnt的很多插件是為微軟編程平臺(tái)特地設(shè)計(jì)的,比如regasm,所以不能說(shuō)它是一個(gè)完全移植的項(xiàng)目。NAnt雖然只提供了nant.exe一個(gè)可執(zhí)行文件,但是它內(nèi)部有很多插件,如copy, exec, cvs, zip, tar, unzip, mail, regasm等,這些都是編譯時(shí)常用的,另外它的腳本引擎系統(tǒng)可以基于xml寫執(zhí)行和編譯腳本,功能絕對(duì)不亞于我們平時(shí)常用的bat或powershell,還有大量的分支邏輯語(yǔ)句,如if, ifnot, foreach, call等,這些絕對(duì)是CC.NET目前望塵莫及的。由于使用日漸頻繁,開(kāi)源社區(qū)又為Nant提供了一個(gè)重要的增加組件——NAnt.Contrib,這個(gè)東西說(shuō)白了其實(shí)就是一些自定義的NAnt Task的集合,但確實(shí)提供了不少有用的東西,比如支持vb6, msbuild, adsi, depends, ini, sql, svn, vss, registry等任務(wù),在實(shí)際應(yīng)用中這些任務(wù)的執(zhí)行也是不可或缺的,所以在接下來(lái)的文章中我會(huì)連帶介紹Nant.Contrib的使用。

NAnt下載地址:http://nant.sourceforge.net/

NAnt-contrib下載地址:http://nantcontrib.sourceforge.net/

下面是一個(gè)最簡(jiǎn)單Hello World NAnt腳本,我把它取名為helloworld.build。

<?xml version="1.0"?>
<project name="NPOI">
    <echo message="Hello World!" />
</project>

上面這段代碼的意思是顯示Hello world!,項(xiàng)目名稱叫NPOI。運(yùn)行結(jié)果如下:

C:\Documents and Settings\Administrator>nant -buildfile:c:\scm\buildfiles\hellow
orld.build
NAnt 0.90 (Build 0.90.3780.0; release; 2010-5-8)
Copyright (C) 2001-2010 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///c:/scm/buildfiles/helloworld.build
Target framework: Microsoft .NET Framework 2.0

     [echo] Hello World!

BUILD SUCCEEDED

Total time: 0 seconds.

Nant指定build文件時(shí)必須使用-buildfile標(biāo)簽,你會(huì)看到最后有一句BUILD SUCCESSED,這表示整個(gè)build過(guò)程中沒(méi)有任何錯(cuò)誤,一旦有錯(cuò)誤就會(huì)出現(xiàn)BUILD FAILED,整個(gè)build會(huì)停止,不會(huì)繼續(xù)執(zhí)行下去。

當(dāng)然這是最最簡(jiǎn)單的build文件,復(fù)雜的build邏輯可能需要上千行的代碼,我們會(huì)在接下來(lái)的文章中慢慢講解。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI