Jenkins and Git sparse checkouts
I have a large repository in Git. How do I create a job in Jenkins that checks out just one sub-folder from the project?
Jenkins Git Plugin support sparse checkouts since git-plugin 2.1.0 (April, 2014). You will need git >= 1.7.0 for this feature. It is under "Additional Behaviors" -> "Sparse Checkout paths."
See: Jira issue JENKINS-21809
You can use sparse checkout feature of Git. Note that Git still clones whole repository to local disk. That's not too bad however, because it is compressed.
- Create a new job in Jenkins, set Git repository in Source Code Management section.
- Build the project. This will clone whole repository to local disk.
- Open projects's workspace folder, delete everything there except .git folder.
-
Open Git shell for project's workspace folder. Enable sparse-checkout:
git config core.sparsecheckout true
-
Update working tree:
git read-tree -mu HEAD
-
Create
sparse-checkout
file in .git/info folder. Add path to sub-folder you want to checkout to that file, like so (note trailing slash):folder/to/include/
Build the project again. This time only one sub-folder should appear in workspace folder.
You could have a custom step that would just use
git checkout your-branch -- the/desired/path anthother/desired/path
To clear it you could just rm -rf
the working folder and recreate it with mkdir workingdir
. This would require you to specify this option on the git level of the above command:
git --working-dir="/path/to/workingdir" checkout your-branch -- the/desired/path anthother/desired/path
All this depends on how well you know Jenkins.