Jenkins CI: cómo desencadenar compilaciones en la confirmación SVN

79

¿Qué complementos y funciones de complementos necesito configurar para que mi trabajo de Jenkins active una compilación cada vez que el código se compromete con 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 disparador.

IAmYourFaja
fuente
1
posible duplicado de la compilación
altamente cafeinado

Respuestas:

86

Hay dos maneras de hacer esto:

Recomiendo la primera opción inicialmente, debido a su facilidad de implementación. Una vez que haya madurado en sus procesos de construcción, cambie al segundo.

  1. Sondee el repositorio para ver si se produjeron cambios. Esto podría "omitir" una confirmación si dos confirmaciones entran dentro del mismo intervalo de sondeo. Descripción de cómo hacerlo aquí , 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 similar a crontab).

  2. Configure su repositorio para que tenga un enlace posterior a la confirmación que notifique a Jenkins que debe comenzar una compilación. Descripción de cómo hacerlo aquí , en la sección "Ganchos posteriores a la confirmación"

La función Etiqueta SVN no es parte del sondeo, es parte de la promoción del "encabezado" actual del código fuente a una etiqueta, para tomar una instantánea de una compilación. Esto le permite referirse a Jenkins buid # 32 como etiqueta SVN / tags / build-32 (o algo similar).

Edwin Buck
fuente
post-commits rock ganchos. Tiempos de respuesta más rápidos y (a escala) su sistema de CI no aplasta el repositorio de origen con cientos de solicitudes de registro de cambios.
EricMinick
5
@EricMinick Son geniales, pero a veces pueden derretir el servidor de CI, si obtienes muchas pequeñas confirmaciones en un período corto de tiempo. Todos son caballos para cursos, y es difícil saber qué método es favorable sin analizar cómo está funcionando actualmente su proceso de desarrollo.
Edwin Buck
1
@EdwinBuck: ¿Sabes si hay alguna forma de configurar Jenkins para construir solo confirmaciones selectivas? Explicaré, tengo un tortoiseSVN y un proyecto de Jenkins que sigue sondeando el repositorio. Ahora, si deseo que el compromiso que hago no active a Jenkins, ¿hay alguna manera de hacerlo?
SandBag_1996
@UnderDog Si ha madurado hasta el punto en que tiene un disparador posterior a la confirmación en maven, entonces prefiero una solución que busque "palabras clave" especiales en el disparador posterior a la confirmación y, al descubrirlas, opte por NO decirle a Jenkins servidor para lanzar una nueva compilación. Por ejemplo, "^ DONTBUILD -. *" Podría usarse como un indicador de "no construir" si se proporciona en la primera línea de la confirmación.
Edwin Buck
@mxdsp Actualizó el enlace. No es tan bonito como el antiguo wandisco, pero hará el trabajo. ¡Gracias!
Edwin Buck
2

Solo necesita un complemento, que es el complemento de Subversion.

Luego, simplemente, vaya a Jenkins → job_name → sección Build Trigger → (i) Trigger build de forma remota (es decir, desde scripts) Token de autenticación: Token_name

Vaya al directorio de ganchos del servidor SVN y luego active los siguientes comandos:

  1. cp post-commit.tmpl post-commit
  2. chmod 777 post-commit
  3. chown -R www-data:www-data post-commit
  4. vi post-commit

    Nota: Todas las líneas deben ser comentadas Agregue la línea de abajo al final

Sintaxis (para usuarios de Linux):

/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Sintaxis (para usuarios de Windows):

C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name
Hemin Patel
fuente
Esta respuesta es más o menos idéntica a esta respuesta .
Peter Mortensen
1

Hice una herramienta usando Python con algo de bash para activar una compilación de Jenkins. Básicamente, debe recopilar estos dos valores de la confirmación posterior cuando una confirmación llega al servidor SVN:

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

Luego usa "svnlook dirs-modified $ 1 -r $ 2" para obtener la ruta que se acaba de confirmar. Luego, a partir de eso, puede verificar qué repositorio desea construir. Imagina que tienes cientos de miles de proyectos. No puede comprobar todo el repositorio, ¿verdad?

Puedes consultar mi script desde GitHub .

Phan Dolphy
fuente
-1

Puede usar un gancho posterior a la confirmación.

Coloque el script de enlace posterior a la confirmación en la hookscarpeta, cree un wget_folderen su unidad C: \ y coloque el wget.exearchivo en esta carpeta. Agregue el siguiente código en el archivo llamadopost-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 Test = nombre del trabajo

echose usa para ver el valor y también puede agregar exit 2al final para conocer el problema y si el script de enlace posterior a la confirmación se está ejecutando o no.

Megha
fuente