2

我在 CCNet 1.4 版中工作,我很难以干净的方式获得我想要定义的参数。在我的示例中,我想要 6 个总项目(2 个分支中的 3 个解决方案)。我定义了一个通用项目,它可以基于 8 个变量的选择包含所有 6 种可能性。当它是一个主干项目时,其中 4 个变量应该是一回事。当它是一个分支项目时,4 个变量应该是另一回事。其他 4 个变量取决于我要构建的解决方案。

在下面的尝试中,我将 4 个主干变量放在一个定义块中,将 4 个发布变量放在另一个块中。我也有每个解决方案的定义块。

<cb:define name="ProductBuildProject">
  <project name="$(ProjectName)" queue="Common">
    <category>Main Builds</category>
    <sourcecontrol type="multi">
      <sourceControls>
        <cb:svn-sourcebuild-checkout BranchPath="$(BranchPath)" MainSourcePath="$(MainSourcePath)"  />
      </sourceControls>
    </sourcecontrol>
    <modificationDelaySeconds>10</modificationDelaySeconds>
    <labeller type="defaultlabeller">
      <prefix><cb:LabelPrefix/></prefix>
      <incrementOnFailure>true</incrementOnFailure>
    </labeller>
    <triggers>
      <intervalTrigger name="continuous" seconds="900" buildCondition="IfModificationExists"/>
    </triggers>
    <tasks>
      <nant>
        <executable>&nant-path;</executable>
        <baseDirectory><cb:LocalKeywordLabPath/>\<cb:MainSourcePath/></baseDirectory>
        <buildArgs>-v -D:deployServer=<cb:DeployServer/></buildArgs>
        <buildFile><cb:BuildFileName/></buildFile>
        <targetList>
          <target><cb:BuildTargetName/></target>
        </targetList>
        <buildTimeoutSeconds>600</buildTimeoutSeconds>
      </nant>
    </tasks>
    <publishers>
      <merge>
        <files>
          <file><cb:LocalKeywordLabPath/>\<cb:MainSourcePath/>\<cb:UnitTestOutputPath/></file>
        </files>
      </merge>
      &publishers-common-block;
    </publishers>
    <externalLinks/>
  </project>
</cb:define>

<cb:define name="TrunkBuildParameters">
  <cb:define name="LocalKeywordLabPath"><cb:keywordlab-trunk-local/></cb:define>
  <cb:define name="BranchPath"><cb:trunk-path/></cb:define>
  <cb:define name="LabelPrefix">1.1.0.</cb:define>
  <cb:define name="DeployServer">smwtlkwlab01n</cb:define>
</cb:define>

<cb:define name="ReleaseBranchBuildParameters">
  <cb:define name="LocalKeywordLabPath"><cb:keywordlab-release-local/></cb:define>
  <cb:define name="BranchPath"><cb:releaseBranch-path/></cb:define>
  <cb:define name="LabelPrefix">1.1.100.</cb:define>
  <cb:define name="DeployServer">smwdvkwlab03n</cb:define>
</cb:define>

<cb:define name="KeywordLabWebParameters">
  <cb:define name="MainSourcePath">Source\Presentation</cb:define>
  <cb:define name="BuildFileName">KeywordLab.Web.build</cb:define>
  <cb:define name="BuildTargetName">automated-with-webdeploy</cb:define>
  <cb:define name="UnitTestOutputPath">KeywordLab.Web.UnitTest\bin\Release\KeywordLab.Web.UnitTest.trx</cb:define>
</cb:define>

<cb:define name="KeywordLabWebMvcParameters">
  <cb:define name="MainSourcePath">Source\UI</cb:define>
  <cb:define name="BuildFileName">KeywordLab.Web.Mvc.build</cb:define>
  <cb:define name="BuildTargetName">automated-with-webdeploy</cb:define>
  <cb:define name="UnitTestOutputPath">KeywordLab.Web.Mvc.Tests\bin\Release\KeywordLab.Web.Mvc.Tests.trx</cb:define>
</cb:define>

<cb:define name="KeywordLabServiceParameters">
  <cb:define name="MainSourcePath">Source\Service</cb:define>
  <cb:define name="BuildFileName">KeywordLab.build</cb:define>
  <cb:define name="BuildTargetName">automated</cb:define>
  <cb:define name="UnitTestOutputPath">KeywordLab.UnitTest\bin\Release\KeywordLab.UnitTest.trx</cb:define>
</cb:define>

最后,我尝试通过引用主干或发布版本的定义块和解决方案的正确定义块来定义 6 个项目。

<!--KeywordLab Web-->
<cb:ProductBuildProject>
  <cb:define name="ProjectName">KeywordLab Web (1N)</cb:define>
  <cb:TrunkBuildParameters/>
  <cb:KeywordLabWebParameters/>
</cb:ProductBuildProject>

<!--KeywordLab Web Mvc-->
<cb:ProductBuildProject>
  <cb:define name="ProjectName">KeywordLab Web Mvc (1N)</cb:define>
  <cb:TrunkBuildParameters/>
  <cb:KeywordLabWebMvcParameters/>
</cb:ProductBuildProject>

<!--KeywordLab Service-->
<cb:ProductBuildProject>
  <cb:define name="ProjectName">KeywordLab Service (1N)</cb:define>
  <cb:TrunkBuildParameters/>
  <cb:KeywordLabServiceParameters/>
</cb:ProductBuildProject>

<!--KeywordLab Web-->
<cb:ProductBuildProject>
  <cb:define name="ProjectName">Release Branch (3N) - KeywordLab Web</cb:define>
  <cb:ReleaseBranchBuildParameters/>
  <cb:KeywordLabWebParameters/>
</cb:ProductBuildProject>

<!--KeywordLab Web Mvc-->
<cb:ProductBuildProject>
  <cb:define name="ProjectName">Release Branch (3N) - KeywordLab Web Mvc</cb:define>
  <cb:ReleaseBranchBuildParameters/>
  <cb:KeywordLabWebMvcParameters/>
</cb:ProductBuildProject>

<!--KeywordLab Service-->
<cb:ProductBuildProject>
  <cb:define name="ProjectName">Release Branch (3N) - KeywordLab Service</cb:define>
  <cb:ReleaseBranchBuildParameters/>
  <cb:KeywordLabServiceParameters/>
</cb:ProductBuildProject>

这不起作用,我希望有人能指出我做错了什么。当我尝试加载此配置时,我收到的错误是:

[CCNet Server:ERROR] INTERNAL ERROR: Reference to unknown symbol LabelPrefix

正如您在 TrunkBuildParameters 和 ReleaseBranchBuildParameters 中看到的那样,我在两者中都定义了 LabelPrefix,并且所有 6 个项目都引用了这些定义块中的一个或另一个。然后我尝试在项目的块中引用它。这显然不是定义项目使用的变量的有效方式。有人可以告诉我我做错了什么,或者可能是更好的方法吗?

4

1 回答 1

0

我建议使用 Cruisecontrol 提供的验证器来查看最终解析的配置文件是什么,以检查您是否遗漏了任何内容。

话虽如此,我通常做的是相反的事情。我定义了常用的配置块,然后只用几行写出项目配置。也许您会认为足够干净?

于 2013-05-02T09:38:46.210 回答