¿Cómo dejar que Jenkins se comprometa solo si hay cambios?

Tengo un trabajo en Jenkins que se crea desde la twig maestra del repository de github.com con Maven ( mvn clean install ), luego verifica los encabezados de licencia en files Java y files NOTICE faltantes, y los agrega si es necesario ( mvn license:format notice:generate ) . A veces, esto dará como resultado files modificados o agregados, a veces no.

Cada vez que se han realizado cambios (por el complemento de la licencia) quiero enviar los cambios al repository github.

Ahora estoy teniendo problemas para descubrir la mejor manera de lograr eso. He agregado un paso de compilation de shell después del complemento de licencia de Maven, donde ejecuto los commands de git:

 git add . # Just in case any NOTICE files have been added git commit -m "Added license headers" 

git add . solo funciona, es decir, no rompe la compilation, incluso si no se han agregado files. Sin embargo, el git commit rompe la construcción, si no hay ningún cambio.

No me preocupa regresar a github, ya que creo que la acción posterior a la creación de Git Publisher puede hacer esto por mí. ¿Puede alguien señalarme en la dirección correcta para el commit de git?

 git diff --quiet && git diff --staged --quiet || git commit -am 'Added license headers' 

Este command hace exactamente lo que se requiere, 'git commit only si hay cambios', mientras que los commands en las otras respuestas no: solo ignoran cualquier error de git commit .

Para evitar que la compilation rompa el paso de compilation de shell que devuelve el código de salida 1 en cualquier punto, por ejemplo, al intentar hacer un commit de git aunque no hay nada que confirmar, simplemente puede ajustar los commands respectivos en un eco.

 echo `git add -A && git commit -m "Added license headers"` 

Ahora bien, ya sea que haya files sin seguir para agregar al índice o no, y si el tree de trabajo está sucio o limpio, echo devolverá el código de salida 0 , ya que habrá alguna cadena para ser echo .

También puede capturar el código de error con un operador OR:

 git commit -m "Added license headers" || echo "No changes to commit" 

Es mejor usar

  git commit --allow-empty -a -m "Added license headers"