tortoise - svn merge branch to trunk
Jenkins CI: Cómo desencadenar compilaciones en el compromiso de SVN (5)
¿Qué complementos y funciones de complementos necesito establecer para que mi trabajo de Jenkins active una compilación en cualquier momento en que el código se haya comprometido 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 desencadenador.
¿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.
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.
Haga una encuesta en el repositorio para ver si ocurrieron cambios. Esto podría "omitir" una confirmación si entran dos confirmaciones dentro del mismo intervalo de sondeo. Descripción de cómo hacerlo aquí , observe 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).
Configure su repositorio para que tenga un enganche post-commit que notifique a Jenkins que una compilación debe comenzar. Descripción de cómo hacerlo aquí , en la sección "ganchos post-commit"
La función de etiqueta SVN no es parte de la encuesta, es parte de la promoción del "encabezado" actual del código fuente a una etiqueta, para hacer una instantánea de una compilación. Esto le permite hacer referencia a Jenkins buid # 32 como SVN tag / tags / build-32 (o algo similar).
Necesita solicitar solo un complemento que sea un complemento de subversión. simplemente, vaya a la sección jenkins-> job_name-> Build Trigger -> (i) Trigger build de forma remota (es decir, desde scripts) Token de autenticación: -Token_name
A continuación, vaya al directorio de enganches del servidor svn y luego ejecute los siguientes comandos: - (a) cp post-commit.tmpl post-commit (b) chmod 777 post-commit (c) chown -R www-data: www-data post-commit (d) Nota posterior a la confirmación de vi : Todas las líneas deben comentarse agregue a continuación la línea al último sintaxis (para el usuario de Linux): - / usr / bin / curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name
sintaxis (para el usuario de Windows): - C: / curl_for_win / curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name
Puede usar un gancho post-commit.
Coloque la secuencia de comandos de anzuelo post-commit en la carpeta hooks
, cree una wget_folder
en su unidad C: / y coloque el archivo wget.exe
en esta carpeta. Agregue el siguiente código 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 Test = nombre del trabajo
echo
se usa para ver el valor y también puede agregar la exit 2
al final para saber sobre el problema y si el script hook posterior a la confirmación se está ejecutando o no.
Hice una herramienta usando python con algo de bash para activar una versión de jenkins. Básicamente, tienes que recolectar estos dos valores de la post-confirmación cuando un commit acierta al servidor svn:
REPOS = "$ 1" REV = "$ 2"
Luego usa "svnlook dirs-changed $ 1 -r $ 2" para obtener la ruta 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?
Puedes ver mi guion de github
Escribí este guión porque acabo de aprender Python, y todavía lo uso 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.