2

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

    [2013-04-03 09:05:09,870] 调试 - jetbrains.buildServer.XMLRPC - faultStringjava.lang.RuntimeException:org.jdom.input.JDOMParseException:第 28 行错误:XML 文档结构必须在同一实体内开始和结束.faultCode0
    [2013-04-03 09:05:09,878] 调试 - buildServer.AGENT.registration - jetbrains.buildServer.xmlrpc.RemoteCallException:调用 http://teamcityserver:8080/RPC2 buildServer.registerAgent3:org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException:org.jdom.input.JDOMParseException:第 28 行错误:XML 文档结构必须在同一实体内开始和结束。
    jetbrains.buildServer.xmlrpc.RemoteCallException:调用 http://teamcityserver:8080/RPC2 buildServer.registerAgent3:org.apache.xmlrpc.XmlRpcException:java.lang.RuntimeException:org.jdom.input.JDOMParseException:第 28 行错误:XML文档结构必须在同一个实体内开始和结束。
      在 jetbrains.buildServer.xmlrpc.AbstractXmlRpcTarget.call(AbstractXmlRpcTarget.java:94)
      在 jetbrains.buildServer.agent.impl.ServerXmlRpcProxy.registerAgent3(ServerXmlRpcProxy.java:62)
      在 jetbrains.buildServer.agent.impl.BuildAgentImpl.doRegisterOnBuildServer(BuildAgentImpl.java:776)
      在 jetbrains.buildServer.agent.impl.BuildAgentImpl.registerOnBuildServer(BuildAgentImpl.java:748)
      在 jetbrains.buildServer.agent.impl.ServerMonitor.run(ServerMonitor.java:71)
    原因:org.apache.xmlrpc.XmlRpcException:java.lang.RuntimeException:org.jdom.input.JDOMParseException:第 28 行错误:XML 文档结构必须在同一实体内开始和结束。
      在 org.apache.xmlrpc.XmlRpcClientResponseProcessor.decodeException(XmlRpcClientResponseProcessor.java:104)
      在 org.apache.xmlrpc.XmlRpcClientResponseProcessor.decodeResponse(XmlRpcClientResponseProcessor.java:71)
      在 org.apache.xmlrpc.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:73)
      在 org.apache.xmlrpc.TCXmlRpcClient$1.execute(TCXmlRpcClient.java:89)
      在 org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:194)
      在 org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:185)
      在 org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:178)
      在 jetbrains.buildServer.xmlrpc.impl.CommonsXmlRpcTargetImpl$1.execute(CommonsXmlRpcTargetImpl.java:72)
      在 jetbrains.buildServer.xmlrpc.AbstractXmlRpcTarget.call(AbstractXmlRpcTarget.java:84)
      ... 4 更多
    [2013-04-03 09:05:09,878] 警告 - buildServer.AGENT.registration - 调用 http://teamcityserver:8080/RPC2 buildServer.registerAgent3: org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException: org. jdom.input.JDOMParseException:第 28 行错误:XML 文档结构必须在同一实体内开始和结束。
    [2013-04-03 09:05:09,878] 警告 - buildServer.AGENT.registration - 与 TeamCity 服务器的连接可能已丢失。将尝试恢复它。查看 logs/teamcity-agent.log 了解详细信息(除非您使用自定义日志记录)。

根据带有额外 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> 

我只有一次能够重新启动代理并让它再次正确连接。一般来说,我可以安装它,让它运行一次,然后重新启动它会出现这个错误。有任何想法吗?

4

1 回答 1

4

看起来COMP_WORDBREAKS环境变量的格式与 xml 结构混淆,不允许完整生成 xml 请求消息。

COMP_WORDBREAKS我机器上的值是"'><;|&(:. 将以下行放在 buildAgent.properties 文件中解决了这个问题并允许代理正确注册。

env.COMP_WORDBREAKS=

我还没有看到进行此更改的任何副作用。代理现在似乎表现正常。

于 2013-04-03T13:56:00.827 回答