{"id":234,"date":"2007-10-07T12:15:08","date_gmt":"2007-10-07T10:15:08","guid":{"rendered":"https:\/\/bob-team.de\/wordpress\/?p=234"},"modified":"2012-11-10T14:40:42","modified_gmt":"2012-11-10T13:40:42","slug":"kontinuierliche-integration-mit-hudson","status":"publish","type":"post","link":"https:\/\/bob-team.de\/wordpress\/2007\/10\/07\/kontinuierliche-integration-mit-hudson\/","title":{"rendered":"Kontinuierliche Integration mit Hudson"},"content":{"rendered":"<p><img src='https:\/\/bob-team.de\/wordpress\/wp-content\/uploads\/2007\/09\/hudson.png' alt='Screenshot Hudson' align=\"left\" hspace=\"10\" \/> Mit dem Projekt <a href=\"http:\/\/jenkins-ci.org\"><em>Jenkins<\/em> (fr\u00fcher <em>Hudson<\/em>)<\/a> kann auf sehr einfache Art und Weise ein  <a href=\"http:\/\/de.wikipedia.org\/wiki\/Kontinuierliche_Integration\">Kontinuierlicher Integrationsprozess<\/a> realisiert werden. Im Buch <a href=\"http:\/\/www.wakaleo.com\/books\/jenkins-the-definitive-guide\">Jenkins: The Definitive Guide<\/a> finden sich weitere Details. Die Installation besticht durch ihre Einfachheit. Es reicht <a href=\"http:\/\/jenkins-ci.org\">ein Download<\/a> der <em>hudson.war<\/em>. Der Befehl <strong>java -jar hudson.war<\/strong> startet den Server und schon kann man unter http:\/\/localhost:8080\/hudson erste Versuche beginnen (per Default legt der Hudson alle Dateien unter <em>USER_HOME\/.hudson<\/em> an).<\/p>\n<p><!--more--><\/p>\n<p>Wir haben uns f\u00fcr eine <a href=\"http:\/\/hudson.gotdns.com\/wiki\/display\/HUDSON\/Tomcat\">Installation als Anwendung im Tomcat<\/a> entschieden. Das Hudson-Home-Verzeichnis wurde in der Datei <em>TOMCAT_ROOT\/webapps\/hudson\/WEB-INF\/web.xml<\/em> auf <em>\/home\/hudson<\/em> umgestellt.<\/p>\n<p><code>&lt;env-entry&gt;<br \/>\n&nbsp;&nbsp;&nbsp;&lt;env-entry-name&gt;HUDSON_HOME&lt;\/env-entry-name&gt;<br \/>\n&nbsp;&nbsp;&nbsp;&lt;env-entry-type&gt;java.lang.String&lt;\/env-entry-type&gt;<br \/>\n&nbsp;&nbsp;&nbsp;&lt;env-entry-value&gt;\/home\/hudson&lt;\/env-entry-value&gt;<br \/>\n&lt;\/env-entry&gt;<\/code><\/p>\n<p>Nach einem Neustart der Applikation war <em>Hudson<\/em> unter <em>http:\/\/appserver:8080\/hudson\/<\/em> aufzurufen. Mit der Option &#8222;enable security&#8220; unter <em>http:\/\/appserver:8080\/hudson\/configure<\/em> wurde die <a href=\"https:\/\/hudson.dev.java.net\/security.html\">Anmeldung am <em>Hudson<\/em><\/a> erzwungen. Per Default werden die Benutzerinformationen aus der Datei <em>tomcat-users.xml<\/em> im Verzeichnis <em>TOMCAT_HOME\/conf<\/em> gelesen. Alle Benutzer mit der Rolle &#8222;admin&#8220; d\u00fcrfen sich am Hudson anmelden und entsprechend gesch\u00fctzte Arbeiten vornehmen.<\/p>\n<p>Die <a href=\"http:\/\/weblogs.java.net\/blog\/fabriziogiudici\/archive\/2006\/11\/setting_up_netb.html\">Integration unserer Netbeans-Projekte<\/a> gestaltete sich schwieriger, da diese ohne Anpassungen vom <em>Hudson<\/em> \u00fcbersetzt, getestet und archiviert werden sollten. Letztlich mussten verschiedene Variablen durch ein projektspezifischen Start-Skript angepasst werden.<\/p>\n<p>Am Beispiel eines Projekts, was verschiedene Bibliotheken und andere Projekte referenziert, soll die Vorgehensweise beschrieben werden:<\/p>\n<ol>\n<li>Die Werkzeuge <em>ant<\/em> (unter <em>\/usr<\/em>) und <em>junit<\/em> (unter <em>HUDSON_HOME\/jobs\/Ressourcen<\/em>) auf den Server kopieren.<\/li>\n<li>Alle abh\u00e4ngigen Bibliotheken nach <em>HUDSON_HOME\/jobs\/Ressourcen<\/em> kopiert. Die Dateistruktur entspricht dabei der lokalen unter <em>C:\\Entwicklung\\Ressourcen<\/em>.<\/li>\n<li>Die referenzierten Projekte m\u00fcssen als Hudson-Job angelegt und erfolgreich \u00fcbersetzt sein.<\/li>\n<li>Die Jar-Dateien, der vom Projekt verwendeten Biblotheken (Projekt-Properties, Libraries), m\u00fcssen ebenfalls nach <em>HUDSON_HOME\/jobs\/Ressourcen<\/em> kopiert werden. Welche Datei das sind, kann man unter dem Netbeans-Men\u00fc <em>Tools\/Library-Manager<\/em> erfahren.<\/li>\n<li>Ein Skript <em>ProjektName.sh<\/em> wird unter <em>HUDSON_HOME\/jobs\/<\/em> angelegt und entsprechend angepasst.<\/li>\n<\/ol>\n<p>Folgendes Beispiel-Skript \u00fcberschreibt f\u00fcr das Projekt <em>ProjektName<\/em> die Variable zum Projekt <em>ProjektAbc<\/em>. Des weiteren werden die Variablen &#8222;libs.swing-layout.classpath&#8220; und &#8222;libs.junit.classpath&#8220; umgebogen.<\/p>\n<p>[code lang=&#8220;bash&#8220;]# Zum Projekt wechseln:<br \/>\ncd \/home\/hudson\/jobs\/ProjektName\/workspace\/trunk<\/p>\n<p># Alles folgende ist EINE Zeile:<br \/>\n\/usr\/apache-ant-1.7.0\/bin\/ant<br \/>\n   -Dlibs.junit.classpath=..\/..\/..\/Ressourcen\/junit-4.4.jar<br \/>\n   -Dproject.ProjektAbc=..\/..\/..\/ProjektAbc\/workspace\/trunk<br \/>\n   -Dlibs.swing-layout.classpath=..\/..\/..\/Ressourcen\/swing-layout-1.0.1.jar<br \/>\n[\/code]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit dem Projekt Jenkins (fr\u00fcher Hudson) kann auf sehr einfache Art und Weise ein Kontinuierlicher Integrationsprozess realisiert werden. Im Buch Jenkins: The Definitive Guide finden sich weitere Details. Die Installation besticht durch ihre Einfachheit. Es reicht ein Download der hudson.war. Der Befehl java -jar hudson.war startet den Server und schon kann man unter http:\/\/localhost:8080\/hudson erste [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[34,98],"class_list":["post-234","post","type-post","status-publish","format-standard","hentry","category-software","tag-hudson","tag-jenkins","entry"],"_links":{"self":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/comments?post=234"}],"version-history":[{"count":5,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/234\/revisions"}],"predecessor-version":[{"id":1173,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/234\/revisions\/1173"}],"wp:attachment":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/media?parent=234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/categories?post=234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/tags?post=234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}