Make Jenkins use different java in jobs

Hi, I am unable to configure my job to use the specific java I intend to use.
I have zulu17 installed in mounted volume, I can check from container that is available.
I have added JDK installation under tools, with JAVA_HOME configured:
/var/jenkins_home/jdk/zulu17

I have added it under tool locations in system configuration:
/var/jenkins_home/jdk/zulu17/bin

I have configured that specific JDK for my job.

I have added simple step for testing (echo $PATH, which java etc.), and it outputs the following:

how do I make it use java from zulu17 location?

edit: I’m not sure how jenkins creates job “executors” on k8s, do I need to make some additional configuration for that installation to be available there?

Jenkins setup:
Jenkins: 2.462.1
OS: Linux - 5.4.0-193-generic
Java: 17.0.12 - Eclipse Adoptium (OpenJDK 64-Bit Server VM)

ace-editor:1.1
android-emulator:592.vb_b_6d427f1923
ant:511.v0a_a_1a_334f41b_
antisamy-markup-formatter:162.v0e6ec0fcfcf6
apache-httpcomponents-client-4-api:4.5.14-208.v438351942757
asm-api:9.7-33.v4d23ef79fcc8
authentication-tokens:1.119.v50285141b_7e1
bitbucket:223.vd12f2bca5430
bitbucket-build-status-notifier:1.4.2
bitbucket-oauth:0.13
blueocean:1.27.4
blueocean-autofavorite:1.2.5
blueocean-bitbucket-pipeline:1.27.4
blueocean-commons:1.27.14
blueocean-config:1.27.14
blueocean-core-js:1.27.14
blueocean-dashboard:1.27.14
blueocean-display-url:2.4.3
blueocean-events:1.27.4
blueocean-git-pipeline:1.27.4
blueocean-github-pipeline:1.27.4
blueocean-i18n:1.27.14
blueocean-jwt:1.27.14
blueocean-personalization:1.27.14
blueocean-pipeline-api-impl:1.27.4
blueocean-pipeline-editor:1.27.4
blueocean-pipeline-scm-api:1.27.14
blueocean-rest:1.27.14
blueocean-rest-impl:1.27.14
blueocean-web:1.27.14
bootstrap4-api:4.6.0-6
bootstrap5-api:5.3.3-1
bouncycastle-api:2.30.1.78.1-248.ve27176eb_46cb_
branch-api:2.1178.v969d9eb_c728e
build-timeout:1.33
caffeine-api:3.1.8-133.v17b_1ff2e0599
checks-api:2.2.0
cloudbees-bitbucket-branch-source:800.va_b_b_9a_a_5035c1
cloudbees-folder:6.942.vb_43318a_156b_2
cmakebuilder:4.1.1
command-launcher:115.vd8b_301cc15d0
commons-lang3-api:3.14.0-76.vda_5591261cfe
commons-text-api:1.12.0-129.v99a_50df237f7
conditional-buildstep:1.4.3
configuration-as-code:1836.vccda_4a_122a_a_e
credentials:1371.vfee6b_095f0a_3
credentials-binding:681.vf91669a_32e45
data-tables-api:2.0.8-1
display-url-api:2.204.vf6fddd8a_8b_e9
docker-commons:443.v921729d5611d
docker-workflow:563.vd5d2e5c4007f
durable-task:568.v8fb_5c57e8417
echarts-api:5.5.0-1
eddsa-api:0.3.0-4.v84c6f0f4969e
email-ext:1814.v404722f34263
extended-choice-parameter:382.v5697b_32134e8
external-monitor-job:215.v2e88e894db_f8
favorite:2.221.v19ca_666b_62f5
font-awesome-api:6.5.2-1
git:5.0.2
git-client:4.2.0
git-parameter:0.9.18
git-server:99.va_0826a_b_cdfa_d
github:1.37.1
github-api:1.321-468.v6a_9f5f2d5a_7e
github-branch-source:1703.vd5a_2b_29c6cdc
gradle:2.12
gson-api:2.11.0-41.v019fcf6125dc
handlebars:3.0.8
handy-uri-templates-2-api:2.1.8-30.v7e777411b_148
htmlpublisher:1.36
instance-identity:185.v303dc7c645f9
ionicons-api:74.v93d5eb_813d5f
jackson2-api:2.17.0-379.v02de8ec9f64c
jacoco:3.3.6
jakarta-activation-api:2.1.3-1
jakarta-mail-api:2.1.3-1
javadoc:280.v050b_5c849f69
javax-activation-api:1.2.0-7
javax-mail-api:1.6.2-10
jaxb:2.3.9-1
jdk-tool:80.v8a_dee33ed6f0
jenkins-design-language:1.27.14
jjwt-api:0.11.5-112.ve82dfb_224b_a_d
jnr-posix-api:3.1.19-2
job-restrictions:0.8
joda-time-api:2.12.7-29.v5a_b_e3a_82269a_
jquery:1.12.4-1
jquery-detached:1.2.1
jquery3-api:3.7.1-2
jsch:0.2.16-86.v42e010d9484b_
json-api:20240303-41.v94e11e6de726
json-path-api:2.9.0-58.v62e3e85b_a_655
junit:1284.vf75d778f98c5
kubernetes:4285.v50ed5f624918
kubernetes-client-api:6.10.0-240.v57880ce8b_0b_2
kubernetes-credentials:189.v90a_488b_d1d65
ldap:725.v3cb_b_711b_1a_ef
lockable-resources:1255.vf48745da_35d0
mailer:472.vf7c289a_4b_420
mapdb-api:1.0.9-40.v58107308b_7a_7
mask-passwords:173.v6a_077a_291eb_5
matrix-auth:3.2.2
matrix-project:832.va_66e270d2946
maven-plugin:3.23
mercurial:1260.vdfb_723cdcc81
metrics:4.2.21-451.vd51df8df52ec
mina-sshd-api-common:2.13.1-117.v2f1a_b_66ff91d
mina-sshd-api-core:2.13.1-117.v2f1a_b_66ff91d
momentjs:1.1.1
multiple-scms:0.8
okhttp-api:4.11.0-172.vda_da_1feeb_c6e
pam-auth:1.11
parameter-separator:166.vd0120849b_386
parameterized-trigger:806.vf6fff3e28c3e
pipeline-build-step:540.vb_e8849e1a_b_d8
pipeline-github-lib:42.v0739460cda_c4
pipeline-graph-analysis:216.vfd8b_ece330ca_
pipeline-groovy-lib:730.ve57b_34648c63
pipeline-input-step:495.ve9c153f6067b_
pipeline-milestone-step:119.vdfdc43fc3b_9a_
pipeline-model-api:2.2205.vc9522a_9d5711
pipeline-model-declarative-agent:1.1.1
pipeline-model-definition:2.2133.ve46a_6113dfc3
pipeline-model-extensions:2.2205.vc9522a_9d5711
pipeline-rest-api:2.34
pipeline-stage-step:312.v8cd10304c27a_
pipeline-stage-tags-metadata:2.2205.vc9522a_9d5711
pipeline-stage-view:2.34
plain-credentials:183.va_de8f1dd5a_2b_
plugin-util-api:4.1.0
popper-api:1.16.1-3
popper2-api:2.11.6-5
port-allocator:1.10
prism-api:1.29.0-15
pubsub-light:1.18
resource-disposer:0.23
run-condition:1.7
scm-api:696.v778d637b_a_762
script-security:1341.va_2819b_414686
snakeyaml-api:2.2-121.v5a_68b_9300b_d4
sonar:2.17.2
sse-gateway:1.27
ssh-credentials:343.v884f71d78167
ssh-slaves:2.973.v0fa_8c0dea_f9f
sshd:3.330.vc866a_8389b_58
structs:338.v848422169819
subversion:1275.va_7b_014f3fc2c
thinBackup:2.1.1
timestamper:1.27
token-macro:400.v35420b_922dcb_
trilead-api:2.147.vb_73cc728a_32e
variant:60.v7290fc0eb_b_cd
windows-slaves:1.8.1
workflow-aggregator:596.v8c21c963d92d
workflow-api:1332.vc21122317a_8e
workflow-basic-steps:1058.vcb_fc1e3a_21a_9
workflow-cps:3922.va_f73b_7c4246b_
workflow-cps-global-lib:609.vd95673f149b_b
workflow-durable-task-step:1364.v2fd76fb_6fd41
workflow-job:1436.vfa_244484591f
workflow-multibranch:795.ve0cb_1f45ca_9a_
workflow-scm-step:427.v4ca_6512e7df1
workflow-step-api:678.v3ee58b_469476
workflow-support:920.v59f71ce16f04
ws-cleanup:0.46

Do the files in the mounted volume have the x-bit set?
Are the files really mounted. Maybe add a
ls -la /var/jenkins_home/jdk/zulu17/bin to the script to see if things look ok.

I second @mawinter69 suggestion to check if the java binary is executable.

I would add this to your test job:

/var/jenkins_home/jdk/zulu17/bin/java -version

This should prove that the binary is indeed executable.

An other potential issue is that modern shells have caches for PATH resolution and they might need a kick in the tires to update that. With bash the command is rehash, so you might need to try this as part of the installer logic, or do it as an early step in your pipeline.

It is available in Jenkins Controller, but not in the agents that it creates for jobs, how do I make it available there? I’m using helm install method.

edit:
solved by adding volume mount for agent in values.yaml:

agent:
  volumes:
  - type: HostPath
    hostPath: /k3s-data/pvc-2e30af7c-b1a4-4dbd-aa20-a6f3a2503418_jenkins_jenkins/jdk
    mountPath: /var/jenkins_home/jdk