Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat: add JDK25 images#2146

Merged
MarkEWaite merged 2 commits into
jenkinsci:masterfrom
lemeurherve:add-jdk25-images
Dec 29, 2025
Merged

feat: add JDK25 images#2146
MarkEWaite merged 2 commits into
jenkinsci:masterfrom
lemeurherve:add-jdk25-images

Conversation

@lemeurherve
Copy link
Copy Markdown
Member

@lemeurherve lemeurherve commented Dec 22, 2025

This PR adds JDK25 images.

Ref:

Testing done

make test

Submitter checklist

  • Make sure you are opening from a topic/feature/bugfix branch (right side) and not your main branch!
  • Ensure that the pull request title represents the desired changelog entry
  • Please describe what you did
  • Link to relevant issues in GitHub or Jira
  • Link to relevant pull requests, esp. upstream and downstream changes
  • Ensure you have provided tests that demonstrate the feature works or the issue is fixed

@lemeurherve lemeurherve marked this pull request as ready for review December 22, 2025 21:35
@lemeurherve lemeurherve requested a review from a team as a code owner December 22, 2025 21:35
Comment thread jenkins.sh Outdated
Comment thread debian/Dockerfile
@lemeurherve lemeurherve marked this pull request as draft December 23, 2025 00:06
Copy link
Copy Markdown
Contributor

@dduportal dduportal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR seems to have test failures that we don't have on the master branch. Are they JDK25 related?

@lemeurherve
Copy link
Copy Markdown
Member Author

lemeurherve commented Dec 23, 2025

This PR seems to have test failures that we don't have on the master branch. Are they JDK25 related?

They're related to the changes in this PR, hence the switch into a draft.

Preparing a report.

@MarkEWaite
Copy link
Copy Markdown
Contributor

Thanks for the pull request! I built the Java 25 Alpine container and tried to start it. Commands I used were:

make build-alpine_jdk25
docker run --rm -i -t jenkins/jenkins:2.534-jdk25

It failed with the message:

2025-12-25 15:08:35.500+0000 [id=3]     WARNING o.e.j.ee9.webapp.WebAppContext#doStart: Failed startup of context w.HostConfiguration$@75ed9710{ROOT,/,file:///var/jenkins_home/war/,false}{/var/jenkins_home                           /war}
java.nio.file.ProviderNotFoundException: Provider "jar" not found
        at java.base/java.nio.file.FileSystems.newFileSystem(Unknown Source)
        at java.base/java.nio.file.FileSystems.newFileSystem(Unknown Source)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.resource.FileSystemPool.mount(FileSystemPool.java:117)
Caused: java.lang.IllegalArgumentException: Unable to mount FileSystem from unsupported URI: jar:file:/tmp/winstone1943186170402980699.jar!/
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.resource.FileSystemPool.mount(FileSystemPool.java:136)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.resource.ResourceFactoryInternals$CompositeResourceFactory.mountIfNeeded(ResourceFactoryInternals.java:268)

I don't see that message when I run with a full Java 25 JDK (/opt/jdk-25/bin/java), so I assume the failure is related to the Java 25 modules system. I removed the jlink call for Java 25 and was able to use the resulting container image without issue.

There is a closed Jetty issue that mentions FileSystemNotFoundException:

Comment thread alpine/hotspot/Dockerfile Outdated
@timja
Copy link
Copy Markdown
Member

timja commented Dec 27, 2025

There is a closed Jetty issue that mentions FileSystemNotFoundException:

Doesn't look relevant, this seems to be it: https://stackoverflow.com/a/77115516/4951015

@lemeurherve
Copy link
Copy Markdown
Member Author

lemeurherve commented Dec 29, 2025

They're related to the changes in this PR, hence the switch into a draft.

Blocking issue #2148 resolved with #2162, and default JENKINS_VERSION updated to 2.543 (the first enabling support for Java 25) in #2163.

There is a closed Jetty issue that mentions FileSystemNotFoundException:

Doesn't look relevant, this seems to be it: https://stackoverflow.com/a/77115516/4951015

Adding jdk.zipfs like in 7a58917 isn't enough unfortunately, failing on boot with hudson.util.IncompatibleVMDetected:

Details
2025-12-29 00:12:02.487+0000 [id=3]     INFO    hudson.WebAppMain#contextInitialized: Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
2025-12-29 00:12:02.488+0000 [id=3]     SEVERE  hudson.util.BootFailure#publish: Failed to initialize Jenkins
hudson.util.IncompatibleVMDetected
        at hudson.WebAppMain.contextInitialized(WebAppMain.java:201)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.callContextInitialized(ContextHandler.java:900)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:596)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.contextInitialized(ContextHandler.java:837)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler.initialize(ServletHandler.java:743)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.startContext(ServletContextHandler.java:364)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startWebapp(WebAppContext.java:1416)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startContext(WebAppContext.java:1377)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStartInContext(ContextHandler.java:694)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStart(ContextHandler.java:678)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.doStart(ServletContextHandler.java:278)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.doStart(WebAppContext.java:584)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1636)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler.doStart(ContextHandler.java:2861)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:140)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.start(Server.java:689)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.doStart(Server.java:630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:193)
        at Jenkins Main ClassLoader//winstone.Launcher.main(Launcher.java:493)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at executable.Main.main(Main.java:335)
2025-12-29 00:12:02.570+0000 [id=3]     WARNING o.e.j.ee9.webapp.WebAppContext#doStart: Failed startup of context w.HostConfiguration$@363c4251{Jenkins v2.543,/,file:///var/jenkins_home/war/,false}{/var/jenkins_home/war}
java.lang.IllegalStateException: Jenkins.instance is missing. Read the documentation of Jenkins.getInstanceOrNull to see what you are doing wrong.
        at jenkins.model.Jenkins.get(Jenkins.java:807)
        at hudson.util.BootFailure.publish(BootFailure.java:55)
        at hudson.WebAppMain.contextInitialized(WebAppMain.java:299)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.callContextInitialized(ContextHandler.java:900)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:596)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.contextInitialized(ContextHandler.java:837)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler.initialize(ServletHandler.java:743)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.startContext(ServletContextHandler.java:364)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startWebapp(WebAppContext.java:1416)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startContext(WebAppContext.java:1377)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStartInContext(ContextHandler.java:694)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStart(ContextHandler.java:678)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.doStart(ServletContextHandler.java:278)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.doStart(WebAppContext.java:584)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1636)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler.doStart(ContextHandler.java:2861)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:140)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.start(Server.java:689)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.doStart(Server.java:630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:193)
        at Jenkins Main ClassLoader//winstone.Launcher.main(Launcher.java:493)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at executable.Main.main(Main.java:335)
2025-12-29 00:12:02.573+0000 [id=3]     INFO    org.eclipse.jetty.server.Server#doStop: Stopped oejs.Server@53311681{STOPPING}[12.1.5,sto=0]
2025-12-29 00:12:02.574+0000 [id=3]     INFO    winstone.Logger#logInternal: Jetty shutdown successfully
java.io.IOException: Failed to start Jetty
        at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:197)
        at Jenkins Main ClassLoader//winstone.Launcher.main(Launcher.java:493)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at executable.Main.main(Main.java:335)
Caused by: java.lang.IllegalStateException: Jenkins.instance is missing. Read the documentation of Jenkins.getInstanceOrNull to see what you are doing wrong.
        at jenkins.model.Jenkins.get(Jenkins.java:807)
        at hudson.util.BootFailure.publish(BootFailure.java:55)
        at hudson.WebAppMain.contextInitialized(WebAppMain.java:299)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.callContextInitialized(ContextHandler.java:900)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:596)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.contextInitialized(ContextHandler.java:837)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler.initialize(ServletHandler.java:743)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.startContext(ServletContextHandler.java:364)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startWebapp(WebAppContext.java:1416)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startContext(WebAppContext.java:1377)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStartInContext(ContextHandler.java:694)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStart(ContextHandler.java:678)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.doStart(ServletContextHandler.java:278)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.doStart(WebAppContext.java:584)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1636)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler.doStart(ContextHandler.java:2861)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:140)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.start(Server.java:689)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.doStart(Server.java:630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:193)
        ... 4 more
2025-12-29 00:12:02.575+0000 [id=3]     SEVERE  winstone.Logger#logInternal: Container startup failed
java.lang.IllegalStateException: Jenkins.instance is missing. Read the documentation of Jenkins.getInstanceOrNull to see what you are doing wrong.
        at jenkins.model.Jenkins.get(Jenkins.java:807)
        at hudson.util.BootFailure.publish(BootFailure.java:55)
        at hudson.WebAppMain.contextInitialized(WebAppMain.java:299)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.callContextInitialized(ContextHandler.java:900)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:596)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.contextInitialized(ContextHandler.java:837)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletHandler.initialize(ServletHandler.java:743)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.startContext(ServletContextHandler.java:364)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startWebapp(WebAppContext.java:1416)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.startContext(WebAppContext.java:1377)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStartInContext(ContextHandler.java:694)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler.doStart(ContextHandler.java:678)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.servlet.ServletContextHandler.doStart(ServletContextHandler.java:278)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.webapp.WebAppContext.doStart(WebAppContext.java:584)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.lambda$doStart$0(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler$ScopedContext.call(ContextHandler.java:1636)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:911)
        at Jenkins Main ClassLoader//org.eclipse.jetty.ee9.nested.ContextHandler$CoreContextHandler.doStart(ContextHandler.java:2861)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.handler.gzip.GzipHandler.doStart(GzipHandler.java:140)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:170)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.start(Server.java:689)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Handler$Abstract.doStart(Handler.java:545)
        at Jenkins Main ClassLoader//org.eclipse.jetty.server.Server.doStart(Server.java:630)
        at Jenkins Main ClassLoader//org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:92)
        at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:193)
Caused: java.io.IOException: Failed to start Jetty
        at Jenkins Main ClassLoader//winstone.Launcher.<init>(Launcher.java:197)
        at Jenkins Main ClassLoader//winstone.Launcher.main(Launcher.java:493)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at executable.Main.main(Main.java:335)

I need more time to study the method explained in https://stackoverflow.com/a/77115516/4951015 and find out what's missing.

(No error when skipping jlink altogether like in 58b0691, but we want smaller java runtime)

@dduportal
Copy link
Copy Markdown
Contributor

Is there a reason against starting with the full JDK? Yes I know we can get a few megabytes less by "generating" our own JDK. But it looks like a lot of trouble (on each JDK upgrade we have this kind of exchange) and a lot of risks (what if our tests do not cover all cases using JDK modules) while we could already provide something to the end users?

I would prefer having the discussion at SIG platform level. I believe we should automate testing a "stripped" JDK way earlier than in the Docker image which is only packaging. If ci.jio could run some ATH branches which runs with stripped (and documented) JDKs, that would feel safer and easier to "only" reproduce here.

Thoughts?

@MarkEWaite
Copy link
Copy Markdown
Contributor

Is there a reason against starting with the full JDK? Yes I know we can get a few megabytes less by "generating" our own JDK. But it looks like a lot of trouble (on each JDK upgrade we have this kind of exchange) and a lot of risks (what if our tests do not cover all cases using JDK modules) while we could already provide something to the end users?

I think that it is a good idea to accept the full JDK 25 in the short term.

I would prefer having the discussion at SIG platform level. I believe we should automate testing a "stripped" JDK way earlier than in the Docker image which is only packaging. If ci.jio could run some ATH branches which runs with stripped (and documented) JDKs, that would feel safer and easier to "only" reproduce here.

I like that idea very much!

@lemeurherve
Copy link
Copy Markdown
Member Author

lemeurherve commented Dec 29, 2025

+1, and that would allow us to ship a Weekly release with JDK25 before the next LTS.

@lemeurherve lemeurherve marked this pull request as ready for review December 29, 2025 10:58
@lemeurherve lemeurherve requested review from a team, dduportal and timja December 29, 2025 10:58
@lemeurherveCB
Copy link
Copy Markdown
Contributor

Overall build duration increased from 22 min to 25 min with this additional JDK, not bad 🙂

@MarkEWaite MarkEWaite merged commit b8051c8 into jenkinsci:master Dec 29, 2025
16 checks passed
@lemeurherve lemeurherve deleted the add-jdk25-images branch December 29, 2025 20:39
@lemeurherve lemeurherve added release-version:2.541.1 Indicate that this has been or will be delivered in this docker controller LTS release. release-version:2.544 Indicate that this has been or will be delivered in this docker controller Weekly release. labels Jan 8, 2026
MarkEWaite added a commit to MarkEWaite/jenkins.io that referenced this pull request Jan 14, 2026
@lemeurherve lemeurherve added the into-lts This should be filed against an LTS branch label Jan 14, 2026
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
lemeurherve added a commit that referenced this pull request Jan 19, 2026
* feat: add JDK25 images

* no jlink for now
krisstern added a commit to jenkins-infra/jenkins.io that referenced this pull request Jan 20, 2026
* Backported changes added to 2.541.1 chaneglog

* Add changes through 2.534

* Spell Red Hat correctly in weekly changelog

* Better phrasing for GPG signing key, URL fixes

* More LTS changelog refinements

* Add banner for new GPG signing key for Linux packages

* Add content security policy section to upgrade guide

Also extends the RPM changes with one more sentence

* Add Windows Server 2022 container images to changelog and upgrade guide

Refer to pull request:

* jenkinsci/docker#2170

Addresses checklist items in comment:

* jenkinsci/docker#2167 (comment)

* Add JDK 25 container images to weekly and LTS changelog

Refer to pull requests:

* jenkinsci/docker#2146
* jenkinsci/docker-ssh-agent#549
* jenkinsci/docker-agents#1061

Address checklist items in comment:

* jenkinsci/docker#2121 (comment)

* Fix YAML syntax errors

* Add more details on the repository signing update

#8690 (comment)

* Use rpm-stable URL in LTS changelog

#8690 (comment)

* Controller only drops support for Windows Server 2019

#8690 (comment)

* Windows server container is controller only

Updated with current state for comment:

#8690 (comment)

May change based on the results of discussions in:

* jenkinsci/docker#2197

* Windows Server 2022 added to 2.541.1

* Windows Server 2019 containers still available for weekly

* Windows container images in the upgrade guide

* Use correct pull request for Windows Server Core 2022

* Simplify the Java 25 addition to the weekly changelog

* Do not mention agents in upgrade guide

* fix: debug syntax error(s) in content/_data/changelogs/lts.yml

---------

Co-authored-by: Kris Stern <[email protected]>
Co-authored-by: Kris Stern <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement into-lts This should be filed against an LTS branch jdk25 linux release-version:2.541.1 Indicate that this has been or will be delivered in this docker controller LTS release. release-version:2.544 Indicate that this has been or will be delivered in this docker controller Weekly release. windows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants