如何访问 XML 版本的 CruiseContol.NET Web 仪表板报表(通过 HTTP)



我需要确定上次构建的状态(成功/失败(,我这样做:

report_url = 'http://.../ViewLatestBuildReport.aspx'
success_marker = '<td class="header-title" colspan="2">BUILD SUCCESSFUL</td>'
page = urllib.urlopen(report_url)
if all(success_marker not in line for line in page):
  # build is not good, do something
  ...

但这是浪费(加载整个 HTML 页面(、容易出错(我已经遇到了字节/unicode 错误(和脆弱。

好吧,我有点想通了。CCTray 通过轮询XmlServerReport.aspx跟踪构建状态,这是(令人惊讶!.XML。

所以我目前的解决方案如下所示:

import sys, urllib, xml.sax, xml.sax.handler
report_url = 'http://.../CCNET/XmlServerReport.aspx'
class FoundBuildStatus(Exception):
  def __init__(self, status):
    self.build_status = status
class Handler(xml.sax.handler.ContentHandler):
  def startElement(self, name, attrs):
    if name == 'Project' and attrs.get('name') == '...':
      status = attrs.get('lastBuildStatus')
      if status:
        raise FoundBuildStatus(status)
page = urllib.urlopen(report_url)
try:
  xml.sax.parse(page, Handler())
except FoundBuildStatus, ex:
  if ex.build_status == 'Failure':
    # build is not good, do something
    ...

在我的环境中,它比最初的基于 HTML 的解决方案快约 8 倍。

最新更新