Archiv für Kategorie Effizient arbeiten
CruiseControl / SVNBootstrapper: Server certificate verification failed: issuer not trusted
Verfasst von Schakko unter Application Server, Effizient arbeiten am 28. September 2009
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
Interessante Links (Die besten Einzeiler, Analyse mit Traceroute, Closures and JVM)
Verfasst von Schakko unter Effizient arbeiten, Java, Linux am 23. Februar 2009
Hier ein paar interessante Links, die über das Wochenende in meinen Lieblings-Blogs aufgetaucht sind
- Command Line FU – Die besten Einzeller Einzeiler für die Kommandozeile (Linux)
- Analyse mit Traceroute
Akzeptanztests für das GWT mit Hilfe von Selenium
Verfasst von Schakko unter Eclipse, Effizient arbeiten, GWT am 16. Januar 2009
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.
Tool zum Resizen von Fenstern über mehrere Bildschirme
Verfasst von Schakko unter Eclipse, Effizient arbeiten, Windows am 9. Dezember 2008
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.
MDA mit Eclipse
Verfasst von Schakko unter Effizient arbeiten, Java, PHP am 14. April 2008
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.
DSH / Luntbuild / CodeBeamer
Verfasst von Schakko unter Effizient arbeiten, Linux, SCM am 26. März 2008
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.
Meta-Programmierung mit JAXME, diff & patch und PHP
Verfasst von Schakko unter Effizient arbeiten, PHP am 26. März 2008
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.
Extreme Faulheit – Das DRY-Prinzip in Reinkultur
Verfasst von Schakko unter Effizient arbeiten, Entwicklung, GWT, Java am 18. März 2008
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
phpUnderControl: Klick auf Dokumentation führt zu “artifacts… Invalid Directory”
Verfasst von Schakko unter Effizient arbeiten, Entwicklung am 24. Februar 2008
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
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!
Continuous Integration für CruiseControlPHP
Verfasst von Schakko unter Effizient arbeiten, Entwicklung, PHP am 21. Januar 2008
Ü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
Sag was!