Git – Use Hudson to build a specific git commit

githudson

I have a hudson build server. The source code is managed by a git repository. For each build the latest version is checked out and compiled. Now i'd like to tell hudson to use not the latest version, but an older version of the code (specified by me).

In hudson i have two parameters which can be set. First "name of repository", with default value "origin" and second refspec with value +refs/heads/*:refs/remotes/origin/*. I tried a bit around something like origin/[commitid] or +refs/heads/*:refs/remotes/origin/[commitid]. But nothing worked as expected.

I think i had to use a parameterized job, so that i can give the commit as parameter to the job.

How can i tell hudson to use a specific commit instead of the latest one?

Best Answer

I just want to this answer more clear. How to make your job to checkout a specific commit, step by step:

  1. Add string parameter to your job with name, let it be COMMIT in my example.
  2. Choose Git as SCM (provided by Jenkins Git plugin).
  3. In Git SCM properties set your repo properties.
  4. In Git SCM, in the paragraph Branches to build type ${COMMIT} which is the reference to the job parameter and will be resolved during the build.

That's it, launch the build and in the log you will see something like this:

Cloning the remote Git repository
Cloning repository ssh://your-repo.git
Fetching upstream changes from ssh://your-repo.git
using GIT_SSH to set credentials 
Fetching upstream changes from ssh://your-repo.git
using GIT_SSH to set credentials 
Checking out Revision af63e2102b65953316e512c0bb659578bb143a33 (detached)

Note, that there are other ways to set the environment variable before the SCM checkout, i.e. using Prepare environment for the run step from the EnvInject Plugin (you could even use Groovy for this).

Also, if you don't see the options I'm talking about or they don't work, ensure you have a new version of a Git plugin In my case it is 2.2.0.