2011-03-04 7 views
8

He creado un trabajo hudson para nuestro proyecto múltiple maven con 5 módulos para implementar los artefactos SNAPSHOT al experto repositorio. Está bien, siempre y cuando se desarrolle correctamente sin fallas de prueba. Sin embargo, ahora me gustaría cumplir con los siguientes requisitos:Configurar un trabajo hudson maven para seguir creando si hay fallas de prueba, pero solo implementar si no hay fallas de prueba

  • Cuando un módulo tiene una falla de prueba, la construcción debe continuar construyendo y probar los otros módulos, pero se vuelve amarilla. El uso de -Dmaven.test.failure.ignore=true logra, pero falla en el próximo requisito.
  • Cuando un módulo tiene una falla de prueba, ninguno de los artefactos debe implementarse en el repositorio de maven. Otros proyectos dependen de las instantáneas de este proyecto y esos proyectos solo desean utilizar las instantáneas más recientes que no tienen ninguna prueba que falle.
  • Preferiblemente, utilice la integración de hudson maven en lugar de una secuencia de comandos gratuita, obtenemos las páginas de informes de hudson (estado rojo/amarillo/azul por módulo, coloreado de error de registro de compilación, ...). Específicamente ejecutar el maven build dos veces (primero mvn test -Dmaven.test.failure.ignore=true, que mvn deploy -DskipTests) no es una solución porque es una pérdida de rendimiento y confunde las páginas de informes de hudson y no es atómico (se actualiza desde los repositorios nuevamente en la segunda compilación).

¿Hay alguna manera de lograr esto?

Respuesta

5

Hay una opción de compilación posterior llamada Implementar artefactos en el repositorio de Maven. Si no selecciona Implementar incluso si la compilación es inestable, significa que si la prueba falla, no desplegará nada. Junto con el -fae en el comando, la cosa debería funcionar de la manera deseada

+0

Obstáculo: la opción * Implementar artefactos en el repositorio de Maven * no está disponible en un trabajo de freestyle hudson, solo en un trabajo de maven2 hudson (que aparentemente todavía no funciona para maven 3). –

+0

En este momento, una construcción maven2 hudson/jenkins no es compatible con maven3 –

2

tal vez usted puede intentar utilizar mvn -fae opción con que los empleos en Hudson - Tiene experto fallan caso después de la acumulación

+0

La opción -fae (falla al final) no detiene la implementación que presumo. Pero parece una mejor alternativa que -Dmaven.test.failure.ignore = cierto, ¡gracias! –

1

Si el tiempo de construcción no es un problema para usted, creo que la mejor opción es para crear otro trabajo, solo para implementar. Algo como esto:

  1. Configure su tarea original (vamos a llamarlo "Preparar trabajo") con "mvn -fae instalación limpia"
  2. crear un nuevo trabajo ("desplegar trabajo") con "mvn despliegan", y no configura ninguna construir desencadena para ello
  3. En la opción "crear empleo", permitirá a los Build otros proyectos, bajo posterior a la generación acciones y la puso a funcionar su "despliegue de trabajo".

Quizás pueda intentar configurar ambas tareas para usar el mismo espacio de trabajo, ahorrando tiempo en todo el proceso de compilación/implementación.

+1

Al usar una secuencia de comandos gratuita en lugar de la integración de maven, esto se puede hacer en un solo trabajo, pero * Ejecutar específicamente la creación de maven dos veces (la primera prueba mvn -Dmaven.test.failure.ignore = true, que mvn deploy -DskipTests) es no es una solución porque es una pérdida de rendimiento y confunde las páginas de informes de Hudson y no es atómica (se actualiza desde los repositorios nuevamente en la segunda compilación). * –

1

Si usa Artifactory como administrador de repositorio, puede usar Hudson/Jenkins Artifactory plugin para implementar sus artefactos. Este complemento solo implementará sus artefactos si todas las pruebas pasan para todos los módulos de una compilación Maven.

+0

Solución interesante. Sin embargo, estamos usando Nexus, pero veré si tienen algo similar. –

Cuestiones relacionadas