如何自定义CruiseControl.NET(CCNet)仪表板?

时间:2010-09-25 08:47:04

标签: cruisecontrol.net customization dashboard

我是CCNet的新手......

我想自定义CCNet Web仪表板,在“强制构建”按钮旁边添加一个复选框,以指示特定构建是否发布。

请告诉我这些定制是否可行?如果是这样,请提供一些教程或文章链接以启动

1 个答案:

答案 0 :(得分:6)

我认为做你所做的事情会是一个巨大的痛苦,因为你必须隐藏一些CC.net项目(比方说,调试项目)并且如果选中复选框仍然构建它们。使用历史记录和日志访问项目页面会很尴尬。如果您考虑动态编辑ccnet项目配置,请不要忘记您必须重新启动服务才能使其保持最新状态。最后,您的修改可能适用于仪表板,但它会导致cctray问题。

我要做的是拥有两个不同的项目,一个在调试模式下构建,另一个在发布中。这将更容易和直接。例如,您可以拥有一个调试项目,其构建是从源控件存储库更新触发的,另一个是手动或每晚构建的版本。

修改
对于两个不同的项目,我要做的是使用公共代码(对于Release和Debug)使用两个动态参数(比如Conf和OutPath)。我还会编写第三个负责执行db脚本的项目,第三个项目将在Release 1的每次成功构建时触发。像这样进行将允许您单独执行调试/发布版本,单独执行脚本(在强制构建上)和每个版本构建,最后验证脚本(在每次提交时)。它看起来像这样:

<cb:define name="MyProject-Block">
    <project name="MyProject - $(Conf)" queue="General" queuePriority="100">
        <workingDirectory>D:\MyProject</workingDirectory>
        <triggers>
            <intervalTrigger seconds="300"/>
        </triggers>
        <cb:state-block/>
        <cb:svn-block svnpath="MyProject"/>
        <tasks>
            <msbuild>
                <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
                <workingDirectory>D:\MyProject</workingDirectory>
                <projectFile>MyProject.sln</projectFile>
                <buildArgs>/p:Configuration=$(Conf);OutputPath="$(OutPath)"</buildArgs>
                <targets>Clean;Build</targets>
                <timeout>600</timeout>
                <logger>F:\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
            </msbuild>
        </tasks>
        <publishers>
            <xmllogger/>
            <statistics />
            <modificationHistory onlyLogWhenChangesFound="true" />
            <cb:email-block/>
        </publishers>
    </project>
</cb:define>

<cb:MyProject-Block Conf="Debug" OuputPath="..\Compil\Debug" />
<cb:MyProject-Block Conf="Release" OuputPath="..\Compil\Release" />

<project name="MyProject. DbScript" queue="General" queuePriority="110">
    <workingDirectory>D:\MyProject\DB</workingDirectory>
    <triggers>
        <projectTrigger project=" MyProject - Release">
            <triggerStatus>Success</triggerStatus>
            <innerTrigger name="Eurosport.Business" type="intervalTrigger" seconds="60" buildCondition="ForceBuild" />
        </projectTrigger>
        <intervalTrigger seconds="300"/>
    </triggers>
    <cb:state-block/>
    <cb:svn-block svnpath="MyProject/DB"/>
    <tasks>
        <!-- Executing the script here -->
    </tasks>
    <publishers>
        <xmllogger/>
        <statistics />
        <modificationHistory onlyLogWhenChangesFound="true" />
        <cb:email-block/>
    </publishers>
</project>