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

Montag, November 09, 2009

Installing Windows 7

Heute habe ich mir endlich vorgenommen Windows 7 zu installieren. Für die Installation habe ich 1h veranschlagt, für die darauffolgende Einrichtung von Anwendungen 1 Woche ;).

Planung ist alles, zumindest hatte ich schon einen Großteil meiner Daten auf eine andere Platte kopiert, so dass es relativ zügig losgehen konnte. DVD ins Laufwerk booten und dann Setup auswählen. Aber dann die große Hürde – bei der Auswahl des Laufwerks ging nichts mehr Windows weigerte sich meine freie Partition mit 50Gb für die Installation zu nutzen. Wütend entschloss ich mich die angehangene 2. Partition auch noch dafür zu opfern, allerdings zu erst die Datensicherung. Oh man, aber ohne das geeignete Tool, Acronis CD funktioniert nicht, geht nix, also schnell Knoppix gesaugt. Dann dass kopieren der Daten, irgendwelche Platten haben bestimmt noch Platz.

Nach dem 2h vergangen sind seit dem Einschalten des Rechners der nächste Versuch der Installation. Versuch, weil es auch diesmal nicht ging. Verdammt, was zur Hölle soll das sein! Im Internet die Posts meinten Drives Partitionieren und Formatieren – nun ja, aber auch das schlug fehl. Eine Option viel mir später noch ein, wobei ich das nicht geglaubt hätte. Bei mir ist das Boot-Laufwerk nicht das Installationslaufwerk von Windows 7, ich switche beim Booten öfter mal die Platten um in meinen ESXi zu booten. Also schnell ins Bios, die Standard-Boot-Platte auf die “Empty” Partition einstellen. Oh Himmel, es geht!

30min nach dem Start der Installation war Windows 7 installiert ohne die ersten Anwendungen konnten installiert werden:

- VMWare Player 3

- Notepad++

- Security Essentials

- Paint.Net

Richtig, kein Firefox, vorerst zumindest.

Nun ja und dann gleich die Installation mit Visual Studio 2010 Beta 2 zu kleistern. Ob das irgendwann wieder weg geht? Irgendwann muss ich noch meine Lieblingsgames installieren.