40
votes

I am working with Jenkins CI and am trying to properly configure my jobs to use git.

I have the git plugin installed and configured for one of my jobs. When I build the job, I expect it to pull the latest changes for the branch I specify and then continue with the rest of the build process (e.g., unit tests, etc.).

When I look at the console output, I see

> git fetch --tags --progress ssh://gerrit@git-dev/Util +refs/heads/*:refs/remotes/origin/*
 > git rev-parse origin/some_branch^{commit}
Checking out Revision <latest_SHA1> (origin/some_branch)
 > git config core.sparsecheckout
 > git checkout -f <latest_SHA1>
 > git rev-list <latest_SHA1>

I see that the plugin fetches and checks out the proper commit hash, but when the tests run it seems as though the repo wasn't updated at all. If I go into the repository in Jenkins, I see there that the latest changes were never pulled.

Shouldn't it pull before it tries to build?

I have git 1.8.5 installed on my Jenkins machine, which is a recommended version. https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

After checking other similar sounding questions on SO, their answers weren't helpful for my problem.

6

6 Answers

11
votes

I believe Jenkins pulls the changes and builds in it's own tmp directory. So, your repository directory isn't getting updated although Jenkins is properly building the new code in it's own sandbox.

My solution to this has been to add a "git pull" step in my build process like so:

When a new commit is delivered to my GitHub repo:
1. Build my project

If successful, perform the following post-build steps:
1. Execute Shell:

cd /your/repo/directory/
git pull

You can obviously modify the "git pull" command to do whatever you need to do if a 'pull' doesn't work for you.

43
votes

Relates me to scenario where workspace wasn't getting cleaned-up, used:

  • Source Code Management--> Additional Behaviours --> Clean after checkout enter image description here

  • Other option is to use Workspace Cleanup Plugin

2
votes

I know the question is old, but there is another way to do this. In the Build Environment section, select "Delete workspace before build starts"

See the screenshot below,

enter image description here

This will actually clean the workspace every time and hence you will get the updated code.

2
votes

For folks using Jenkins pipeline with git plugin, use Wipe Out repository & force clone under Additional Behaviours of SCM section.

enter image description here

1
votes

Try to insert your branch path with this format:

refs/remotes/<remoteRepoName>/<branchName>

Tracks/checks out the specified branch.
E.g. refs/remotes/origin/master
1
votes

Simply tick the check box in the image.. cheers This Tab saved me the Head aches