TeamCity构建代理注册期间的XmlRpcException

时间:2013-04-02 13:39:35

标签: teamcity teamcity-7.0

我已经使用Java Web Start和手动.zip发行版在我的机器上以几种不同的方式安装了TeamCity构建代理。两者都导致可行的安装,因为我有一两次能够与TeamCity服务器正确连接和注册。但是,重新启动(<install_location>/bin/agent.sh stop ... <install_location>/bin/agent.sh start)后,我在teamcity-agent.log中收到以下错误(在log4j配置文件中打开了额外的调试)。


    [2013-04-03 09:05:09,870]  DEBUG -   jetbrains.buildServer.XMLRPC - faultStringjava.lang.RuntimeException: org.jdom.input.JDOMParseException: Error on line 28: XML document structures must start and end within the same entity.faultCode0 
    [2013-04-03 09:05:09,878]  DEBUG - buildServer.AGENT.registration - jetbrains.buildServer.xmlrpc.RemoteCallException: Call http://teamcityserver:8080/RPC2 buildServer.registerAgent3: org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException: org.jdom.input.JDOMParseException: Error on line 28: XML document structures must start and end within the same entity. 
    jetbrains.buildServer.xmlrpc.RemoteCallException: Call http://teamcityserver:8080/RPC2 buildServer.registerAgent3: org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException: org.jdom.input.JDOMParseException: Error on line 28: XML document structures must start and end within the same entity.
      at jetbrains.buildServer.xmlrpc.AbstractXmlRpcTarget.call(AbstractXmlRpcTarget.java:94)
      at jetbrains.buildServer.agent.impl.ServerXmlRpcProxy.registerAgent3(ServerXmlRpcProxy.java:62)
      at jetbrains.buildServer.agent.impl.BuildAgentImpl.doRegisterOnBuildServer(BuildAgentImpl.java:776)
      at jetbrains.buildServer.agent.impl.BuildAgentImpl.registerOnBuildServer(BuildAgentImpl.java:748)
      at jetbrains.buildServer.agent.impl.ServerMonitor.run(ServerMonitor.java:71)
    Caused by: org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException: org.jdom.input.JDOMParseException: Error on line 28: XML document structures must start and end within the same entity.
      at org.apache.xmlrpc.XmlRpcClientResponseProcessor.decodeException(XmlRpcClientResponseProcessor.java:104)
      at org.apache.xmlrpc.XmlRpcClientResponseProcessor.decodeResponse(XmlRpcClientResponseProcessor.java:71)
      at org.apache.xmlrpc.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:73)
      at org.apache.xmlrpc.TCXmlRpcClient$1.execute(TCXmlRpcClient.java:89)
      at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:194)
      at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:185)
      at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:178)
      at jetbrains.buildServer.xmlrpc.impl.CommonsXmlRpcTargetImpl$1.execute(CommonsXmlRpcTargetImpl.java:72)
      at jetbrains.buildServer.xmlrpc.AbstractXmlRpcTarget.call(AbstractXmlRpcTarget.java:84)
      ... 4 more
    [2013-04-03 09:05:09,878]   WARN - buildServer.AGENT.registration - Call http://teamcityserver:8080/RPC2 buildServer.registerAgent3: org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException: org.jdom.input.JDOMParseException: Error on line 28: XML document structures must start and end within the same entity. 
    [2013-04-03 09:05:09,878]   WARN - buildServer.AGENT.registration - Connection to TeamCity server is probably lost. Will be trying to restore it. Take a look at logs/teamcity-agent.log for details (unless you're using custom logging). 

根据带有额外xmlrpc调试的日志,这是有问题的xml:

<?xml version="1.0"?><methodCall><methodName>buildServer.registerAgent3</methodName><params><param><value><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<agentDetails agentName="aaronhbox_0" agentPort="9090" authToken="" osName="Linux, version 3.5.0-17-generic">
  <alternativeAddresses>
    <address>10.2.1.232</address>
    <address>192.168.225.1</address>
    <address>192.168.80.1</address>
  </alternativeAddresses>
  <availableRunners>
    <runner runType="Ant" />
    <runner runType="Duplicator" />
    <runner runType="gradle-runner" />
    <runner runType="Inspection" />
    <runner runType="Ipr" />
    <runner runType="JPS" />
    <runner runType="Maven2" />
    <runner runType="rake-runner" />
    <runner runType="simpleRunner" />
  </availableRunners>
  <availableVcs>
    <vcs name="perforce" />
    <vcs name="mercurial" />
    <vcs name="jetbrains.git" />
    <vcs name="svn" />
    <vcs name="cvs" />
  </availableVcs>
  <buildParameters>
    <param name="env.COLORTERM" value="gnome-terminal" />
    <param name="env.COMP_WORDBREAKS"><![CDATA["'><;|]]></value></param></params></methodCall> 

只有一次我能够重新启动代理并再次正确连接。通常,我可以安装它,让它运行一次,然后重新启动它会出现此错误。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

看起来COMP_WORDBREAKS环境变量的格式化正在弄乱xml结构,并且不允许完整生成xml请求消息。

我的计算机上的COMP_WORDBREAKS值为"'><;|&(:。 将以下行放在buildAgent.properties文件中可以解决此问题,并允许代理正确注册。

env.COMP_WORDBREAKS=

我没有看到任何改变的副作用;现在代理似乎表现得很好。