2009-08-25 9 views
9

Estoy tratando de poner un proyecto maven2 bajo integración continua en hudson. El proyecto usa selenio para algunas pruebas de integración. Hudson se ejecuta en un linux sin cabeza. Estoy usando xvfb para iniciar una sesión de servidor x para el selenio.Establecer la variable de entorno para construir en hudson

Para ejecutar las pruebas, necesito exportar una variable de entorno llamada DISPLAY. p.

export DISPLAY=:99 

Sin embargo, no quiero establecer la variable en el cuadro, ya que afectaría a todas las compilaciones. He intentado ejecutar un intérprete de comandos utilizando el complemento m2 steps extra, pero no funciona, ya que se ejecuta en un archivo bash separado, lo que significa que las variables de entorno no se conservan.

Hay una manera de registrar la variable de entorno de hudson.

Respuesta

4

Hay una nueva característica en Hudson que le permite especificar parameters for builds. Esto parece que hace lo que quieres.

aunque tenga en cuenta que:

warning http://wiki.hudson-ci.org/images/icons/emoticons/information.gif Esto sigue siendo una característica muy joven, así que la regeneración apreciados

...

El parámetro [s] están disponibles como parámetros del entorno. Por ejemplo, un shell ($ FOO,% FOO%) o Ant ($ {env.FOO}) pueden acceder a estos valores.

+1

No estoy convencido de esta realidad responde a la pregunta que se hizo - cómo fijo variables de entorno en el mismo shell que Maven es invocado? Estos parámetros son bastante útiles, pero no son exactamente lo que el usuario estaba pidiendo, y tampoco le permiten editar variables de entorno que están actualmente presentes, es decir, no puede hacer que se llame a sí mismo. Por ejemplo, export PATH =/usr/bin/foo: $ PATH no funcionará, ya que no reconoce $ PATH – Spedge

+1

@Spedge está combinando lectura y configuración de variables de entorno. La pregunta sobre cómo establecer una variable y el mecanismo descrito hace exactamente eso. En su ejemplo, usted está haciendo un conjunto y una lectura, lo que no se solicitó. –

+0

@ Vendedor Rich - Disculpe señor. He hecho algo de trabajo sobre esto ahora, y elaboraré en una respuesta debajo (ya que no hay espacio suficiente en un comentario). – Spedge

3

Hudson's Node Properties harían un buen trabajo aquí. Pero si está buscando una forma más automática de asignar el número de pantalla, necesitará hacer un poco más de trabajo, tal vez vincularlo al port-allocator plugin, o escribir un nuevo complemento BuildWrapper que inicie automáticamente xvfb y establezca la PANTALLA variable de entorno en nombre de la compilación.

Si está dispuesto a cambiar a un servidor X diferente para probarlo, puede probar el Xvnc plugin para Hudson. Iniciará el vncserver automáticamente y configurará la variable de entorno SCREEN también. También tiene la capacidad de tomar una captura de pantalla cuando finalizan las pruebas, y mostrar eso en la página de Hudson del trabajo.

+0

¿Cómo se * agrega * (no se establece) a una variable de entorno como 'PATH'? –

+0

@Sridhar Sugiero comenzar una pregunta completamente nueva para eso. –

+0

@Sridhar: No hay forma de hacerlo si el nuevo valor de la variable debe sobrevivir al paso de compilación actual. –

0

Según mi respuesta a la respuesta aceptada, aquí están mis conclusiones.

Cuidado con variables inicializado-Un

Cuando se utiliza la función de parametrización en Hudson, se puede añadir variables ambientales hasta el final de una cadena - siempre que contengan algo en el primer lugar.

Por ejemplo, si la variable de entorno $ FOO está en blanco, y se va a utilizar la siguiente línea en un parámetro de cadena ...

/usr/bin/ladeda/:$F00 

entonces la variable de entorno se lea/usr/bin/ladeda /: $ F00.

Sin embargo, si lo hiciera

export F00=/usr/bin/fiddledede 

entonces sería la variable exportada ....

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

Al principio, cuando me encontré con esto como una prueba, no había trabajado esto - y por lo tanto, pensé que la característica del parámetro no aceptaba variables de entorno externo, cuando realmente era (simplemente tenían que contener algo).

10

fyi, estoy lanzando the setenv plugin para Hudson hoy (suponiendo que java.net se recupere lo suficiente para hacerlo) - se comporta de manera similar a la funcionalidad de compilación parametrizada, pero con una interfaz de usuario más simple (solo un área de texto para la entrada - los pares clave/valor están separados por líneas nuevas) y sin la necesidad de proporcionar valores para los parámetros en tiempo de compilación.

1

He encontrado que el selenio usando xvfb-run es más confiable que la configuración de PANTALLA, por lo que esto podría funcionar para usted. Entonces:

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

¿Ha intentado utilizar el plugin selenium maven?

El complemento podría configurarse para iniciar Xvfb, ejecutar las pruebas y luego detenerlo.

utilizando esta configuración pom.xml:

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

los detalles aquí: http://mojo.codehaus.org/selenium-maven-plugin/examples/headless-with-xvfb.html

Cuestiones relacionadas