我有一个Nant构建脚本,CruiseControl使用它来按需构建解决方案.
但是,我们最近才获得CruiseControl,因此我们的官方版本号与CruiseControl中列出的不同.
我知道CruiseControl会在构建脚本中注入一些属性,以便我可以访问脚本中的CC内部版本号(CCNetLabel)但是如何将值传递回CC以用作UI屏幕上的内部版本号?
例如,CC表示内部版本号为2
nAnt脚本在每次构建时增加buildnumber.xml值,官方内部版本号在123上.
我希望CC UI显示最后一个成功的内部版本号:123,而不是2,所以我该如何传递该值?
为此需要自定义构建标签.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脚本中的标签.
希望这会有所帮助.如果您对评论有任何疑问,请通知我.