46

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.

polarice
  • 517
  • 1
  • 5
  • 7

6 Answers6

51

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

Abhijeet
  • 8,561
  • 5
  • 70
  • 76
11

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.

bpgriner
  • 381
  • 6
  • 14
  • Thank you, that got me on the right track. What ended up working for me was: git pull -s recursive -X theirs origin myBranch – HRVHackers May 16 '16 at 07:06
  • See also solution from Abhijeet. – hiaclibe Apr 12 '18 at 08:16
  • Where did you include the git pull in the jenkins configurations ? I am confused please help me out. – alphaguy Jul 30 '19 at 11:10
  • For me (in a scripted pipeline case) the workaround was to add "checkout scm" call, without that the workspace and the "Recent Changes" were not updated. The drawback seems to be the workspace cleaning which is run by default in this case (as I see from the log). Just pulling seems to be not implemented yet, I found a ticket about this problem: https://issues.jenkins.io/browse/JENKINS-52916. – Alexander Samoylov Jun 05 '21 at 11:41
6

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

enter image description here

Krishna Gupta
  • 1,219
  • 11
  • 12
3

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.

Harish Talanki
  • 866
  • 13
  • 27
2

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

Simply tick the check box in the image:

This Tab saved me the Head aches

AJPerez
  • 3,435
  • 10
  • 61
  • 91