如何使用CruiseControl.NET设置标签前缀应用程序版本

时间:2016-01-21 07:56:00

标签: cruisecontrol.net thoughtworks-cruise

我们正在使用Cruise Control v1.8.5.我们有下一个场景:

  • 来自git repository的结帐源代码
  • 运行一些脚本来构建项目(例如npm install&& cordova clean,cordova build,也缩小一些css文件,编译打字稿......)

现在我们想在成功构建时添加标签。因此我发现cruisecontrol有贴标机选项,所以我补充道:

<cb:define name="Mylabeller">
    <labeller type="defaultlabeller">
        <initialBuildLabel>1</initialBuildLabel>
        <labelFormat>0</labelFormat>
        <incrementOnFailure>true</incrementOnFailure>
        <labelPrefixFile>X:\BuildFiles\myProject\version.txt</labelPrefixFile>
        <labelPrefixFileSearchPattern>\d\.\d\.\d\.</labelPrefixFileSearchPattern>
    </labeller>
</cb:define>

但问题是,这是在从存储库中检索源代码(git)之前完成的。我从我的项目中读取版本,然后使用正则表达式的CruiseControl读取版本并输出类似于:1.0.3.buildNumber。

如何从存储库中检索源代码后设置/更新标签前缀版本。在结账前,它会读取旧的。我也读过关于动态变量的信息,它们可以以某种方式设置还是什么?

追加项目的xml:

<cb:scope ProjDirName="myProject">
        <project name="myProject" queue="Daily" queuePriority="30">
            <workingDirectory>D:\BuildFiles\$(ProjDirName)\Working</workingDirectory>
            <artifactDirectory>D:\BuildFiles\$(ProjDirName)\Artifacts</artifactDirectory>
           <cb:sourcecontrol module="Modul1"  TagOnSuccess="false" Branch="$(BranchDevelop)" />
            <tasks>         
              <cb:NpmInstall />
              <cb:Build />
            </tasks>
            <cb:Mylabeller />
            <cb:commonall />                
        </project>
    </cb:scope>

1 个答案:

答案 0 :(得分:0)

认为CruiseControl在项目构建开始时和项目的xml被读取之前设置下一个构建版本(checkout,tasks,...)。

CruiseControl项目构建日志:

<parameters>
<parameter name="$CCNetArtifactDirectory" value="D:\BuildFiles\MyProject\Artifacts" />
<parameter name="$CCNetBuildCondition" value="ForceBuild" />
<parameter name="$CCNetBuildDate" value="2016-01-25" />
<parameter name="$CCNetBuildId" value="9d8234720e7342a3aa636aacc120eb13" />
<parameter name="$CCNetBuildTime" value="13:49:42" />
<parameter name="$CCNetFailureTasks" value="System.Collections.ArrayList" />
<parameter name="$CCNetFailureUsers" value="System.Collections.ArrayList" />
<parameter name="$CCNetIntegrationStatus" value="Unknown" />
<parameter name="$CCNetLabel" value="1.0.88" />
<parameter name="$CCNetLastIntegrationStatus" value="Failure" />
<parameter name="$CCNetListenerFile" value="D:\BuildFiles\MyProject\Artifacts\MyProject_ListenFile.xml" />
<parameter name="$CCNetModifyingUsers" value="System.Collections.ArrayList" />
<parameter name="$CCNetNumericLabel" value="88" />
<parameter name="$CCNetProject" value="MyProject" />
<parameter name="$CCNetProjectUrl" value="http://BUILDer/ccnet" />
<parameter name="$CCNetRequestSource" value="machineName1" />
<parameter name="$CCNetUser" value="user1" />
<parameter name="$CCNetWorkingDirectory" value="D:\BuildFiles\MyProject\Working" />
<parameter name="$LastChangeNumber" value="96ece86d55f83c8eb129cbfeb01724a3d37bb18a" />

另外,我认为持续集成决定了应用程序版本,例如: major.minor.build而不是每个提交指示版本。

解决方案:

    <cb:scope ProjDirName="myProject">
        <project name="myProject" queue="Daily" queuePriority="30">
            <workingDirectory>D:\BuildFiles\$(ProjDirName)\Working</workingDirectory>
            <artifactDirectory>D:\BuildFiles\$(ProjDirName)\Artifacts</artifactDirectory>
            <cb:sourceControlMyProject Branch="develop"/>
            <cb:dailytrigger />
            <tasks>
              <cb:NpmInstall />
              <cb:BuildRelease />
              <cb:PublishAfter />
            </tasks>
            <publishers>
                <cb:commonpublish/>
            </publishers>

            <cb:MyLabeller LabelPrefix="1.0." /> <!-- version is fixed -->
            <cb:commonall />    

        </project>
    </cb:scope>

并且贴标:

<cb:define name="MyLabeller">
    <labeller type="defaultlabeller">
    <initialBuildLabel>1</initialBuildLabel>
    <prefix>$(LabelPrefix)</prefix>
    <incrementOnFailure>true</incrementOnFailure>
    <labelFormat>0</labelFormat>
  </labeller>
</cb:define>

目前这个设置还可以。如果我们要开发版本1.1,必须更改上部设置。要点是让版本化工作,例如1.0。 + cruiseControl_next_build_number。

相关问题