2013-10-16 51 views
1

我想在我的項目的倉庫(git)中存儲ccnet.config文件(或該項目的其他cc.net配置文件),並使CC.NET在從儀表板強制構建時使用它。我該怎麼做?如何從建築項目的存儲庫中爲CruiseControl.net設置構建步驟?

謝謝!

+0

你在建什麼樣的項目? DotNet? – granadaCoder

+0

是的,asp.net應用程序,它是果園cms。 – Artyom

+0

請參閱下面的答案。你想在.proj(msbuild)文件中使用你的邏輯。 ccnet.config應該基本上是靜態的。 – granadaCoder

回答

3

你的「ccnet.config」應該保持相當的靜態。

如果你需要不同的「邏輯」爲您的解決方案/項目的建設,那麼我建議:

1. Write your ccnet.config code to pull source code from repository. (aka, Task #1) 
2. In your repository, include a MasterBuild.proj (msbuild definition). 
3. Have cc.net call msbuild.exe on MasterBuild.proj (aka, Task #2). 
4. Have the majority of your logic inside the MasterBuild.proj file. That is what you check in/out of source control. 

如果您認爲CC.NET「超級看中msbuild.exe執行」的,你世界將更有意義恕我直言。

這是一個非常基本的msbuild(定義)文件。 你可以稱它爲

MySolutionMasterBuild.proj(或類似)

將這個在相同的目錄中.sln文件(源代碼控制)。

使用CC.NET下載代碼。 然後連接msbuild.exe來調用下面的文件。

然後在.proj文件中有任何額外的邏輯。

你可以做一些其他的CC.NET的東西,比如發佈郵件和合並任何結果xml,但是大多數邏輯(反正我的偏好)..........會在下面的文件。

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="AllTargetsWrapped"> 
    <PropertyGroup> 
     <!-- Always declare some kind of "base directory" and then work off of that in the majority of cases --> 
     <WorkingCheckout>.</WorkingCheckout> 
     <ArtifactDestinationFolder>$(WorkingCheckout)\ZZZArtifacts</ArtifactDestinationFolder> 
    </PropertyGroup> 

    <Target Name="AllTargetsWrapped"> 

     <CallTarget Targets="CleanArtifactFolder" /> 
     <CallTarget Targets="BuildItUp" /> 
     <CallTarget Targets="CopyFilesToArtifactFolder" /> 

    </Target> 


    <Target Name="BuildItUp" > 
     <MSBuild Projects="$(WorkingCheckout)\MySolution.sln" Targets="Build" Properties="Configuration=$(Configuration)"> 
      <Output TaskParameter="TargetOutputs" ItemName="TargetOutputsItemName"/> 
     </MSBuild> 
     <Message Text="BuildItUp completed" /> 
    </Target> 



    <Target Name="CleanArtifactFolder"> 


     <RemoveDir Directories="$(ArtifactDestinationFolder)" Condition="Exists($(ArtifactDestinationFolder))"/> 

     <MakeDir Directories="$(ArtifactDestinationFolder)" Condition="!Exists($(ArtifactDestinationFolder))"/> 

     <Message Text="Cleaning done" /> 


    </Target> 

    <Target Name="CopyFilesToArtifactFolder"> 

     <ItemGroup> 
      <MyExcludeFiles Include="$(WorkingCheckout)\**\*.doesnotexist" /> 
     </ItemGroup> 

     <ItemGroup> 
      <MyIncludeFiles Include="$(WorkingCheckout)\bin\$(Configuration)\**\*.*" Exclude="@(MyExcludeFiles)"/> 
     </ItemGroup>   


     <Copy 
       SourceFiles="@(MyIncludeFiles)" 
       DestinationFiles="@(MyIncludeFiles->'$(ArtifactDestinationFolder)\%(Filename)%(Extension)')" 
     /> 

    </Target> 

</Project> 
+0

感謝您的諮詢。聽起來不錯。需要檢查它。那樣我就需要獲得msbuild的工作,並知道如何去做。因此有點複雜。但是如果我知道這將是相當不錯的部署策略。 – Artyom

+0

附加我的答案。 – granadaCoder

相關問題