Upgrade Notes

App Password credentials are no longer supported for Bitbucket Cloud

Atlassian is deprecating App Passwords for Bitbucket Cloud, with brownouts already in effect ahead of full removal on July 28, 2026. Starting with version 937.3.4, the Bitbucket Branch Source plugin (cloudbees-bitbucket-branch-source) no longer accepts App Password credentials for Bitbucket Cloud. Atlassian recommends migrating to API tokens. To configure the replacement credential in your controller, refer to the Bitbucket Branch Source plugin user guide.


git-lfs is now installed from base image packages

To streamline the build process, the git-lfs binary is now installed from UBI packages instead of directly from upstream sources. Future updates to git-lfs will be limited to those provided by Red Hat.


jenkins-agent ConfigMap removed from the Helm chart

As noted in the CloudBees CI 2.462.3.3 release notes, the jenkins-agent ConfigMap has been removed from the CloudBees CI Helm chart. You must migrate its configuration to the new idiom provided by the Kubernetes plugin (kubernetes):

  1. To inject the agent, use one of the following methods:

    • Select Inject Jenkins agent in agent container.

    • Add agentInjection: true to the podTemplate step.

    • Specify agentInjection true in Declarative pipelines.

  2. Remove volume mounting of the jenkins-agent ConfigMap, and the associated command (the new option injects the required command and arguments automatically).


New Features

None.

Feature Enhancements

OpenID Connect authentication for service accounts

CloudBees CI now supports OpenID Connect (OIDC) authentication for service accounts, in addition to the static token authentication introduced in CloudBees CI 2.541.3.36065. OIDC enables keyless, machine-to-machine authentication, eliminating the need to manage long-lived tokens. A service account can specify one or more OIDC configurations, each defining expected claims such as an issuer URL accessible to CloudBees CI. When a system presents a JSON Web Token (JWT) to authenticate, CloudBees CI verifies its signature against public keys discovered from the issuer and validates the claims. With OIDC, service accounts can authenticate from GitHub Actions, Kubernetes service accounts, or other controllers running Jenkins or CloudBees CI.


container step now supports Jenkins Remoting channel rather than WebSocket to the Kubernetes API server

When using Kubernetes agents with multiple containers in the pod, the container step (or, in Declarative syntax, using the defaultContainer option) is often used to allow sh steps to be run inside a container other than the one hosting the Jenkins agent. The traditional implementation of this system required the Jenkins controller to make a WebSocket connection to the Kubernetes API server, effectively running kubectl exec. This caused robustness issues at scale. Now you can select the Use active containers option on the Kubernetes cloud (activeContainers: true in CasC) to use an alternate implementation that passes all messages through the Jenkins Remoting channel instead of a WebSocket connection to the Kubernetes API server.

Currently, this system is only supported for Linux agents. Windows agents will continue to use the original implementation even with the option selected.


${workloadKind} macro now available in controller provisioning YAML snippets

Custom YAML snippets for controller provisioning can now use the ${workloadKind} macro, which resolves to StatefulSet or Deployment depending on whether High Availability (HA) is enabled. This eliminates the need to hardcode the workload type, allowing a single snippet to work correctly across both HA and non-HA controllers.


The operations center now has permission to create HTTPRoutes when the Gateway API is available

Previously, the Kubernetes Role-Based Access Control (RBAC) permissions for the operations center only included permission to create HTTPRoutes if the operations center was configured with a gateway. Now the permissions are granted if the Gateway API CRDs are available, regardless of the installation mode.


Console Output records the user who restarts a build from a checkpoint

When restarting a build from a checkpoint, the user who initiated the restart is now displayed in the Console Output for audit traceability.

Resolved Issues

Hibernation proxy and queue endpoints no longer return HTTP 401 errors when clients send Authorization headers

When hibernating managed controllers, requests to proxy or queue endpoints that included an Authorization header (as Jenkins sends for most HTTP calls) were incorrectly rejected with an HTTP 401 error before reaching the managed controller. This affected all proxy and queue endpoints, not only installations using Hibernation.Protected=true. This release resolves the issue by disabling proactive Kubernetes authentication on routes that do not require it, so Authorization headers are now passed through transparently to the managed controller.


Exceptions are no longer logged after deleting upstream or downstream builds when using the build step

When using the build step to trigger a downstream build from an upstream build, if either the upstream or downstream build was deleted after a controller restart, an exception is no longer printed to the system log.


Unique user count in activity reports no longer double-counts users when identity records span the query window

Activity reports no longer double-count unique users when a user’s identity bridge record (for example, an email change) falls outside the requested time window.


Remote procedure calls are now correctly aborted when a controller shuts down

Previously, if a controller shut down while handling a remote procedure call (RPC), such as a remote artifact copy, the call was not aborted correctly and hung until the timeout was reached. RPCs are now canceled, allowing the caller to receive a response when the controller is running again.


Offline idle EC2 agents are now deleted after the idle termination period

Reconnect logic was interfering with offline idle agents, preventing the idle termination logic from deleting them. EC2 agents that go offline with no builds assigned are now deleted after the idle termination period has been reached.


Credentials dropdown thread leak and blacklisting resolved in the Bitbucket Branch Source plugin

This release resolves a thread leak in the Bitbucket Branch Source plugin (cloudbees-bitbucket-branch-source) Credentials dropdown that caused OutOfMemoryError on instances with large credential stores. It also removes permanent credential blacklisting that caused credentials to disappear from the Credentials dropdown after transient timeouts until a controller restart.


The remoteCopyArtifact step now provides more detailed error messages

If a remoteCopyArtifact step fails, the error message now includes more detail about why the step failed.


Google Cloud Storage workspace cache cleanup deleted caches belonging to other controllers when sharing a bucket

When two or more controllers were configured to use the CloudBees Cache Step plugin (cloudbees-cache-step) with the same Google Cloud Storage (GCS) bucket for workspace caching with different prefixes, the automated cleanup process on each controller listed all objects in the bucket, regardless of prefix. Any object whose key did not match the current controller’s expected prefix was treated as orphaned and deleted, including active caches written by other controllers. This caused cache misses on every build following a cleanup pass.

As a workaround for CloudBees Cache Step plugin version 363 or earlier, configure each controller to use its own dedicated GCS bucket.


SSO Relay check no longer fails when an HTTP proxy is configured

Previously, when SSO Relay was enabled and an HTTP proxy was configured, the SSO Relay check could fail because the internal relay request was routed through the proxy. This in-cluster call now bypasses the proxy, so the check works regardless of proxy configuration.


Configuration as Code bundle validation now correctly handles directory references in bundle.yaml file

In Configuration as Code (CasC), bundles can reference entire directories instead of listing individual YAML files. Previously, the bundle validation endpoint incorrectly reported these bundles as invalid when a directory was referenced in the jcasc, rbac, items, or plugins sections of the bundle.yaml file, even though the bundles loaded correctly at runtime. Bundle validation now correctly handles directory references across all supported bundle sections.


Restart from this checkpoint no longer queues duplicate builds on rapid clicks

Selecting Restart from this checkpoint multiple times before the server responded would queue multiple builds. The button now disables immediately on selection and re-enables if the request fails, preventing accidental duplicate restarts.

Known Issues

git-lfs removed from the default Linux agent image

Starting with the September or October 2026 CloudBees CI release, the default CloudBees CI Linux agent image will no longer include git-lfs. This change addresses frequent false-positive vulnerability scan findings caused by git-lfs in the default image.

Who is affected:

  • Linux agent users whose pipelines depend on git-lfs (for example, to pull or push Git LFS-tracked assets).

  • Windows agent images are not affected.

How to prepare:

  • No action is required if your pipelines do not use git-lfs.

  • Identify whether any of your pipelines depend on git-lfs.

  • If you need git-lfs, you will need to opt into an alternative image when this change is released. Instructions will be provided in the release documentation.


Java 25 becomes the default runtime for CloudBees CI Docker images

Starting with the October 2026 release, all CloudBees CI Docker images without a suffix will use Java 25 as the default runtime (equivalent to using the -jdk25 suffix). A Java 21 fallback image will remain available if you are not yet ready to migrate (equivalent to using the -jdk21 suffix). No action is required before the October 2026 release, but you should review your Java version requirements ahead of the upgrade. An administrative monitor has been added to notify you of this upcoming change.


Duplicate plugins in the Operations center Plugin Manager UI

When you search for a specific plugin under the Available tab in the Operations center Plugin Manager, the search results show duplicate entries for the plugin.