2009-08-25 20 views
9

Ich versuche, ein Maven2 Projekt unter kontinuierliche Integration in Hudson setzen. Das Projekt verwendet Selen für einige Integrationstests. Hudson läuft auf einem kopflosen Linux. Ich benutze xvfb, um eine x-Server-Sitzung für Selen zu starten.Set Umgebungsvariable für Build in Hudson

Um die Tests auszuführen, muss ich eine Umgebungsvariable namens DISPLAY exportieren. z.B.

export DISPLAY=:99 

Allerdings möchte ich nicht die Variable auf der Box festlegen, da es alle Builds beeinflussen würde. Ich habe versucht, eine Shell ausführen mit dem M2 extra Schritte Plugin auszuführen, aber es funktioniert nicht, da es in einer separaten Bash-Datei ausgeführt wird, was bedeutet, dass Umgebungsvariablen nicht beibehalten werden.

Gibt es eine Möglichkeit, die Umgebungsvariable von Hudson zu registrieren.

Antwort

4

Es gibt eine neue Funktion in Hudson, mit der Sie parameters for builds angeben können. Das sieht so aus, als würde es tun, was du willst.

Obwohl beachten Sie, dass:

warning http://wiki.hudson-ci.org/images/icons/emoticons/information.gif Dies ist immer noch sehr jung, Feedback so geschätzt

...

Der Parameter [s] ist als Umgebungsparameter zur Verfügung. So z.B. Eine Shell ($ FOO,% FOO%) oder Ant ($ {env.FOO}) kann auf diese Werte zugreifen.

+1

Ich bin nicht überzeugt, dass dies tatsächlich die Frage beantwortet, die gestellt wurde - wie kann ich Umgebungsvariablen in der Menge gleiche Shell wie Maven aufgerufen wird? Diese Parameter sind sehr nützlich, aber es ist nicht ganz das, wonach der Benutzer gefragt hat - und es erlaubt Ihnen auch nicht, Umgebungsvariablen zu bearbeiten, die momentan dort sind, d. H. Sie können es nicht selbst aufrufen. Zum Beispiel Export PATH =/usr/bin/foo: $ PATH wird nicht funktionieren, da $ PATH – Spedge

+1

@Spedge nicht Sie lesen und Einstellung von Umgebungsvariablen zusammenfassen werden. Die Frage, wie man eine Variable setzt und der beschriebene Mechanismus tut genau das. In Ihrem Beispiel tun Sie sowohl ein Set als auch ein Read, das nicht verlangt wurde. –

+0

@Rich Verkäufer - Entschuldigung Sir. Ich habe jetzt etwas daran gearbeitet und werde in einer Antwort darauf eingehen (da in einem Kommentar nicht genug Platz ist). – Spedge

3

Hudson-Knoten-Eigenschaften würden hier einen guten Job machen. Aber wenn Sie nach einer automatisierten Art der Zuweisung der Bildschirmnummer suchen, müssen Sie ein wenig mehr arbeiten, vielleicht binden Sie in die port-allocator plugin, oder schreiben Sie ein neues BuildWrapper-Plugin, die xvfb automatisch startet, und setzt den Bildschirm Umgebungsvariable im Namen des Builds.

Wenn Sie zu einem anderen X-Server zum Testen wechseln möchten, können Sie die Xvnc plugin für Hudson ausprobieren. Es startet automatisch den vncserver und setzt auch die Umgebungsvariable SCREEN. Es hat auch die Fähigkeit, einen Screenshot zu machen, wenn Tests abgeschlossen sind, und das auf der Hudson-Seite des Jobs zu zeigen.

+0

Wie fügen * Sie * (nicht gesetzt) ​​zu einer Umgebungsvariablen wie 'PATH' hinzu? –

+0

@Sridhar Ich würde vorschlagen, eine völlig neue Frage dafür zu beginnen. –

+0

@Sridhar: Es gibt keine Möglichkeit, dies zu tun, wenn der neue Variablenwert den aktuellen Build-Schritt überleben sollte. –

0

Nach meiner Antwort auf die angenommene Antwort, hier sind meine Ergebnisse.

Vorsicht Un-initialisierten Variablen

Wenn die Parametrisierung Funktion in Hudson, können Sie Umgebungsvariablen an das Ende eines Strings anhängen - vorausgesetzt, dass sie etwas an erster Stelle enthalten.

Zum Beispiel, wenn die Umgebungsvariable $ FOO ist leer, und Sie waren die folgende Zeile in einem String-Parameter verwenden ...

/usr/bin/ladeda/:$F00 

dann wird die Umgebungsvariable lesen/usr/bin/Ladeda /: $ F00.

aber wenn ich es täte

export F00=/usr/bin/fiddledede 

dann würde die exportierte Variable sein ....

/usr/bin/ladeda/:/usr/bin/fiddledede 

Als ich lief anfangs dies als Test hatte ich dies aus nicht funktioniert - und dachte also, das Parameterfeature akzeptierte keine externen Umgebungsvariablen, wenn es tatsächlich war (sie mussten nur etwas enthalten).

10

fyi, ich release the setenv plugin für Hudson heute (vorausgesetzt, java.net erholt sich genug für mich zu tun!) - es verhält sich ähnlich wie die parametrisierte Build-Funktionalität, aber mit einer einfacheren UI (nur ein Textfeld für die Eingabe - Schlüssel/Wert-Paare sind durch Zeilenumbrüche getrennt) und ohne die Parameter zur Build-Zeit angeben zu müssen.

1

Ich habe festgestellt, Selen mit xvfb-run läuft zuverlässiger als die Einstellung DISPLAY, so könnte dies für Sie arbeiten. Also:

xvfb-run java -jar selenium-server.jar 
1

Haben Sie versucht, das selen maven plugin zu verwenden?

Das Plugin könnte so konfiguriert werden Xvfb zu starten, führen Sie die Tests und dann stoppen Sie es.

mit dieser pom.xml Konfiguration:

<plugins> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>selenium-maven-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>xvfb</id> 
       <phase>pre-integration-test</phase> 
       <goals> 
        <goal>xvfb</goal> 
       </goals> 
      </execution> 

      <execution> 
       <id>selenium</id> 
       <phase>pre-integration-test</phase> 
       <goals> 
        <goal>start-server</goal> 
       </goals> 
       <configuration> 
        <background>true</background> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

die Details sind hier: http://mojo.codehaus.org/selenium-maven-plugin/examples/headless-with-xvfb.html

Verwandte Themen