I've started experimenting with Hudson as a build server. I'm using subversion and have it configured to poll every minute. The issue I'm seeing is that if a build at revision 10 takes 5 minutes and there are 5 commits during that time, Hudson will next build revision 15.
Is there a way to ensure every revision is built?
In SCM part of build configuration you should have Build Triggers section and option "Trigger builds remotely (e.g., from scripts)". According to help info next to that option you can script post-commit action so every commit would fire new build. As hudson has build's queue you should have every revision built.
Here's a link that could help you: https://hudson.dev.java.net/build.html
Here's example how to start build job with parameters (see to my comment for details): http://wiki.hudson-ci.org/display/HUDSON/Parameterized+Build
I took fchateaus approach above (thanks man!) and modified it to work with Mercurial.
You will need to edit .hg/hgrc on the central server, and put in a changegroup hook. Keep in mind that changegroups only set the first changeset to the HG_NODE environment variable, so you have to do a hg tip to grab the real tip node and pass that along via URL instead. A bit of a trick to do in a one-liner, but I figured it out.
This is what you would do for Hudson running on Windows.
Hudson does not yet have this capability, but its been asked for a few times on the mailing list. See issue 673
You have to do a few things to build exactly each revision:
REVISION
string parameter to your job${REVISION}
parameter to the repository URL,e.g.:
https://server/path/myproject${REVISION}
REVISION
variable is only expanded in the URL, but when creating the folder, Hudson will not expand it, resulting in a folder named:myproject${REVISION}
/usr/bin/wget \ --auth-no-challenge \ --no-check-certificate \ --user=me \ --password=mypasswd \ https: //server/path/job/jobname/buildWithParameters?delay=0sec\&REVISION=%40$REV \ -O /dev/null
If you want to trigger a build manually, you have two possibilities:
The
@
sign is very important because all this trick relies on the fact that Subversion plugin interpretsURL@NNN
asget revision NNN from repository at URL
. If you forget the@
, Subversion will just say it can't find folderhttps://server/path/myprojectNNN
. That's also why you have to put%40
betweenREVISION=
and$REV
in the wget command,%40
is the escaped character for@
.e.g. you can click "Build Now" to trigger build for three times and just leave the build para as "null". you will see only first two builds are in Hudson queue. The third one will be ignored :P cool but it's really bad that it's not found in some document but with my experiments for times :(