当前位置:  开发笔记 > 编程语言 > 正文

如何将建筑物编号从Nant传递回Cruise Control

如何解决《如何将建筑物编号从Nant传递回CruiseControl》经验,为你挑选了1个好方法。

我有一个Nant构建脚本,CruiseControl使用它来按需构建解决方案.

但是,我们最近才获得CruiseControl,因此我们的官方版本号与CruiseControl中列出的不同.

我知道CruiseControl会在构建脚本中注入一些属性,以便我可以访问脚本中的CC内部版本号(CCNetLabel)但是如何将值传递回CC以用作UI屏幕上的内部版本号?

例如,CC表示内部版本号为2

nAnt脚本在每次构建时增加buildnumber.xml值,官方内部版本号在123上.

我希望CC UI显示最后一个成功的内部版本号:123,而不是2,所以我该如何传递该值?



1> Scott Saad..:

为此需要自定义构建标签.Perforce是我们的源代码控制提供商,我们从中获取版本号.代码如下:

/// 
/// Gets the latest change list number from perforce, for ccnet to consume as a build label.
/// 
[ReflectorType( "p4labeller" )]
public class PerforceLabeller : ILabeller
{
    //  perforce executable (optional)
    [ReflectorProperty("executable", Required = false)]
    public string P4Executable = "p4.exe";

    // perforce port (i.e. myserver:1234)
    [ReflectorProperty("port", Required = false)]
    public string P4Port = String.Empty;

    // perforce user
    [ReflectorProperty("user", Required = false)]
    public string P4User = String.Empty;

    //  perforce client
    [ReflectorProperty("client", Required = false)]
    public string P4Client = String.Empty;

    // perforce view (i.e. //Dev/Code1/...)
    [ReflectorProperty("view", Required = false)]
    public string P4View = String.Empty;

    // Returns latest change list
    public string Generate( IIntegrationResult previousLabel )
    {
        return GetLatestChangelist(); 
    }

    // Stores latest change list into a label
    public void Run( IIntegrationResult result )
    {
        result.Label = GetLatestChangelist();
    }

    // Gets the latest change list
    public string GetLatestChangelist()
    {
        // Build the arguments to pass to p4 to get the latest changelist
        string theArgs = "-p " + P4Port + " -u " + P4User + " -c " + P4Client + " changes -m 1 -s submitted " + P4View;
        Log.Info( string.Format( "Getting latest change from Perforce using --> " + theArgs ) );

        // Execute p4
        ProcessResult theProcessResult = new ProcessExecutor().Execute( new ProcessInfo( P4Executable, theArgs ) );

        // Extract the changelist # from the result
        Regex theRegex = new Regex( @"\s[0-9]+\s", RegexOptions.IgnoreCase );
        Match theMatch = theRegex.Match( theProcessResult.StandardOutput );
        return theMatch.Value.Trim();
    }
}

方法GetLatestChangelist是您可能插入自己的逻辑以与版本控制系统通信的地方.在Perforce中,最后一个变更列表的想法是独一无二的.我们的构建号,最终版本号基于此.

一旦你构建了这个(进入程序集dll),你就必须将它挂钩到ccnet.您只需将程序集放入服务器目录(ccnet.exe旁边)即可.

接下来,修改ccnet项目文件以使用此贴标机.我们使用默认的贴标机块执行此操作.类似于以下内容:



    myclient
    p4.exe
    myserver:1234
    myuser
    //Code1/...



如果你只是想让内部版本号出现在ccnet中那么你已经完成了,并且不需要做任何其他事情.但是,如果您希望使用已提供的CCNetLabel属性,则可以访问NAnt脚本中的标签.

希望这会有所帮助.如果您对评论有任何疑问,请通知我.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有