Jenkins polling is too slow, can RTC notify Jenkins immediately?
I'm using Jenkins LTS + the new Team Center plugin.
The shortest you can set polling to is 5 minutes before Jenkins complains. You can actually set it to once a minute, but that is too slow for fast-feedback. Builds should start the instant they are delivered.
How can I get RTC to notify Jenkins of changes the instant they happen?
Accepted answer
Here is a work item capturing this requirement that you can subscribe to, HPI: Trigger Jenkins build on SCM changes (rather than polling) (246734).
8 other answers
RTC and Jenkins are loosely coupled, with polling as the integration technique. There is no live triggering available in the current released products.
We always had more builds than build servers, so there was always a queue of builds to work on. sometimes the current build would be seconds, sometimes it would be an hour.
We always had more builds than build servers, so there was always a queue of builds to work on. sometimes the current build would be seconds, sometimes it would be an hour.
Comments
All I need is a way for Jazz SCM to run a script, or something when a change comes in.
You may have more builds than build servers, but we don't. Our many jobs build fast and we rarely have any builds queued in Jenkins. The delay waiting for a build to kick off to verify a changeset is too long.
understood.. the current RTC code does not trigger immediately.
You could script the checkin/deliver and the build start together using the Jazz SCM CLI and the RTC build Ant tasks.
~Spencer
Does that mean "cannot" or that nobody has figured out how yet?
correct, you CAN develop and support your own mechanism.
I see this has been asked before (I didn't find it because I didn't search for "hooks"): https://jazz.net/forum/questions/76612/post-commit-hook-in-rtc
Greg Pflaum's answer looks like it might work, but I'll have to figure out how to write the Java (I'm not a Java expert).
has anyone completed this?
if the plugin launches a script (like the git/svn post-receive/commit hooks..)
would need to configure WHERE the script lives.. as you probably don't want it in the web server directory tree..
there are a couple REST methods for invoking Jenkins jobs.. with and without extra parameters.
from the no parameters way http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/
with parmeters way https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build
if the plugin launches a script (like the git/svn post-receive/commit hooks..)
would need to configure WHERE the script lives.. as you probably don't want it in the web server directory tree..
there are a couple REST methods for invoking Jenkins jobs.. with and without extra parameters.
from the no parameters way http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/
with parmeters way https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build
so I think a generic RTC deliver hook could get this data
repo_url
project name
stream name
component name
changeset UUID
action string = either 'Baseline' or 'Changset'
the configuration would provide 1 xml line to the process xml for this participant
<DeliverHook script_name="full path to hook script" />
the hook will run under the OS default shell..
on *ix systems this can be specified on line 1 of the script. with
#!/bin/bash or #!/bin/perl or whatever
in windows this would be cmd.exe
Edit: I have this working.. anyone wants to try it send email to my gmail sdetweil
repo_url
project name
stream name
component name
changeset UUID
action string = either 'Baseline' or 'Changset'
the configuration would provide 1 xml line to the process xml for this participant
<DeliverHook script_name="full path to hook script" />
the hook will run under the OS default shell..
on *ix systems this can be specified on line 1 of the script. with
#!/bin/bash or #!/bin/perl or whatever
in windows this would be cmd.exe
Edit: I have this working.. anyone wants to try it send email to my gmail sdetweil
Comments
How do you handle the case, where you deliver multiple changesets in one deliver operation? Is the action string parameter then a list of changeset UUID's.
the current code calls the hook script for each changeset or baseline,
similar to what happens with git or svn calling the post-receive/post-commit for each revision
Hello Christian,
In case you are still looking for an alternative, there is a non-official solution implemented by Jorge Diaz in the link below:
http://jorgediazblog.wordpress.com/2013/01/24/rtc-build-on-deliver-participant/
It works like a charm right out of the box. Simply add this plugin to the RTC server, and configure the triggers using the XML template Jorge provided in there. Whenever a new delivery is made, the chosen build definitions will be immediately triggered.
Jorge mentions that "the code is experimental", but I haven't found any undesired side-effect so far...
Hope it helps!
Edit (10.03.2016):
This plugin works like a charm to trigger the builds, but any queued builds will always build the latest state of the Repository Workspace when they come to the Jenkins executor! That means, only use this feature if your environment has no queues at all! Check my comment at the end of the post.
In case you are still looking for an alternative, there is a non-official solution implemented by Jorge Diaz in the link below:
http://jorgediazblog.wordpress.com/2013/01/24/rtc-build-on-deliver-participant/
It works like a charm right out of the box. Simply add this plugin to the RTC server, and configure the triggers using the XML template Jorge provided in there. Whenever a new delivery is made, the chosen build definitions will be immediately triggered.
Jorge mentions that "the code is experimental", but I haven't found any undesired side-effect so far...
Hope it helps!
Edit (10.03.2016):
This plugin works like a charm to trigger the builds, but any queued builds will always build the latest state of the Repository Workspace when they come to the Jenkins executor! That means, only use this feature if your environment has no queues at all! Check my comment at the end of the post.
my DeliverHook plugin is available here
https://www.dropbox.com/s/wus9574yoj705pl/DeliverHook.zip?dl=0
see the contents for the xml config, and the sample scripts,
windows, linux and perl.
this supports triggering the jenkins job, where the one Rafael mentions triggers the Build Definition
same thing, just different sides of the same process.
this triggering process is functionally identical to the SVN and GIT receive and post_receive hooks.
the scripts link to the jenkins info
this is all developed on my personal time and equipment.
https://www.dropbox.com/s/wus9574yoj705pl/DeliverHook.zip?dl=0
see the contents for the xml config, and the sample scripts,
windows, linux and perl.
this supports triggering the jenkins job, where the one Rafael mentions triggers the Build Definition
same thing, just different sides of the same process.
this triggering process is functionally identical to the SVN and GIT receive and post_receive hooks.
the scripts link to the jenkins info
this is all developed on my personal time and equipment.
Going back awhile here but wondering if there are updated links for the two scripts mentioned in this thread.. I am trying to find a way to add automation to Jenkins builds via RTC (4.0.5 but about to upgrade to 6.0.1).
I presume RTC still does not include this functionality in more recent versions so thought i'd check if the scripts mentioned here were still available.
thanks!
I presume RTC still does not include this functionality in more recent versions so thought i'd check if the scripts mentioned here were still available.
thanks!