9
votes

Définir une variable d'environnement pour la construction à Hudson

J'essaie de mettre un projet Maven2 sous une intégration continue à Hudson. Le projet utilise le sélénium pour des tests d'intégration. Hudson fonctionne sur un Linux sans tête. J'utilise XVFB pour lancer une session de serveur X pour sélénium.

Pour exécuter les tests, j'ai besoin d'exporter une variable d'environnement nommée affichage. E.g. xxx

Cependant, je ne veux pas définir la variable sur la boîte car elle affecterait toutes les constructions. J'ai essayé de faire un shell exécuté à l'aide du plug-in M2 EXTRA ETTES ÉTAPES, mais cela ne fonctionne pas car il est exécuté dans un fichier BASH distinct, ce qui signifie que les variables d'environnement ne sont pas persistées.

existe un moyen d'enregistrer le Variable d'environnement de Hudson.


0 commentaires

6 Réponses :


4
votes

Il y a une nouvelle fonctionnalité à Hudson qui vous permet de spécifier Paramètres pour les constructions < / a>. Cela ressemble à ce que vous voulez.

Notez que:

 avertissement C'est toujours une très jeune fonctionnalité, donc les commentaires appréciés

...

Le paramètre [S] est disponible en tant que paramètres d'environnement. Alors par exemple une coquille ($ foo,% foo%) ou une fourmi ($ {env.foo}) peut accéder à ces valeurs.


3 commentaires

Je ne suis pas convaincu que cela réponde réellement à la question qui a été posée - comment définir des variables d'environnement dans la même coque que Maven est invoquée? Ces paramètres sont assez utiles, mais ce n'est pas tout à fait ce que l'utilisateur demandait - et il ne vous permettait également pas de modifier les variables environnementales actuellement là-bas. Vous ne pouvez pas l'obtenir de vous appeler. Par exemple, Piste d'exportation = / usr / bin / foo: $ chemin ne fonctionnera pas, car il ne reconnaît pas $ PATH


@Spedge Vous vous confondez la lecture et la définition des variables d'environnement. La question a demandé comment définir une variable et le mécanisme décrit exactement cela. Dans votre exemple, vous faites à la fois un ensemble et une lecture, ce qui n'a pas été demandé.


@Rich vendeur - excuses monsieur. J'ai fait du travail à ce sujet maintenant et élaborera une réponse sous (comme il n'y a pas assez de place dans un commentaire).



3
votes

Les propriétés de nœud de Hudson feraient un bon travail ici. Mais si vous recherchez une manière plus automatisée d'attribution du numéro d'écran, vous devrez faire un peu plus de travail, peut-être attacher dans le Plugin Port-Allocator ou écrit un nouveau plug-in BuildWrapper qui démarre automatiquement XVFB et définit la variable d'environnement de l'écran pour le compte de la construction. < / p>

Si vous êtes prêt à passer à un autre serveur X différent pour le test, vous pouvez essayer le Plugin XVNC pour Hudson. Il démarrera automatiquement le VNCServer et définira également la variable d'environnement d'écran. Il a également la possibilité de prendre une capture d'écran lorsque des tests sont terminés et montrent que dans la page Hudson du travail.


3 commentaires

Comment ajoutez (non défini) à une variable d'environnement tel que le chemin ?


@Sridhar je suggérerais de commencer une question entièrement nouvelle pour cela.


@Sridhar: Il n'ya aucun moyen de le faire si la nouvelle valeur variable devrait survivre à l'étape de construction actuelle.



0
votes

Selon ma réponse à la réponse acceptée, voici mes conclusions.

méfiez des variables non initialisées

Lorsque vous utilisez la fonction de paramétrisation de Hudson, vous pouvez ajouter Variables environnementales à la fin d'une chaîne - à condition qu'ils contiennent quelque chose en premier lieu.

Par exemple, si la variable d'environnement $ FOO est vide et que vous deviez utiliser la ligne suivante dans un paramètre de chaîne ... xxx

puis la variable d'environnement lira /usr/bin/ladada/:$f00.

, si je faisais xxx

puis la variable exportée serait .... xxx

Quand j'avais initialement cela comme un test, je n'avais pas travaillé Cette sortie - et ainsi pensait que la fonction de paramètre n'acceptait pas les variables d'environnement externes, lorsqu'elle était effectivement (elles devaient simplement contenir quelque chose).


0 commentaires

10
votes

FYI, je libère Le plugin Setenv pour Hudson Aujourd'hui (en supposant que Java.net récupère suffisamment pour que je le fasse!) - Il se comporte de la même manière que la fonctionnalité de construction paramétrée, mais avec une interface utilisateur plus simple (juste une textare pour les paires d'entrée / de la valeur d'entrée / de valeur est séparée par les nouvelles lignes) et sans la nécessité fournir des valeurs pour les paramètres à la hauteur de la construction.


0 commentaires

1
votes

J'ai trouvé l'exécution de sélénium à l'aide de XVFB-Run code> pour être plus fiable que l'affichage de réglage, cela pourrait donc fonctionner pour vous. Donc:

xvfb-run java -jar selenium-server.jar


0 commentaires

1
votes

Avez-vous essayé d'utiliser le plug-in Selenium Maven?

Le plug-in peut être configuré pour démarrer XVFB, exécutez les tests, puis arrêtez-le. P>

Utilisation de cette configuration POM.XML: P >

<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>


0 commentaires