¿Cómo le digo a Jenkins / Hudson que active una compilación solo para cambios en un proyecto en particular en mi árbol de Git?
El complemento de Git tiene una opción (región excluida) para usar expresiones regulares para determinar si se debe omitir la construcción en función de si los archivos en la confirmación coinciden con la expresión regular de la región excluida.
Desafortunadamente, el complemento Git estándar no tiene una característica de "región incluida" en este momento (1.15). Sin embargo, alguien publicó parches en GitHub que funcionan en Jenkins y Hudson que implementan la función que desea.
Es un poco trabajo de construir, pero funciona como se anuncia y ha sido extremadamente útil ya que uno de mis árboles Git tiene múltiples proyectos independientes.
https://github.com/jenkinsci/git-plugin/pull/49
Actualización: el complemento Git (1.16) ahora tiene la función de región 'incluida'.
Ignored commit c6e2b1dca0d1885: No paths matched included region whitelist
. ¿Cualquier pista? Más detalles aquí: stackoverflow.com/questions/47439042/…Básicamente, necesitas dos trabajos. Uno para verificar si los archivos cambiaron y otro para hacer la compilación real:
Trabajo # 1
Esto debería activarse ante cambios en su repositorio de Git. Luego prueba si la ruta que especifica ("src" aquí) tiene cambios y luego usa la CLI de Jenkins para activar un segundo trabajo.
Trabajo # 2
Configure este trabajo para que tome un parámetro GIT_REVISION como este, para asegurarse de que está creando exactamente la revisión que eligió construir el primer trabajo.
fuente
$? || exit 0
...test $? -eq 0 || exit 0
¿quizás?Si está utilizando una sintaxis declarativa de Jenkinsfile para describir su canalización de construcción, puede usar la condición de conjunto de cambios para limitar la ejecución de la etapa solo al caso en que se modifican archivos específicos. Esta es ahora una característica estándar de Jenkins y no requiere ninguna configuración / software adicional.
Puede combinar varias condiciones utilizando
anyOf
oallOf
palabras clave para el comportamiento OR o AND según corresponda:fuente
Si bien esto no afecta a trabajos individuales, puede usar este script para ignorar ciertos pasos si la última confirmación no contiene ningún cambio:
fuente
api/
carpeta). Si puede solucionar esto, me encantaría un cambio sugerido !Si la lógica para elegir los archivos no es trivial, activaría la ejecución del script en cada cambio y luego escribiría un script para verificar si realmente se requiere una compilación, y luego activaría una compilación si lo es.
fuente
Puede utilizar Generic Webhook Trigger Plugin para esto.
Con una variable like
changed_files
y expresión$.commits[*].['modified','added','removed'][*]
.Puede tener un texto de filtro como
$changed_files
y regexp de filtro como"folder/subfolder/[^"]+?"
si fuerafolder/subfolder
la carpeta que debería activar las compilaciones.fuente
Respondí esta pregunta en otra publicación:
Cómo obtener una lista de archivos modificados desde la última compilación en Jenkins / Hudson
Puede agregar el cheque directamente en la parte superior del shell ejecutivo del trabajo, y lo hará
exit 0
si no se detectan cambios ... Por lo tanto, siempre puede sondear el nivel superior para que los registros activen una compilación.fuente
Escribí este script para omitir o ejecutar pruebas si hay cambios:
Entonces puedes hacer algo como:
./scripts/git-run-if-changed.sh cmd vendor go.mod go.sum fixtures/ tools/ -- go test
fuente