博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CruiseControl.NET svnRevsionLabel故障解决
阅读量:6494 次
发布时间:2019-06-24

本文共 2686 字,大约阅读时间需要 8 分钟。

环境:

CruiseControl.NET 1.4

SVN Revision Labeller 1.0.3

异常信息:

Error Message:

System.Xml.XmlException: 行 7 上的开始标记“msg”与结束标记“logentry”不匹配。 行 8,位置 3。 在 System.Xml.XmlTextReaderImpl.Throw(Exception e) 在 System.Xml.XmlTextReaderImpl.Throw(String res, String[] args) 在 System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag) 在 System.Xml.XmlTextReaderImpl.ParseEndElement() 在 System.Xml.XmlTextReaderImpl.ParseElementContent() 在 System.Xml.XmlTextReaderImpl.Read() 在 System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace) 在 System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc) 在 System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace) 在 System.Xml.XmlDocument.Load(XmlReader reader) 在 System.Xml.XmlDocument.LoadXml(String xml) 在 ccnet.SvnRevisionLabeller.plugin.SvnRevisionLabeller.GetRevision() 在 ccnet.SvnRevisionLabeller.plugin.SvnRevisionLabeller.Generate(IIntegrationResult resultFromLastBuild) 在 ThoughtWorks.CruiseControl.Core.Project.CreateLabel(IIntegrationResult result) 在 ThoughtWorks.CruiseControl.Core.IntegrationRunner.Integrate(IntegrationRequest request)

异常出现频率:

当svn log中有非英文字符时(中文,日文,韩文...)时,必现。

故障原因:

SVN Revision Labeller 读取svn输出时,使用的是系统默认的编码流,而svn默认的输出为UTF-8.

解决办法:

修改SVN Revision Labeller 1.0.3项目的GetRevision函数如下:

private int GetRevision()

        {
            // Set up the command-line arguments required
            ProcessArgumentBuilder argBuilder = new ProcessArgumentBuilder();
            argBuilder.AppendArgument("log");
            argBuilder.AppendArgument("--xml");
            argBuilder.AppendArgument("--limit 1");
            argBuilder.AppendArgument(Url);
            if (Username != null && Username.Length > 0 && Password != null && Password.Length > 0)
            {
                AppendCommonSwitches(argBuilder); 
            }

            ProcessStartInfo info = new ProcessStartInfo ();

            info.FileName = executable;
            info.Arguments = argBuilder.ToString();
            info.RedirectStandardOutput = true;
            info.UseShellExecute = false;
            info.CreateNoWindow = true;
            Process p = new Process();
            p.StartInfo = info;
            p.Start();
            string output;
            using (StreamReader r = new StreamReader(p.StandardOutput.BaseStream, Encoding.UTF8))
            {
                output = r.ReadToEnd(); 
            }
            p.WaitForExit();

            // Run the svn log command and capture the results

            //ProcessResult result = RunProcess(argBuilder);              
            //Log.Debug("Received XML : " + result.StandardOutput);
            Log.Debug("Received XML : " + output);

            // Load the results into an XML document

            XmlDocument xml = new XmlDocument();
            xml.LoadXml(output);

            // Retrieve the revision number from the XML

            XmlNode node = xml.SelectSingleNode(RevisionXPath);
            return Convert.ToInt32(node.InnerText);
        }

重新编译SVN Revision Labeller 1.0.3,应用到服务器上,问题解决。

编译好的文件请下载

本文转自斯克迪亚博客园博客,原文链接:http://www.cnblogs.com/sgsoft/archive/2009/03/31/1425913.html,如需转载请自行联系原作者

你可能感兴趣的文章
mysql的使用
查看>>
基于python的一个运维自动化的项目(进度更新)【已开源】
查看>>
职场思想分享005 | 别让背后抱怨说别人坏话成为聊天习惯
查看>>
《跟菜鸟学Cisco UC部署实战》-第 1 章 规划-课件(一共12章,免费)
查看>>
Forefront_TMG_2010-TMG发布Web服务器
查看>>
精品德国软件 UltraShredder 文件粉碎机
查看>>
常回“家”看看
查看>>
.NET工程师必须掌握的知识点
查看>>
PHP设计模式(4)命令链模式
查看>>
Palo Alto 防火墙升级 Software
查看>>
nf_conntrack: table full, dropping packet
查看>>
关于C语言结构体对齐的学习
查看>>
loadrunner另类玩法【测试帮日记公开课】
查看>>
C#删除文件夹
查看>>
【ZooKeeper Notes 3】ZooKeeper Java API 使用样例
查看>>
oracle11g数据库升级
查看>>
AWS - Couldformation 初探
查看>>
《理解 OpenStack + Ceph》---来自-[爱.知识]-推荐
查看>>
手把手教你搭建一个学习Python好看的 Jupyter 环境
查看>>
ES6基础之Array.fill函数
查看>>