2011-08-29 8 views
8

Estoy tratando de configurar a Jenkins para sondear desde mi repositorio SVN, y comenzar una nueva compilación cada vez que detecte que se ha cometido un commit. He conseguido que la encuesta funcione. pero el edificio es bastante entusiasta, y en este momento se está reconstruyendo cada vez que sondea, haya habido o no cambios. El archivo SMC-polling.log lee:Jenkins Poll SVN crea constantemente incluso sin commits nuevos

Started on Aug 31, 2011 9:49:51 AM 
Workspace doesn't contain svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk. Need a new build. 
Done. Took 10 ms 
Changes found 
salida

la consola de Jenkins se ve así:

Started by an SCM change 
Checking out a fresh workspace because the workspace is not svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk 
Cleaning workspace /var/lib/jenkins/jobs/CSATester/workspace 
Checking out svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk 
.... 
no revision recorded for svn://10.64.147.118:/svn/repos/conttest/csa_test/trunk in the previous build 
No changesets found for this build 

La url de recompra se establece en svn: repositorio/SVN /: //10.64.147.118/conttest/trunk y le he dicho a Jenkins que elimine los archivos no versionados y luego actualice antes de la compilación. El espacio de trabajo definitivamente contiene los archivos en el repositorio, y la construcción tiene éxito cada vez.

¿Alguna idea sobre qué puede estar causando esto?

+0

Tiene el mismo problema ahora.Hudson sondea el repositorio oportunamente, sin embargo, se desarrolla cada vez, a pesar de no haber cambios. ¿Cómo puede ser esta la configuración predeterminada? – Jonny

Respuesta

3

Por lo tanto, he descubierto que parece que el protocolo svn: // no es compatible ni con Jenkins ni con el complemento SVN. Después de cambiar mi servidor SVN para usar http: // y establecer esa nueva ruta en Jenkins, las compilaciones ya no están ocurriendo a menos que exista una nueva confirmación.

TL, DR: No use svn: //, use http: // en su lugar.

1

No estoy seguro de lo que está causando esto, pero he tenido muchos problemas con el sondeo de SCM en el pasado. Descubrí que funciona mejor escribir un disparador post-commit de SVN que golpea la url de la construcción para activarlo. Esto elimina la sobrecarga de las encuestas y nunca activará una compilación si no hay cambios. Si quisieras hacerte elegante, incluso podrías hacer que el disparador sea más inteligente y evitar la compilación en los cambios de archivos como readme.txt y similares.

+0

Sí, había pensado en ese enfoque, pero realmente no quería implementarlo, ya que no quería asumir que todos los proyectos en el repositorio SVN tenían una compilación correspondiente en Jenkins (Sí, podría modificar el post-commit solo para trabajar en algunos proyectos, pero luego tendría que cambiar eso cada vez que se creara un nuevo proyecto en el repositorio que quería que administrara Jenkins). Pero, a menos que consiga que la encuesta funcione correctamente, la única manera que se me ocurre es la postcompromiso. – lightstrike

+0

resulta que la respuesta a mi problema fue utilizar el protocolo http: // en Jenkins en la ubicación de mi repositorio. Aparentemente no es compatible con el protocolo svn: //. Todo funciona ahora con ese cambio. – lightstrike

1

Tuvimos un problema similar con CVS, donde el sondeo CVS tomó más tiempo del que le dije que sondeara para ver si había cambios. Es decir, le tomaría a CVS tres minutos buscar cambios, pero le dije que sondeara cada minuto. Sin embargo, esto no debería ser un problema con Subversion.

Puede utilizar un post cometer gancho, como se dijo Feasoron, pero hay dos problemas con este enfoque:

  • Si Jenkins/Hudson es hacia abajo cuando se golpea el gatillo, Jenkins/Hudson no hará una construir.
  • Si hay alguna diferencia horaria entre el servidor de Jenkins/Hudson (incluso unos pocos segundos), puede terminar con Jenkins/Hudson construyendo la versión anterior del repositorio.

La mayoría de las personas tienen un sondeo de Subversion en Jenkins/Hudson y no tienen estos problemas, por lo que probablemente esté relacionado con algo en su configuración.

Eche un vistazo a los registros de sondeo para cada compilación y vea por qué Jenkins/Hudson cree que ve una actualización (disponible en cada compilación como un enlace en el lado izquierdo de la página web). También mire las primeras líneas de su consola de compilación y vea si eso ofrece alguna pista.

Si aún no puede resolverlo, actualice su pregunta con algunos de los registros de sondeo y eso puede ayudarnos a comprender por qué tiene estos problemas.

+0

La diferencia de tiempo realmente depende de su gancho: pasamos el número de revisión a Jenkins, y construye esa revisión. Creo que esto es más complicado si está utilizando Jenkins integrado en SCM para obtener el código, pero es posible. – Feasoron

+0

@David - He encontrado la solución, aparentemente el protocolo svn: // no es compatible, ya que después de que cambié mi servidor SVN y de que Jenkins usara http: // las cosas funcionaron por sí solas. Gracias por la ayuda. – lightstrike

Cuestiones relacionadas