2009-10-08 101 views
3

我剛剛開始使用CruiseControl.NET和nAnt,並且對整個過程的工作方式沒有很好的理解。我們目前在Visual Source'Safe'中擁有大部分解決方案,並且使用AssemblyInfo文件自動爲每個版本標記構建服務器。使用CruiseControl將頭SVN文件夾複製到發佈文件夾

我們正在將我們的VSS項目遷移到SVN中,並相應地修改了項目構建文件以檢出並更新SVN存儲庫。我們想要實現的目標是在源代碼控制中擁有一個源代碼副本,它與正在部署的項目版本完全匹配。

我們的SVN設置這樣的:

svn://solution/ 
    TRUNK/ 
    RELEASES/ 
     1.0.0/ 
     1.2.0/ 
    BRANCHES/ 

所以,當我們強迫建立我們的解決方案,設置爲1.3.0的版本集信息,我們希望構建服務器複製TRUNK目錄中,將釋放/1.3.0/目錄。

SVN命令非常簡單。 svn copy src /目錄dst /目錄。但是我會在哪裏放這個命令,以及如何獲取目的地的版本號?

在構建服務器,這是一個.xml文件的一個例子:

<sourcecontrol type="svn"> 
    <trunkUrl>svn://project/trunk</trunkUrl> 
      <workingDirectory>D:\Builds\project\Src</workingDirectory> 
      <executable>C:\Subversion\bin\svn.exe</executable> 
    <username>sf_service_dev</username> 
    <password>SFx4vi-r</password> 
      <tagOnSuccess>true</tagOnSuccess> 
    <cleanCopy>true</cleanCopy> 
</sourcecontrol> 

在我們這個項目.build文件(和很多課程更多):

<target name="Deploy_Release"> 
    <property name="fileandpathformyfile" value="${CCNetWorkingDirectory}\Bin\project.exe"/> 
    <echo message="fileandpathformyfile is ${fileandpathformyfile}."/> 
    <property name="ReleaseNumber" value="${fileversioninfo::get-file-version(fileversioninfo::get-version-info(fileandpathformyfile))}"/> 
    <echo message="ReleaseNumber has been detected to be ${ReleaseNumber}."/> 

    <!--Use version as needed--> 

    <!--Create the release direcory--> 
    <mkdir dir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"/> 
    <!--Copy stuff to the release directory--> 
    <copy todir="${CCNetWorkingDirectory}\..\Releases\${ReleaseNumber}"> 
    <fileset basedir="${CCNetWorkingDirectory}\bin"> 
     <include name="*.dll" /> 
     <include name="*.exe" /> 
     <include name="*.config" /> 
     <include name="*.xml" /> 
     <include name="*.stp" /> 
    </fileset> 
    </copy> 
</target> 

現在,如果我想運行一個SVN命令將$ {trunkURL}複製到$ {trunkURL} /../ releases/$ {ReleaseNumber},那麼我該如何執行此操作以及將以何種文件執行?我目前的理解是,我們需要從.build文件中獲取ReleaseNumber,然後從.xml文件中運行。或者,我們需要將.XML中的trunkURL傳遞給.build,並從.build文件運行svn命令。

請幫忙!

+0

你有沒有使用nAnt一段時間,或者你是否同時開始使用CC.Net和nAnt。只是好奇你爲什麼不使用msbuild。 – Ryu 2009-10-08 02:27:51

+0

我已經開始同時使用兩者。對於我們較早的項目,我們進行本地編譯,測試生產SOA,並從那裏進行部署。 – 2009-10-11 20:43:50

回答

5

一個選項是標記(又名svn副本)每個成功的構建。實際上內置了這個功能。

我看你有沒有<tagOnSuccess>啓用 真正

你還應該設置<tagBaseUrl>svn://project/trunk/Releases</tagBaseUrl><tagBaseUrl>svn://project/trunk/Tags</tagBaseUrl>

你可能有,這是每一個成功的構建,無論是被迫還是連續打標籤的問題。我猜你不想複製到發佈每個版本。

你可以做的是

  1. 執行與nAnt exec task
  2. 寫一個批處理文件if語句檢查%CCNetRequestSource%環境變量ForceBuild
  3. 執行命令行SVN操作(CCNetWorkingDirectory將作爲環境變量,你可能必須通過釋放#作爲參數)

還可以結帳na ntcontrib,似乎有svn task

編輯

你可能想看看CC.Net通過labeller管理你的版本號,並通過CCNetLabel環境變量將它傳遞給楠。從我讀到的你最想要的File Labeller因爲其他人自動爲你生成一個標籤,我個人使用迭代貼標機。

使用CC.Net labeller進行版本控制的優勢是構建電子郵件將顯示正確的發佈版本,我相信<tagOnSuccess>將標籤用於目錄名稱。

+0

大家知道,我們爲構建服務器上的連續版本和發行版本分別配置了CC.NET配置文件。感謝您的幫助,這比我想象的要容易得多!乾杯 – 2009-10-08 03:06:00

+0

你可能想看看管理你的版本#的CC.Net,並將它傳遞給nAnt http://confluence.public.thoughtworks.org/display/CCNET/Labeller+Blocks你很可能想要文件標籤器 – Ryu 2009-10-08 03:29:00

+0

Can文件標籤程序從AssemblyInfo文件中檢索版本號?還是它只包含一個版本號?我們可以很容易地在.build腳本中通過ant生成一個version.file文件,但是如果工作已經完成,可以避免這種情況。 – 2009-10-08 23:44:00

相關問題