2011-01-25 22 views
11

Ya he configurado un sistema de control de versiones (subversión) que los desarrolladores utilizarán para confirmar y actualizar su código (digamos que su dirección es https://server/svn/project). Solo mencionar que solo los usuarios autenticados podrán tener acceso al svn del proyecto.Trigger hudson build cuando svn commit

Por otro lado, he instalado Hudson servidor como servidor de integración continua del proyecto (dirección del proyecto es server:8080/job/project) y me gustaría lo siguiente:

  • Hudson construye para ser activado automáticamente cuando hay una svn commit.
  • Correos que se enviarán a los desarrolladores respectivos (los que han confirmado el código) cuando su código no se compila. (lo que significa que cuando el usuario A confirma el código que no genera, solo el usuario A recibe el correo electrónico con notificación)

Solo para mencionar que he configurado la autorización basada en matrices para los usuarios de Hudson, porque no quiero estar abierto a cualquiera

He visto algunas sugerencias para post-commit ganchos, pero ninguno de ellos funcionó hasta ahora.

¿Alguien puede sugerirme qué hacer en ambos temas? pasos específicos serían apreciados.

+2

Creo que Hudson necesita acceso de lectura a su repositorio. ICBWT. – sbi

+1

¿Por qué no funcionó el [enlace post-commit] (http://wiki.hudson-ci.org/display/HUDSON/Building+a+software+project#Buildingasoftwareproject-BuildsbychangesinSubversion%2FCVS)? ¿Autenticación? También puede configurarlo para buscar periódicamente en el repositorio los cambios. – Rup

+0

cuando se confirma el código de muestra a svn, se devuelve un "enganche 'post-commit' con salida de error". – canadiangeo

Respuesta

7

De acuerdo con "Building a software project # Builds by changes in Subversion/CVS", Hudson necesita sondear su repositorio SVN para detectar cambios y desencadenar la compilación.

Sin embargo, eso se puede iniciar en cada confirmación desde el SVN, como in this thread.
La secuencia de comandos oficial está en la página Subversion Plugin.

REPOS="$1" 
REV="$2" 
UUID=`svnlook uuid $REPOS` 
/usr/bin/wget \ 
    --header "Content-Type:text/plain;charset=UTF-8" \ 
    --post-data "`svnlook changed --revision $REV $REPOS`" \ 
    --output-document "-" \ 
    --timeout=2 \ 
    http://server/hudson/subversion/${UUID}/notifyCommit?rev=$REV 

Pero se especifica:

Para que esto funcione, su Hudson tiene que permitir acceso de lectura anónimo al sistema.
Si el control de acceso a su Hudson es más restrictivo, puede necesitar especificar el nombre de usuario y la contraseña, dependiendo de cómo esté configurada su autenticación.

+0

entonces en mi caso, la parte "server/hudson/subversion" de la url en la última línea, ¿cuál sería? – canadiangeo

+0

También probé esta sugerencia (http://borys.name/blog/build_with_hudson_on_subversion_commit.html) que se ajusta a mi caso, pero tampoco funcionó. tal vez estoy jugando con lo que debe ser reemplazado en la URL proporcionada. – canadiangeo

+0

@canadiangeo: Si leo http://wiki.hudson-ci.org/display/HUDSON/Subversion+Plugin, solo reemplazas 'server' por tu servidor (en tu caso:' http: // server: 8080'), pero mantiene '/ hudson/subversion/...' – VonC

1

Éstos son los pasos necesarios:

  • crear un usuario SVN que Hudson se puede utilizar para obtener acceso de sólo lectura a su repositorio
  • Configurar Hudson utilizar este usuario SVN al acceder al repositorio de
  • Cree un nuevo trabajo para usar el repositorio en una dirección específica (es decir, una sucursal específica)
  • Configure su trabajo para sondear el depósito al menos una vez por minuto para cualquier cambio
  • Configure y nuestro trabajo para construir lo que se requiere
  • Configure su trabajo para enviar un correo electrónico en caso de fallo de construcción

Yo recomendaría un correo electrónico a todos los desarrolladores para que se les notifica que la acumulación es inestable, no sólo el culpable.Esto no solo proporciona más visibilidad, sino que motivará al culpable a solucionar el problema de inmediato o, de lo contrario, aceptar un regaño de sus compañeros desarrolladores. Confía en mí, esto es efectivo.

+0

gracias por su respuesta. quizás tengas razón de que sería más efectivo si cada desarrollador recibe notificaciones en versiones inestables. sin embargo, creo que su sugerencia en el paso 3 es la más fácil. :) Me gustaría tener la compilación activada cuando hay algo comprometido en svn, en lugar de sondear el repositorio cada minuto. Supongo que se necesitaría mucho tiempo en este caso y podrían surgir conflictos (cuando dos desarrolladores escriben su código al mismo tiempo). o estoy equivocado? – canadiangeo

+0

Todavía sugiero configurar Hudson para sondear el repositorio. De esta forma, puedes controlar y configurar tus compilaciones en un solo lugar. Puede agregar ganchos post-commit a SVN si lo desea, pero no he tenido ningún problema con el uso de los pasos que describí anteriormente. – Bernard

4

para desencadenar una acumulación cuando hay un compromiso en el SVN que tiene que (1) establecer su trabajo Hudson para construir de forma remota y (2) hacer un gancho SVN ...

la primera parte es bastante sencillo. .. para hacer el gancho ganchos ir a/var/lib/sVN // y cambiar el nombre de post-commit.tmpl a post-commit allí se puede hacer algo como

#!/bin/bash 
# Este script comprueba si se han hecho cambios en un directorio concreto, 
# y en tal caso lanza una build en Jenkins 

REPOS="$1" 
REV="$2" 
JENKINS_JOB="$3" 
JENKINS_USER=admin 
JENKINS_PASSWORD=**** 
JENKINS_HOST=<hostname> 

if [ -n $(svnlook dirs-changed $REPOS --revision $REV | fgrep "tags\/") ];then 
wget --quiet --auth-no-challenge --no-check-certificate --http-user=$JENKINS_USER --http-password=$JENKINS_PASSWORD http://$JENKINS_HOST/job/$JENKINS_JOB/build?token=TOKEN 
fi 

exit 0 

vistazo a este artículo http://blogsyntagma.blogspot.com.ar/2012/04/hook-de-subversion-para-ejecutar-un-job.html (está en español)

Cuestiones relacionadas