s.d s.d - 9 months ago 48
Git Question

How to let Jenkins git commit only if there are changes?

I have a Jenkins job that builds from a github.com repository's master branch with Maven (

mvn clean install
), then checks for license headers in Java files and missing NOTICE files, and adds them if necessary (
mvn license:format notice:generate
). Sometimes this will result in changed or added files, sometimes not.

Whenever there have any changes been made (by the license plugin) I want to push the changes to the github repo.

Now I'm having trouble figuring out how best to achieve that. I've added a shell build step after the Maven license plugin where I execute git commands:

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

git add .
alone works, i.e., doesn't break the build, even if no files have been added. However,
git commit
breaks the build, if there aren't any changes at all.

I'm not concerned about pushing back to github, as I believe the Git Publisher post-build action can do this for me. Can someone please point me in the right direction for the git commit?

s.d s.d
Answer Source

To stop the build from breaking on the shell build step returning exit code 1 at any one point, e.g., when trying to make a git commit although there is nothing to commit, you can simply wrap the respective commands into an echo.

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

Now, whether there are untracked files to add to the index or not, and whether the working tree is dirty or clean, echo will return exit code 0, as there will be some string to be echoed.