持续集成:CruiseControl.NET + VisualSVN.Server
剛換了工作,有需要搭建一套持續集成的平臺,做一下總結。
首先是我用到的工具:
上面缺少了Microsoft Fxcop,可以用來做代碼校驗,不過實際情況暫時還沒有用到。主要的需求目前是,使用已發布的穩定版本代碼作為新發布版本代碼的基礎,避免有未完成的代碼存在于發布版本中,同時自動化集成發布后,上傳該新發布版本代碼到tags中。elevate一般情況下是不需要的,不過VisualSVN無法使用命令行登陸,可以使用它來提升執行權限,不過最終我使用了另外一個辦法,這個方法需要購買VisualSVN Server的License,后面會說。
安裝過程就不贅述了,相信有興趣看這個的都是做軟件的,下一步之類還有一些選項什么的沒什么可說的。安裝的時候部署的監控網站可能不成功,只要自己手動在IIS上布下就好。另外,先提一句CCTray是可以把配置好的集成方案服務添加運行的工具,添加好后本身也具有監控的功能,區別是它客戶端工具。
先說SVN服務器,VisualSVN Server是比較簡單的SVN服務端,所以功能比較簡單,比如就缺少命令行登陸的功能,不過另一方面就是安裝很簡單。有兩點需要說明一下,一是新建Repository時,勾選分為branches tags trunk三個目錄,分別用來放分支代碼,發布版代碼,主干版本代碼,其中tags下的代碼是只能新增不能修改的;另外一點是權限問題,我使用的是windows的賬戶做操作的,在這種情況下,有個選項要勾選上,不然執行svn提交代碼命令時,會報錯身份驗證不通過。
上圖紅框就是需要勾選的,不過勾選這個是需要License的。
接下來就是主題部分了,安裝完CC以后,到開始菜單里找到對應的菜單,會發現里面有個配置文件,對應的就是安裝好的目錄下的ccnet.config文件,另外還有個驗證工具,可以用來輔助配置,一目了然的東西就不細說了,下面說說配置。
<cruisecontrol xmlns:cb="urn:ccnet.config.builder"><!-- This is your CruiseControl.NET Server Configuration file. Add your projects below! -->這里配置服務的名字,一個project對應的就是一個集成方案,可以獨立執行<project name="ProjectTest"description="demoproject showing a small config" queue="Q1">
工作使用的目錄<workingDirectory>D:\Store</workingDirectory>
這里是正在集成工程中的臨時配置文件保存的地方,一次執行結束后,該配置文件會被放到配置的日志文件夾中
<artifactDirectory>D:\Store\Artifacts</artifactDirectory><!-- specify a state folder to prevent CCNet from saving it in Program Files\CruiseControl.NET\server programs may not standard write their data in it on windows Vista and up)--><state type="state" directory="D:\Store\State" /><!-- specify a artifactDirectory to prevent CCNet from saving it in Program Files\CruiseControl.NET\server programs may not standard write their data in it on windows Vista and up)--> 這是監控頁面
<webURL>http://localhost:90/ViewLatestBuildReport.aspx</webURL><modificationDelaySeconds>10</modificationDelaySeconds><triggers><!-- check the source control every X time for changes, and run the tasks if changes are found --><!--<intervalTriggername="continuous"seconds="30"buildCondition="IfModificationExists"initialSeconds="5"/>--><intervalTrigger name="continuous" seconds="6000" /></triggers>
這里是配置獲取源碼的位置,使用svn<sourcecontrol type="svn"><executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable><trunkUrl>https://aaa/svn/Test/trunk</trunkUrl><username>svn</username>--登陸svn使用的用戶名密碼,這個是我在測試服務器上創建的測試賬戶<password>svn</password><workingDirectory>D:\Store\Code</workingDirectory>--獲取下來源碼的存放位置<autoGetSource>true</autoGetSource></sourcecontrol><tasks><!-- if you want the task to fail, ping an unknown server -->
這個ping的作用在這里僅僅是測試的時候,改成錯的可以讓它后面的配置都不執行<exec><executable>ping.exe</executable><buildArgs>localhost</buildArgs><buildTimeoutSeconds>15</buildTimeoutSeconds><description>Pinging a server</description></exec>這里是編譯解決方案的配置,也可以每個項目分別編譯,projectFile配置成項目的csproj文件就可以 <msbuild><executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable><workingDirectory>D:\Store\Code</workingDirectory><projectFile>D:\Store\Code\*******.sln</projectFile><buildArgs>/noconsolelogger /p:Configuration=Release;OutDir=D:\Store\Run\ /v:diag</buildArgs><logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger><targets>Build</targets><timeout>900</timeout></msbuild>這是用來配置發布位置的,sourceDir是生成的位置,publishDir是發布的位置可以配置成遠程的共享目錄
<buildpublisher><sourceDir>D:\Store\Run</sourceDir><publishDir>D:\Store\Release</publishDir><useLabelSubDirectory>false</useLabelSubDirectory></buildpublisher><!--刪除.svn文件--> 這個批處理文件時用來清除代碼中svn綁定的,因為這份代碼需要提交到Tags上,這個批處理代碼類似的網上到處都是我就不貼了
<exec executable="D:\Store\delSVN.bat" />
這段注釋掉的是單元測試的配置,不過由于原來的代碼都沒做單元測試,所以就先注釋掉了<!--刪除單元測試結果文件,否則不會創建新的結果文件<exec executable="D:\Store\delTestResult.bat" />--><!--buildArgs:參數,/testcontainer:單元測試項目程序集(可以包含多個) /resultsfile:測試結果文件<exec><executable>C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\mstest.exe</executable><baseDirectory>D:\Store\UNTest</baseDirectory><buildArgs>/testcontainer:TestProject\bin\Debug\TestProject.dll /resultsfile:TestResults\mstest-results.xml</buildArgs><buildTimeoutSeconds>300</buildTimeoutSeconds></exec>-->提交代碼的批處理:
cd /d %~dp0
"C:\Program Files\VisualSVN Server\bin\svn.exe" import -m "New Tags" D:\Store\Code https://aaa/svn/Test/tags/Tags_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
<xmllogger logDir="D:\Store\Log"/> 日志可以配置成發送郵件,不過這里不需要</publishers></project>第二個集成服務
<project name="ProjectTestWithOutGetSource"description="demoproject showing a small config" queue="Q1"><workingDirectory>D:\Store</workingDirectory><artifactDirectory>D:\Store\Artifacts</artifactDirectory><state type="state" directory="D:\Store\State" /><webURL>http://localhost:90/ViewLatestBuildReport.aspx</webURL><modificationDelaySeconds>10</modificationDelaySeconds><triggers><intervalTrigger name="continuous" seconds="6000" /></triggers><sourcecontrol type="svn"><executable>C:\Program Files\VisualSVN Server\bin\svn.exe</executable><trunkUrl>https://aaa/svn/Test/trunk</trunkUrl><username>svn</username><password>svn</password><workingDirectory>D:\Store\Code</workingDirectory><autoGetSource>true</autoGetSource></sourcecontrol><tasks><!-- if you want the task to fail, ping an unknown server --><exec><executable>ping.exe</executable><buildArgs>localhost</buildArgs><buildTimeoutSeconds>15</buildTimeoutSeconds><description>Pinging a server</description></exec><msbuild><executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable><workingDirectory>D:\Store\Code</workingDirectory><projectFile>D:\Store\Code\*******.sln</projectFile><buildArgs>/noconsolelogger /p:Configuration=Release;OutDir=D:\Store\Run\ /v:diag</buildArgs><logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger><targets>Build</targets><timeout>900</timeout></msbuild><buildpublisher><sourceDir>D:\Store\Run</sourceDir><publishDir>D:\Store\Release</publishDir><useLabelSubDirectory>false</useLabelSubDirectory></buildpublisher><!--刪除.svn文件--><exec executable="D:\Store\delSVN.bat" /><!--提交Tags代碼--><exec executable="D:\Store\svnCTags.bat" /></tasks><publishers><xmllogger logDir="D:\Store\Log"/></publishers></project></cruisecontrol>
最后是我集成使用的測試目錄,可以不用自己創建,集成過程中會自己創建的
?
轉載于:https://www.cnblogs.com/saaav/p/4003254.html
總結
以上是生活随笔為你收集整理的持续集成:CruiseControl.NET + VisualSVN.Server的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Cache技术―OSCache
- 下一篇: 关于Sql语句的心得体会
