2010-08-01 8 views
5

Mi lugar de trabajo utiliza Hudson para sus compilaciones diarias, con varios esclavos de compilación (un Linux, un Windows, un Mac) revisando nuestra base de código completa de svn y construyendo nuestra aplicación a la medianoche de cada día. Todo esto funciona bastante bien.¿Cómo puedo asegurarme de que todos mis esclavos hudson compilan la misma revisión svn para la compilación diaria?

Ocurre un problema ocasional ... a veces un desarrollador trabaja hasta tarde y verificará un cambio a svn justo después de la medianoche. Cuando esto ocurre, es posible que algunos de los esclavos de compilación diaria hagan su 'svn checkout' antes de que se procese el svn commit, mientras que otros esclavos de compilación lo harán después de que se procese el commit. Cuando esto sucede, terminamos con diferentes revisiones creadas en diferentes plataformas ... p. la compilación de Mac podría ser una compilación de la revisión SVN 5555, mientras que la compilación de Windows termina siendo una compilación de la revisión 5556 de SVN. Eso es malo, ya que queremos que todas las compilaciones diarias para un día determinado se basen en la misma base de código.

Supongo que una forma de evitar esto es prohibir a los desarrolladores que se comprometan con svn entre las 11:30 PM y las 12:30 AM, pero preferiría una solución más elegante que no dependa del comportamiento de los desarrolladores. ¿Hay alguno? En particular, si hay una manera de decirle a Hudson que revise la revisión del código que estaba vigente a la medianoche del día actual (por ejemplo, "svn co -r {" the-current-date "}") en lugar de echarle un vistazo HEAD, creo que podría hacer el truco.

¿Existe una forma común/fácil de manejar este problema?

+0

Comience la compilación a la 1am? :) –

+0

jaja, esa fue una buena idea. Espero que no tengan ningún problema, para que los desarrolladores estén allí hasta la 1 pm o incluso más tarde. ;) –

Respuesta

3

La solución depende un poco de cómo iniciar las compilaciones. Si están todos activados por temporizador, puedes permitir que todos comiencen al mismo tiempo. El riesgo de que termine con diferentes revisiones será mínimo. Una versión más elegante es tener un trabajo que active todos los trabajos de construcción pasando la revisión como parámetro. Si la construcción no es demasiado larga, puede crear un trabajo que pase la revisión a todos los demás trabajos.

EDIT: En la actualidad los siguientes no es apoyada por Hudson (1.376)

También encontré un buen svn book. Establece que puede reemplazar la revisión con una fecha entre llaves. Entonces puede probar <svn-url>@{00:00} en la configuración de su trabajo.

+0

El truco @ {00:00} es limpio; Lamentablemente, no funciona a través del cliente svn basado en Java que está integrado dentro de Hudson. Otra consideración es si su repositorio utiliza svn: externals, entonces creo que los externos también se pueden obtener con la revisión incorrecta. – jdkoftinoff

+0

Me acabo de dar cuenta de eso también. :( –

0

Otra idea que encontré útil es compartir mismo directorio de fuentes entre los esclavos y tienen una svn arriba de comandos, esto redujo el tiempo de actualización de SVN, y también se libere del dolor de la sincronización.

Uso nfs en máquinas Linux, también funcionará sshfs.

Cuestiones relacionadas