Upgrade Notes

git-lfs removed from the default Linux agent image

Starting with this release, the default CloudBees CI Linux agent image no longer includes 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 assets tracked with git-lfs).

  • Windows agent images are not affected.

How to prepare:

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

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

  • If you need git-lfs, you must opt into an alternative image. For more information, refer to Opt in to the Git LFS agent image.


Support for Java 25

Starting with the 2.580.2.38429 release, images for CloudBees CI on modern cloud platforms and CloudBees CI on traditional platforms use Java 25 by default. For more information, refer to Migrate to Java 25 for CloudBees CI on modern cloud platforms or Migrate to Java 25 for CloudBees CI on traditional platforms.


Java 25 support for Windows MSI, RPM, and SUSE installers

The Windows MSI installer’s embedded Java runtime has been updated to Java 25 (Temurin). RPM and SUSE installers don’t bundle a runtime; their startup scripts now prefer an installed Java 25 over Java 21 when locating a runtime to use. Together, these changes bring Java 25 support to all three installer types.


Adjustments to packaging status of CloudBees Assurance Program plugins

The categorization of CloudBees Assurance Program (CAP) plugins was reviewed across operations center and controller server types, for both CloudBees CI on modern cloud platforms and CloudBees CI on traditional platforms.

  • Some plugins were added to, or removed from, the setup wizard shown in freshly started servers. Setup wizard categories were also adjusted, as were the default selections. None of these changes affect existing servers or servers provisioned using a CasC bundle.

  • Some plugins were moved between the mandatory versus optional scopes in one or more server types. Mandatory plugins are always installed when the server starts (with or without CasC); they may be disabled if you are confident they are not needed, but may not be uninstalled. Optional plugins can be installed or uninstalled according to your needs. If you are using CasC, optional plugins should be explicitly listed (unless they are included as a transitive dependency of a listed plugin). These changes do not affect existing servers, except in the case of an optional-to-mandatory switch, in which case the plugin will be installed during upgrade if it was not already.

    These changes cover only plugins with significant user features in and of themselves. There are a number of other plugins which exist solely to provide APIs to feature plugins (either with no visible functionality, or functionality such as configuration options which are useless on their own). In some cases, these API-type plugins were moved between mandatory and optional categories. These need not be listed in plugins.yaml for CasC users. In some cases, these plugins were also removed from CAP in some server types and may be uninstalled when unused.

    Table 1. Plugins moved between mandatory and optional scopes
    Plugin Server types Platforms New status

    CloudBees Backup
    (infradna-backup)

    Operations center

    CloudBees CI on modern cloud platforms

    Optional

    CloudBees High Availability (Active/Passive) Management
    (cloudbees-ha)

    Operations center

    CloudBees CI on traditional platforms

    Optional

    CloudBees Monitoring
    (cloudbees-monitoring)

    Operations center

    All

    Optional

    CloudBees Plugin Usage Analyzer
    (cloudbees-plugin-usage)

    All

    All

    Optional

    CloudBees Software Delivery Automation Common
    (cloudbees-platform-common)

    All

    All

    Optional

    CloudBees Support
    (cloudbees-support)

    Client controllers

    CloudBees CI on traditional platforms

    Mandatory

    CloudBees Update Center
    (cloudbees-update-center-plugin)

    Operations center

    CloudBees CI on modern cloud platforms

    Optional

    Command Agent Launcher
    (command-launcher)

    All

    All

    Optional

    Operations Center Monitoring
    (operations-center-monitoring)

    Operations center

    CloudBees CI on modern cloud platforms

    Optional

    Operations Center Server Cluster Operations
    (operations-center-clusterops)

    Operations center

    CloudBees CI on modern cloud platforms

    Optional

    Operations Center Update Center
    (operations-center-updatecenter)

    Operations center

    CloudBees CI on modern cloud platforms

    Optional

    Oracle Java SE Development Kit Installer
    (jdk-tool)

    All

    All

    Optional

    Pipeline: Basic Steps
    (workflow-basic-steps)

    Managed controllers

    CloudBees CI on modern cloud platforms

    Mandatory

    Pipeline: Stage Step
    (pipeline-stage-step)

    Managed controllers

    CloudBees CI on modern cloud platforms

    Optional


Operations center CloudBees Assurance Program plugin changes since 2.580.1.38223

The following plugins have been removed from the operations center CloudBees Assurance Program since 2.580.1.38223:

  • Elasticsearch Reporter (esr)

  • Elasticsearch Reporter Configuration (esr-config)

  • Elasticsearch Reporter Feeder (esr-feeder)

  • Elasticsearch Reporter Reporter (esr-reporter)

  • CloudBees Nodes Plus Plugin (cloudbees-nodes-plus)

  • Operations Center Elasticsearch Provider (operations-center-elasticsearch-provider)

  • Dev Tools Symbols API Plugin (oss-symbols-api)

  • Authentication Tokens API Plugin (authentication-tokens)

  • Config File Provider Plugin (config-file-provider)

  • Durable Task Plugin (durable-task)

  • Google Compute Engine Plugin (google-compute-engine)

  • Google OAuth Credentials plugin (google-oauth-plugin)

  • Javadoc Plugin (javadoc)

  • Jenkins JSch dependency plugin (jsch)

  • OAuth Credentials plugin (oauth-credentials)

  • SSH Agent Plugin (ssh-agent)

  • Unique ID Library Plugin (unique-id)


Controller CloudBees Assurance Program plugin changes since 2.580.1.38223

The following plugins have been removed from the controller CloudBees Assurance Program since 2.580.1.38223:

  • Elasticsearch Reporter Configuration (esr-config)

  • Elasticsearch Reporter Reporter (esr-reporter)

  • CloudBees Amazon AWS CLI Plugin (cloudbees-aws-cli)

  • CloudBees OpenShift CLI Plugin (openshift-cli)

  • Docker Commons Plugin (docker-commons)

  • CloudBees Docker Hub/Registry Notification (dockerhub-notification)

  • Favorite (favorite)


New Features

None.

Feature Enhancements

New gitCommit field for Configuration as Code bundle traceability

The CasC Controller Bundle Service can now optionally record the Git commit each bundle came from in a new gitCommit field, stored separately from the Configuration as Code (CasC) bundle’s existing version. This enables tracing a bundle back to the exact change in source control. Enabling this feature does not change how bundle versions are calculated or how updates are detected.

The following UI elements now display the bundle version, Git commit, and reload timestamp:

  • Bundle reload administrative monitors

  • Bundle reload page

  • Bundle log page


CasC bundle reload notifications now show the version and reload time

When a CasC bundle is reloaded, the notification shown in Manage Jenkins now includes the bundle version that was reloaded (or that failed to reload) and the date and time the reload completed. This makes it easier to confirm exactly which change was applied, especially when reloads happen in quick succession. On controllers running in High Availability (HA) mode, this information is consistent across all replicas.


Better state and nonce handling in SSO sign-in

To better comply with an OpenID Connect (OIDC) specification requirement, a controller connected to the operations center now retains only secure hashes of the state and nonce fields during an SSO redirect, instead of the original values. Fine-grained logging is also available to more clearly track SSO failures, such as those caused by failing to use -Dcom.cloudbees.jenkins.replication.jetty_hazelcast.Integrator.tolerateNonStickySessions=true in an HA controller without sticky sessions.


New Jenkins OAuth client credential for machine-to-machine authentication

You can now create a Jenkins OAuth client credential that uses the client_credentials grant to authenticate API requests as a Jenkins user, with no sign-in required. For more information, refer to Bind an OAuth client credential to a user.


Consolidate checkout directories for libraries in HA controllers

Previously, Pipeline Groovy library Git repositories were checked out to /var/jenkins/workspace/$jobname@libs/$nameHash directories. When using the same library in many jobs, for example when using Multibranch Pipeline with many branches, this could lead to many copies of the same library being checked out, ultimately filling up the temporary volume and crashing a replica in an HA controller. Now /var/jenkins/libraries/$definitionHash is used regardless of the job requesting the library, except when the library step is used with the retriever argument.


OKHttp plugin no longer logs verbose warnings when using a proxy to connect to HTTPS servers

The OKHttp plugin (okhttp-api) previously emitted a WARNING log entry for every attempted connection to an HTTPS server through a proxy that required authentication. You can now opt into proper support for preemptive authentication by setting the plugins.okhttp-api.proxy.preemptive-auth-enabled system property to true.

Resolved Issues

Queue lock held in HA controller while checking for non-concurrent tasks

Under certain conditions, problems with Hazelcast communications in an HA controller might cause the Jenkins queue lock to be held excessively long while checking whether a non-concurrent task might be running on another replica.


Overridden workspace and build directory properties no longer persist an override

After switching an HA controller to non-HA, the controller installation continued to use the overridden workspace directory on the built-in node (used for purposes such as library checkouts), even after the system property that set the override was removed. The value now defaults correctly when no system property actively sets it.


Builds with a Stashed File parameter no longer fail on HA controllers

Pipeline jobs that use a Stashed File parameter and unstash could fail intermittently with No such saved stash on HA controllers. This happened when a build was scheduled on a replica other than the one where it was triggered. Such builds now run on the replica that received the request, so the file is always available. Base64 File parameters are unchanged and still load-balance across replicas.


Error when granting Job/Discover but not Job/Read in an HA controller

When a job was in the queue on an HA controller and the current user had Discover permissions but not Read permissions for it, the task was expected to be concealed or shown as unknown. Instead, an error was printed to the system log, and the UI could break in various ways.


Re-sign SHA-1 custom Update Center certificates with SHA-512

Red Hat Enterprise Linux (RHEL) 9 was rejecting the Update Center custom certificates because they were signed using the SHA-1 algorithm. The operations center now re-signs these SHA-1 custom Update Center certificates with SHA-512 and keeps the same keys.


CasC rejected items.yaml files larger than 3 MB

A size limit of 3 MB per file is enforced for CasC bundles, resulting in CasC rejecting any file exceeding this size. This was noticed when using the create-items HTTP API or the casc-items-create-items CLI command. You can now increase the limit by setting the following JVM system property, with the value specified in bytes: -Dcasc.yaml.max.document.size=<size-bytes>.


HTML error when validating bundles with malformed item properties

When the bundle validation endpoint was reached with a CasC bundle containing an invalid items.yaml file, an error page was displayed. The endpoint now returns a JSON result instead.


Jenkins controllers can now configure the CloudBees Unify integration

Previously, accessing the CloudBees Unify configuration page on a Jenkins controller displayed an error, preventing users from configuring the CloudBees Unify integration. This issue only affected Jenkins controllers and did not affect CloudBees CI controllers.


Better diagnosis and recovery from fatal load errors in Pipeline builds

Under special circumstances a deserialization error in an unusually formed build.xml for a Pipeline build could result in the build being presented as loaded but with nonsensical metadata, and with no log messages indicating the root cause. Now any such exception can be tracked via a FINE logger on OldDataMonitor, and the build will not be loaded at all.


Performance overhead loading unsandboxed Groovy scripts

When a plugin used a Groovy script with the sandbox option deselected, loading the script from disk unconditionally saved changes to $JENKINS_HOME/scriptApproval.xml, triggering notifications that could add further overhead, such as from the Job Config History plugin.

Known Issues

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.