Archiv für Kategorie Effizient arbeiten

CruiseControl / SVNBootstrapper: Server certificate verification failed: issuer not trusted

Heute habe ich endlich die Zeit gefunden, mich um unseren Buildserver zu kümmern.
Meine erste Aufgabe bestand darin, dass ich die kompletten Konfigurationsdateien so abstrahiert habe, dass die eine Projekt-Konfiguration letztendlich nur noch aus 10 Zeilen XML-Code besteht, in denen u.a. der Pfad zum SVN-Repository angegeben ist.
Dies funktionierte auch alles wunderbar, bis der SVNBootstrapper zum ersten Mal die Verbindung mit dem Repository aufnahm.

Im Log bekam ich folgenden Fehler zu sehen:

2009-09-28 14:15:20,739 [Thread-28] WARN  SVNBootstrapper  – svn: OPTIONS von ¯https://$host/svn/$project/trunk®: Server certificate verification failed: issuer is not trusted (https://$host)
2009-09-28 14:15:21,051 [Thread-27] INFO  Project          – Project $projectidle
2009-09-28 14:15:21,051 [Thread-27] INFO  ProjectController – $project Controller: build progress event: idle
2009-09-28 14:15:21,051 [Thread-27] ERROR Project          – exception attempting build in project $project
net.sourceforge.cruisecontrol.CruiseControlException: svn process exited with error code 1

Nach kurzer Recherche wurde ich fündig: Das Benutzerkonto, unter dem CruiseControl läuft, muss das Client-Zertifikat installieren. Dazu gibt es entweder die Möglichkeit, im Subversion-Konfigurationsverzeichnis die SSL-Settings anzupassen oder aber – einfacher – das Zertifikat im Zertifikate-Speicher zu installieren.
Wichtig ist dabei, dass CruiseControl unter einem lokalen Benutzer-Account als Dienst läuft und nicht als NetworkService oder Local System.
Unter dem Benutzer-Account unter dem CC läuft, muss man sich nun anmelden, Internet Explorer starten, auf die URL des WebDAV-Ordners gehen, das Zertifikat installieren und schließlich den CC-Dienst neu starten. Nun funktioniert alles wunderbar und das Projekt Build-Server geht langsam aber sicher dem Ende entgegen

, , , , , ,

1 Kommentar

Interessante Links (Die besten Einzeiler, Analyse mit Traceroute, Closures and JVM)

Hier ein paar interessante Links, die über das Wochenende in meinen Lieblings-Blogs aufgetaucht sind

Matthias:

Mirko:

, , , , , ,

Keine Kommentare

Akzeptanztests für das GWT mit Hilfe von Selenium

Selenium ist ein Sammlung von Tools, mit deren Hilfe sich Akzeptanztests definieren lassen. Selenium IDE kann zum automatischen Aufzeichnen von Aktionen benutzt werden. Dabei wird SI als Plugin im Browser installiert.
So weit, so gut – ich wollte nun für unsere GWT-Applikation Selenium einsetzen, da das manuelle Testen einiges an Zeit in Anspruch nimmt.
Das Warten auf die Antwort der AJAX-Aufrufe löste ich pragmatisch durch pause(). Die User-Extension waitForCondition ignorierte ich für AJAX-Aufrufe erst einmal.

Für mich enstand nun folgendes Problem: die einzelnen Elemente der TreeView (com.google.gwt.user.client.ui.Tree) ließen sich nicht anklicken.

  • SI zeichnete die Clicks nicht auf. Der Grund dafür liegt darin, dass das onClick-Event nicht auf Layer oder Labels an den Browser gefeuert wird.
  • Über die ID (gwt-uid-…) konnte ich den Click (click -> id=gwt-uid-…) laut IDE zwar durchführen, im Browser passierte aber nichts.
  • Eine manuelle Festlegung der ID im GWT (treeItem.ensureDebugId(“element”)) führte zum selben Ergebnis: im Browser passierte rein gar nichts.

Als Fazit kann ich leider nur sagen, dass die Idee hinter Selenium zwar richtig gut ist. Allerdings funktioniert das Zusammenspiel zwischen GWT und Selenium für unsere Zwecke überhaupt nicht. Dementsprechend: Back to the roots und von Hand testen :(

Bei meiner Recherche nach möglichen Workarounds bin ich übrigens über CubicTest gestoßen. CubicTest ist ein Eclipse-Plugin mit denen sich Testfälle in der Eclipse-IDE visuell modellieren lassen. Die Tests könne danach unter anderem als Selenium-Tests exportiert werden.

, , , , ,

1 Kommentar

Tool zum Resizen von Fenstern über mehrere Bildschirme

Eclipse-Entwickler kennen das: Sie besitzen zum Entwickeln zwar zwei Bildschirme, aber Eclipse unterstützt kein Multi-Display-Support bzw. keinen, der wirklich zuverlässig funktioniert.
Auf Codeplex wurde nun das Tool VirtualScreenMax releast, dass eine Anwendung auf mehrere Bildschirme resizt. Ich finde das Tool mehr als praktisch, denn nun habe ich Eclipse im Vollbild-Modus auf beiden Bildschirmen laufen und muss nicht mehr Detached-Outlines u.ä. benutzen.

Keine Kommentare

MDA mit Eclipse

Vorhin bin ich auf Umwegen über http://www.acceleo.org/pages/home/en gestolpert. Die Truppe bietet ein Eclipse-Plugin an, dass aus UML-Modellen Code erzeugt. Ist an sich nichts Neues. Erwähnenswert ist aber, dass Module für Python und PHP5 existieren.

Keine Kommentare

DSH / Luntbuild / CodeBeamer

Bin gerade über die Distributed Shell – DSH gestoßen. Mit diesem Tool kann man unter Linux den selben Befehl an verschiedene Maschinen gleichzeitig absetzen. Ist bei einer größeren Serverfarm unter Umständen ganz hilfreich ;)

Weiterhin bin ich am Überlegen, ob wir von Trac auf CodeBeamer wechseln sollten. Bin da aber noch sehr unschlüssig, da z.B. die Integration von LuntBuild -soweit ich das gesehen habe- nicht existiert.

Für CodeBeamer spricht, dass man nicht für jedes Projekt eine neue Instanz erstellen muss, sondern alles in einer Seite hat. Mit einer der nächsten Trac-Versionen soll das zwar realisiert werden, aber bis die erscheint können noch ein paar Tage in’s Land gehen.

Keine Kommentare

Meta-Programmierung mit JAXME, diff & patch und PHP

Gibt nicht viel Neues von mir. Auf Arbeit bin ich damit beschäftigt an unserem Projekt weiter zu arbeiten. Ich berichtete letzte Woche bereits, dass ich für das Projekt einen Code-Generator geschrieben habe.
Über Ostern habe ich den Code für den Code-Generator noch einmal neu geschrieben und dabei sind einige Sachen für unsere interne Software-Library abgefallen.
Ich habe mit Hilfe von JAXME einen kleines Tool geschrieben, dass mir aus Java-Quellcode alle Methoden, Felder, Imports und Exceptions ausliest und diese Informationen dann als XML-Schema auswirft. JAXME arbeitet nicht mit Reflections, kann also nur auf den reinen Quellcode angewandt werden.

Aus dem XML-Schema werden danach über PHP-Templates die passenden Quellcode-Dateien (z.B.: GWT-Serverimplementierungen) generiert und in die Zieldatei geschrieben.
Falls die Zieldatei bereits existiert, wird mit Hilfe von diff & patch -unter Windows setze ich dafür GnuWin32 ein- ein Patch gebaut und dieser dann auf den bereits existierenden Code angewendet. Dabei enstand als Nebenprodukt die Klasse Ckl_Text_DiffPatch, die eben diff & patch antriggert und den Patch automatisch einspielt.

Keine Kommentare

Extreme Faulheit – Das DRY-Prinzip in Reinkultur

Meine Faulheit hat ein nicht mehr feierliches Maß angenommen: Ich habe gestern für eines unserer Projekte ein Meta-Tool in PHP geschrieben, das aus allen Java-TOs die zugehörigen Dateien erzeugt.
Mit zugehörigen Dateien meine ich damit: BOs, GWT-Service-Implentations, GWT-Service-Definitions, Model-Assemblers, sowie Einträge für web.xml und gwt.xml.
Trotz der Entwicklungszeit des Scripts von ca. 6h habe ich dadurch insgesamt knapp eine Woche an Entwicklungszeit für das Projekt an sich gespart.

Ich bin so faul ;)

Keine Kommentare

phpUnderControl: Klick auf Dokumentation führt zu “artifacts… Invalid Directory”

Ich hatte vor ein paar Tagen eine Mail bekommen, in der ich um Hilfe bezüglich phpUnderControl geboten wurde. Einer der Fehler war, dass beim Klick auf “Documentation” nur der Fehler “artifacts… Invalid directory” erschien. Aus zeitlichen Gründen hatte ich das Thema CruiseControl/phpUnderControl auf Eis gelegt, mich heute Abend aber mal an die Problemlösung gemacht.

Der Fehler tritt auf, wenn im -Tag der falsch eingetragen wurde. Das ist der Fall, wenn das phpUc.php-Script zum Erzeugen des Beispiel-Projekts benutzt wird.
Die beiden artifactspublisher müssen folgendermaßen aussehen:

  <artifactspublisher dir="projects/${project.name}/build/api" dest="artifacts/${project.name}" subdirectory="api"/>
  <artifactspublisher dir="projects/${project.name}/build/coverage" dest="artifacts/${project.name}" subdirectory="coverage"/>

Bitte das dest-Attribut mit dem richtigen Verzeichnis beachten!

,

Keine Kommentare

Continuous Integration für CruiseControlPHP

Überraschend, dass ich darüber noch nicht vorher geschrieben habe: phpUnderControl ist ein Plugin für CruiseControl, dass automatische Builds von PHP-Applikationen erzeugt. Dabei werden phpUnit, Checkstyle bzw. PHP_CodeSniffer und phpDocumentor unterstützt. All das, was ich brauche :)

Keine Kommentare