2011-11-18 15 views
8

Estoy tratando de implementar un flujo de trabajo de Integration-Manager modificado similar al descrito en ProGit.Integration-Manager Git Workflow usando Jenkins/Hudson

Diagram of the Integration-Manager workflow

En lugar de un integration manager realizar las fusiones, quiero que los desarrolladores se funden localmente antes de publicar su código, y quiero una Quality Gateway que hace cumplir las normas de integración continua, tal como un nivel mínimo de cobertura de código y 100 % de las pruebas que pasan, antes de permitir que el código ingrese al repositorio bendito para que otros desarrolladores lo revisen. La idea es que el código en el repositorio bendito siempre cumpla con el estándar mínimo que definimos y siempre construimos.

Quiero que Jenkins desempeñe el papel del gateway de calidad, solo que inserta código en el repositorio bendecido cuando las compilaciones tienen éxito.

Hasta ahora, he configurado el sistema para que haya los siguientes repositorios públicos: el repositorio bendito, un repositorio en el servidor de compilación para Jenkins, que es un repositorio al que se accede mediante gitosis y, por supuesto, repositorios del desarrollador .

Tengo desarrolladores que sacan del repositorio bendito y empujan al repositorio de integración. Ahora estoy tratando de hacer que Jenkins impulse construcciones exitosas desde el repositorio de integración hasta el repositorio bendecido.

Hasta ahora, la única opción que he visto que parece similar a lo que intento lograr es la opción "Push Only If Build Succeeds" en la configuración de Git Publisher de las Acciones de compilación posteriores en la configuración del proyecto de Jenkins. Sin embargo, esas opciones no le permiten especificar el url de inserción o remoto para presionar.

Según tengo entendido, la configuración de editor de Git empujaría los clones del Repo Jenkins en su espacio de trabajo de vuelta al repositorio público de Jenkins, pero quiero pasar a un control remoto diferente, el depósito bendecido.

¿Alguien tiene alguna sugerencia de cómo puedo hacer que Jenkins empuje al bendito repositorio?

EDITAR 0: He intentado poner un paso posterior para ejecutar el comando push a mi repositorio bendita. Esto parece funcionar, ya que no hay errores. Sin embargo no hay cambios están siendo empujados y los registros muestran que git piensa que todo es hasta la fecha:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO]  ------------------------------------------------------------------------ 
[INFO] Total time: 1 minute 7 seconds 
[INFO] Finished at: Fri Nov 18 16:10:50 UTC 2011 
[INFO] Final Memory: 19M/45M 
[INFO] ------------------------------------------------------------------------ 
channel stopped 
[My Project] $ /bin/sh -xe /tmp/hudson5604254372179801803.sh + git push [email protected]:my-project.git --all 
Everything up-to-date 

No sé qué git piensa que no hay nada para empujar, porque no hay duda es.

Respuesta

1

Ha considerado agregar Gerrit a su flujo de trabajo. Los cambios se envían a Gerrit y luego su CI ejecuta una compilación e informa sobre sus pruebas. Se puede configurar para que se necesiten otras aprobaciones (como revisiones de código autorizadas) antes de que se fusione en su bendito repositorio. EGit lo usa en su desarrollo, http://egit.eclipse.org/r/. También hay otras discusiones sobre este flujo de trabajo, como, el blog alblue.

+0

Parece interesante, pero lo único que agrega que nuestro proceso actual no tiene es un proceso de revisión formal. Nuestros proyectos están mavenizados, por lo que si pasan la construcción sabemos que pasan las pruebas y otros requisitos que hemos definido.No parece agregar suficiente (a nuestro proceso) para justificar que otra herramienta complique nuestro entorno. Lo tendré en cuenta cuando cambien nuestras necesidades, ¡gracias! – chrisbunney

+0

Entiendo la necesidad de limitar la complejidad :-) Solo me refiero a que agrega tanto la revisión como los resultados del pase de CI/Prueba en cada cambio antes de que se comprometa con su bendito repositorio. –

+0

Sí, será bueno cuando lleguemos a esa etapa :) – chrisbunney

2

¿Qué le parece usar la acción Jenkins "Push Only If Build Succeses", con un enganche post-commit o post-receive en el repositorio de integración, para enviar al repositorio bendecido cuando Jenkins empuja después de una compilación exitosa?

+0

Parece el camino a seguir, gracias – chrisbunney

+0

+1, aunque vale la pena señalar que esto solo impulsará la rama que activó el cambio. Si ha insertado etiquetas o cambios en más de 1 sucursal, no se presionarán (actualmente estamos utilizando 1 proyecto por repositorio, en lugar de configurar 1 proyecto por sucursal, ya que creamos muchas sucursales que queremos empujar a través de la integración continua) – chrisbunney