2012-04-04 21 views
64

¿Qué complementos y funciones de complementos debo configurar para que mi trabajo de Jenkins desencadene una compilación cada vez que se confíe código a un proyecto SVN? He instalado tanto el complemento SVN estándar como el complemento de etiquetado SVN, pero no veo ninguna característica nueva que permita la configuración del desencadenador.Jenkins CI: Cómo desencadenar compilaciones en el compromiso de SVN

+0

posible duplicado de [TRIGGER Hudson acumulación cuando SVN] (http : //stackoverflow.com/questions/4792466/trigger-hudson-build-when-svn-commit) – highlycaffeinated

Respuesta

71

Hay dos maneras de hacer esto:

recomiendo la primera opción inicialmente, debido a su facilidad de implementación. Una vez que madure en sus procesos de compilación, cambie a la segunda.

  1. Realice una búsqueda en el repositorio para ver si se produjeron cambios. Esto podría "omitir" una confirmación si entran dos confirmaciones dentro del mismo intervalo de sondeo. Description of how to do so here, tenga en cuenta la cuarta captura de pantalla donde configura en el trabajo un "disparador de compilación" basado en sondear el repositorio (con una configuración de tipo crontab).

  2. Configure su repositorio para que tenga un enlace posterior a la confirmación que notifique a Jenkins que debe iniciarse una compilación. Description of how to do so here, en la sección "ganchos post-commit"

La característica Tag SVN no es parte de la votación, que es parte de la promoción de la "cabeza" actual del código fuente de una etiqueta, en una instantánea de un construir. Esto le permite hacer referencia a Jenkins buid # 32 como SVN tag/tags/build-32 (o algo similar).

+0

ganchos post-commit rock. Tiempos de respuesta más rápidos, y (a escala) su sistema de IC no destruye el repositorio de origen con cientos de solicitudes de registro de cambios. – EricMinick

+4

@EricMinick Son geniales, pero a veces pueden derretir el servidor de CI, si obtienes un pequeño número de confirmaciones en un corto período de tiempo. Todos son caballos para los cursos, y es difícil saber qué método es favorable sin analizar cómo funciona actualmente su proceso de desarrollo. –

+0

@EdwinBuck: ¿Sabes si hay una forma de configurar Jenkins para construir solo confirmaciones selectivas? Explicaré, tengo unStory de tortuga marina y un proyecto de Jenkins que sigue sondeando el repositorio. Ahora, si deseo que el compromiso que hago no desencadene a Jenkins, ¿hay alguna manera de hacerlo? –

0

Hice una herramienta usando python con algo de bash para activar una versión de jenkins. Básicamente, usted tiene que recoger estos dos valores de post-commit cuando un servidor cometer golpeado SVN:

REPOS = "$ 1" REV = "$ 2"

A continuación, se utiliza "svnlook dirs-changed $ 1-R $ 2 "para obtener el camino que acaba de comprometerse". Luego, desde allí puede verificar qué repositorio desea construir. Imagina que tienes cientos de miles de proyectos. No puedes verificar el repositorio completo, ¿verdad?

Se puede extraer de mi guión de github

escribí este guión ya que acabo de aprender Python, y todavía usando ahora. Tenía pensado mejorarlo, pero los nuevos proyectos y las cosas me detienen todo el tiempo. Todo el mundo tiene un buen conocimiento de que Python definitivamente tiene una mejor herramienta integrada. Si alguien pudiera compartir, me encantaría tenerlo.

-1

Puede utilizar un enganche post-commit.

Coloque la secuencia de comandos de enlace de confirmación posterior en la carpeta hooks, cree un wget_folder en su unidad C: \ y coloque el archivo wget.exe en esta carpeta. Agregue el código siguiente en el archivo llamado post-commit.bat

SET REPOS=%1 
SET REV=%2 

FOR /f "tokens=*" %%a IN ( 
'svnlook uuid %REPOS%' 
) DO ( 
SET UUID=%%a 
) 

FOR /f "tokens=*" %%b IN ( 
'svnlook changed --revision %REV% %REPOS%' 
) DO ( 
SET POST=%%b 
) 

echo %REPOS% ----- 1>&2 

echo %REV% -- 1>&2 

echo %UUID% --1>&2 

echo %POST% --1>&2 

C:\wget_folder\wget^ 
    --header="Content-Type:text/plain"^ 
    --post-data="%POST%"^ 
    --output-document="-"^ 
    --timeout=2^ 
    http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%  

donde se utilizó la prueba = nombre del trabajo

echo para ver el valor y también se puede añadir exit 2 al final para saber sobre el tema y si el script de gancho post-commit se está ejecutando o no.

0

¿Recomendarían GitHub en lugar de SVN para desencadenar las compilaciones? En realidad, simplemente sé SVN, pero me pregunto por qué tantas personas tienden a usar GitHub en su lugar.

0

Necesita requerir solo un complemento que sea un complemento de subversión. continuación Simplemente, Id por Jenkins-> job_name-> sección Ejecución Build -> (i) Origen construir de forma remota (es decir, desde guiones) autenticación del token: -Token_name

luego ir a directorio de ganchos del servidor SVN y luego después del fuego debajo de los comandos: - (a) cp post-commit.tmpl post-commit (b) chmod 777 post-commit (c) chown -R www-data: www-data post-commit (d) vi post- commit nota: Todas las líneas deben ser comentadas agregar debajo de la línea al final synta x (para el usuario Linux): -/usr/bin/enrollamiento http://username:[email protected]:8081/job/job_name/build?token=Token_name sintaxis

(para el usuario de Windows): - C:/curl_for_win/enrollamiento http://username:[email protected]:8081/job/job_name/build?token=Token_name

Cuestiones relacionadas