Switch JDK between build steps

1,119 views
Skip to first unread message

Andreas

unread,
Mar 26, 2012, 5:54:15 AM3/26/12
to jenkins...@googlegroups.com
Hi,


I face the issue that I have to use different JDKs for different build steps. Namely I need to invoke the compile step in ant with a 1.5 JDK and run the sonar ant target with a 1.6 JDK. There is no easy way to split this job, so a multi job setup is no solution here. Also I do not want to fork into a different JDK in ant manually - actually only Jenkins knows where the JDK is installed on the build node.

I face a similar requirement for maven goals.
 
I'm thinking about extending the ANT plugin to allow JDK selection in the advanced options and the set JAVA_HOME accordingly.

Is there an easy, already existing solution? Any ideas are welcome.


Kind Regards, Andreas.

Didier Durand

unread,
Mar 26, 2012, 7:15:33 AM3/26/12
to jenkins...@googlegroups.com
Hi,

To my knowledge Jenkins launches a separate jvm for each step you configure in the "Build" section of your job configuration

So, I would try to alternate your build steps under Ant with shell build steps and use these shell steps to switch the jvm/jre as you want  (via for example. the linux "alternatives" command)


regards

didier

Andreas

unread,
Mar 26, 2012, 9:55:02 AM3/26/12
to jenkins...@googlegroups.com
Hi,

thanks for the feedback and the idea. Unfortunately I think, this will not work in my setup. I've several builds running in parallel, also I want to have the JDKs auto installed by Jenkins.

Kind Regards, Andreas.

domi

unread,
Mar 26, 2012, 10:18:56 AM3/26/12
to jenkins...@googlegroups.com
Maybe this plugin helps, it lets you expose the different JDK HOMEs as environment variables:
/imod

Andreas

unread,
Mar 27, 2012, 3:03:41 AM3/27/12
to jenkins...@googlegroups.com
Hi,

this sounds like a plan. I still need to convert the build steps into shell script steps but it should be possible to find all tools based on the environment variables. I would loose the install magic, since there is no way for Jenkins to know which JDK the job uses but at least I've a chance to switch the JDK. Mid-term I think it would be cleaner to have the joce with the ANT/Maven build step. Might be other tools come up with the requirement to use a certain special JDK that is different than the one needed for the target platform - like Sonar 2.14.

Kind Regards, Andreas.

Andreas

unread,
Mar 27, 2012, 10:25:25 AM3/27/12
to jenkins...@googlegroups.com
Hi,

my current favorite solution is to define a special ant and maven version as Jenkins tools. Lets say ant-sonar and maven-sonar. Once installed I add to the ant / mvn script of these tool installations:

## Special code to get a fix 1.6 jdk to run sonar 2.14
JAVA_HOME=/usr/share/jdk1.6.0_20
export JAVA_HOME
echo \*\*\* Using hardcoded JAVA_HOME in \"`basename $0`\" pointing to \"$JAVA_HOME\". >&2

It is still kind of a hack but it limits the effort that has to go in the reconfiguration of each job.


Kind Regards, Andreas.

domi

unread,
Mar 27, 2012, 11:52:13 AM3/27/12
to jenkins...@googlegroups.com
you could use this plugin: https://wiki.jenkins-ci.org/display/JENKINS/Tool+Environment+Plugin
to reuse the JDK definitions (JAVA_HOME) for your scripts - this way you at least don't have to hard code JAVA_HOME…
/imod
Reply all
Reply to author
Forward
0 new messages