CruiseContol.net 웹 대시 보드 보고서 (HTTP를 통해)의 XML 버전에 액세스하는 방법은 무엇입니까?
-
04-07-2019 - |
문제
마지막 빌드 상태 (성공/실패)의 상태를 결정해야하며 다음과 같이합니다.
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 페이지로드), 오류가 발생하기 쉬우 며 (이미 바이트/유니 코드 버그에 부딪 쳤음) 깨지기 쉬운다.
해결책
좋아, 나는 그것을 알아 냈다. 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 배 빠릅니다.
제휴하지 않습니다 StackOverflow