Sonntag, November 29, 2009

CruiseControl.Net Xmpp-Notifier Plugin

Plugin Erstellung

Endlich mal wieder einen Tag frei. Da ich mit dem freien Tag nicht so viel anzufangen wusste, habe ich einfach mal ein CCNet Plugin erstellt. Allerdings musste ich erst mal herausfinden, was dafür zu tun ist. Die notwendigen Aktionen halten sich in Grenzen, allerdings ist es “gewöhnungsbedürfitg” das Plugin zu erstellen. Ich finde die Entwickler vom CCNet-Team hätten hier einen anderen Weg verfolgen soll. Andererseits muss das jeder selber beantworten. Als Einstieg sollte man die Custom Builder Plug-in Seite sich zu Gemühte führen.

Der 2. Schritt war nun das Suchen nach der richtigen Xmpp-Library (Xmpp==Jabber). Es gibt 3 Libraries für .Net, zumindest laut Wikipedia, also agsXMPP war mir bereits bekannt, also einfach mal Jabber-NET probieren. Um es vorweg zu nehmen – Jabber-NET hat nicht funktioniert, es wurden einfach keine Messages gesendet, also zurück zur bekannten Implementierung.

Nach dem alles zusammengesammelt war, musste das Projekt angelegt werden. Das Assembly muss definierten Regeln für CCNet-Plugins entsprechen, für mein Projekt also “ccnet.xmpp-notifier.plugin”. Anschließend eine Klasse anlegen und mit dem [ReflectorType("xmpp-notifier")]-Attribut versehen. Das letzte sind Attribute definieren und die Logik scribbeln. Ist alles getan kann man mit dem Testen loslegen. Das größte Problem war das herausfinden der .Net Reflector Attribute, aber wenn man sich am CCNet-Code entlang hangelt, war es relativ leicht zu schaffen. Ein bisschen Tricky, wenn das Kommunikationsobjekt zu schnell geschlossen wird, dann scheinen einfach Meldungen verschluckt zu werden.

Die Klasse für den CCNet-Task ist völlig unspektakulär, dort geschieht das reine Handling des Xmpp-Objektes

CCNet-Reflector-Attribute

Attribute-Name

Beschreibung

ReflectorType Name des des Tasks, wie dieser in der ccnet.config angesprochen wird. Der Name muss einem Teil des Namespaces entsprechend, unbedingt in der CCNet-Dokumentation genau befolgen.
ReflectorProperty Definition einer Property, die mittels Xml-Attributen konfiguriert wird. Der Name muss dem Attribut in der Konfiguration exakt entsprechen. Wenn Required=true angegeben wird, so wird im CCNet-Validator eine Meldung ausgegeben.
ReflectorArray Property um Arrays aus der Konfiguration abzulegen, zum Beispiel die Empfängerliste. Der Name der angegeben wird, ist das Gruppierungselement, anschließend müssen die einzelnen Einträge der Property entsprechen.
ReflectorHash so ähnlich wie Array

Configuration Sample

   1: <xmpp-notifier 
   2:     server="servername.domain.de" 
   3:     UserName="user@domain.de" 
   4:     Password="xyz1234">
   5:   <jids>
   6:     <Jid>user@anydomain</Jid>
   7:     <Jid>user2@anydomain</Jid>
   8:   </jids>
   9: </xmpp-notifier>

Properies

Property Name Beschreibung Default
server Optional, ein expliziter Servername für den connect, ansonsten wird dieser über die JID des Nutzers ermittelt.  
UserName JID des Benutzer für den Login  
Password Passwort des Benutzers  
jids/jid Nutzer, an die die Benachrichtung zu senden ist.  
message Meldung, die an die Nutzer gesendet wird

Project $(project) was integrated with status $(status) in $(time) min
Project Url $(projectUrl)

timeout Maximale Laufzeit für die Verarbeitung. 120s
headline Angabe, ob die events als HeadLine-Event gesendet werden sollen oder als normale Message. false

Download Code http://zieschang-jan.de/documents/Xmpp-Notifier.zip

Keine Kommentare: