【问题标题】:How to setup building steps for CruiseControl.net from repository of the building project?如何从构建项目的存储库中为 CruiseControl.net 设置构建步骤?
【发布时间】:2013-10-21 22:38:57
【问题描述】:

我想将ccnet.config 文件(或此项目的其他 cc.net 配置文件)存储在我的项目的存储库 (git) 中,并在我从仪表板强制构建时让 CC.NET 使用它。我该怎么做?

谢谢!

【问题讨论】:

  • 您正在构建什么样的项目?点网?
  • 对,asp.net应用,就是orchard cms。
  • 在下面查看我的答案。您希望您的逻辑在 .proj (msbuild) 文件中。 ccnet.config 应该基本上是静态的。

标签: cruisecontrol.net ccnet-config


【解决方案1】:

您的“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>

【讨论】:

  • 感谢您的建议。听起来不错。需要检查一下。这样我就需要让 msbuild 工作并知道如何去做。因此有点复杂。但如果我知道这将是相当不错的部署策略。
【解决方案2】:

看一下场景 http://www.cruisecontrolnet.org/projects/ccnet/wiki/Build_Server_Scenarios

  1. 步骤 1 设置源代码管理
  2. 第 2 步在签入时构建
  3. 第三步添加单元测试
  4. 第 4 步添加覆盖范围
  5. 第五步添加源码分析

在每个步骤中都可以预见到构建脚本,您可以在其中建立自己的基础。

【讨论】:

    猜你喜欢
    • 2014-09-13
    • 1970-01-01
    • 2011-09-07
    • 2017-01-20
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多