Migrate from CloudBees CI to open-source Jenkins

A planning guide for teams moving CloudBees CI controllers to community Jenkins: what moves cleanly, what needs rework, the migration sequence, and what drives effort and risk.

On this page

How do you migrate from CloudBees CI to open-source Jenkins without losing your pipelines?

Most of your pipelines carry over. Your Jenkinsfiles live in source control and use the same Declarative or Scripted Pipeline syntax that open-source Jenkins runs, so the build logic moves with the repository. What does not carry over is everything CloudBees adds around the controllers: the operations center, centrally managed controller settings, role-based access control, and any CloudBees-only plugins. Those need to be rebuilt with open-source equivalents before you cut over. Start by inventorying every controller and listing each installed plugin, marking the ones that exist only in the CloudBees distribution, because those are where pipelines break silently.

A platform engineering or DevOps team usually owns the move, and many organizations bring in an implementation partner for the controller design, the Configuration as Code work and the cutover plan. The work splits into one-time and recurring costs. The one-time costs are inventory, rebuilding access control, migrating secrets, testing pipelines on new controllers and running both platforms in parallel. Recurring costs are the infrastructure you run, plugin and Jenkins upgrades, and support. Ask any partner for a fixed scope that names each controller, each plugin replacement and each pipeline class in writing before work starts. Jenkins itself is distributed under the MIT License, according to the *LICENSE.txt* file in the jenkinsci/jenkins repository, so the software carries no license fee. Confirm your CloudBees license end date with your account team early, since it sets the deadline for the cutover.

Plan for the risks that hosted CI and CloudBees contracts hide. Credentials are the hardest item: CI secrets generally cannot be exported from one platform and imported into another, so you will recreate them from your original sources or a secrets manager, and you should rotate any value you cannot trace. Export build history and artifacts before the license ends, since retention periods on hosted services are short and CloudBees storage will not be available indefinitely. Run a parallel pilot on one team's controller, compare build results, and confirm that the Jenkins plugins you chose are supported on the Java and Jenkins LTS versions you plan to run. Your readiness checklist should name the owner for each controller, the rollback path and the date the CloudBees license stops.

Which CloudBees CI capabilities map to open-source Jenkins, and which need rework

This table maps the main CloudBees CI capabilities to their open-source Jenkins equivalents and marks each as clean, needs rework or gap. Use it to scope the migration work before you commit to a plan, and confirm every CloudBees-only feature against the vendor's current feature list.

CapabilityOpen-source Jenkins equivalentNotes
ControllersJenkins controllers run as standalone instances, one per team or projectNeeds rework: each controller's $JENKINS_HOME holds configuration, plugins and secrets that must be backed up and rebuilt
Pipelines and JenkinsfileDeclarative or Scripted Jenkinsfile committed to source controlClean: Jenkinsfiles are plain Jenkins Pipeline code and carry over without change
PluginsCommunity plugins from the Jenkins plugin index, installed through the plugin managerNeeds rework: inventory every CloudBees-only plugin and find or replace each one before cutover
Role-based access controlMatrix or role-based authorization plugins, with Configuration as Code for declared settingsNeeds rework: rebuild roles and group mappings by hand and confirm they match the old permissions
Operations centerNo direct equivalent; use Configuration as Code, the official Helm chart and a controller-per-team patternGap: central management of many controllers must be rebuilt as tooling and governance
Active/active high availabilityPrimary and backup controller behind a proxy such as HAProxy or F5Gap: failover is not active/active, so builds in flight can stop during a switch
Kubernetes agentsKubernetes plugin provisions ephemeral build agents as podsNeeds rework: pod templates, resource limits and cluster permissions must be rewritten
SecretsCredentials stored on the controller, or pulled from an external secrets managerNeeds rework: CloudBees secrets rarely export, so re-enter them from source systems and rotate them
ScalingDedicated build agents and horizontal growth by adding controllersClean for workloads that already use agents; needs planning for shared controllers

How to inventory CloudBees-only plugins before you commit

Start with a complete plugin inventory on every controller, because the installed plugin set decides which CloudBees features you must replace and which open-source Jenkins plugins you can install directly. Export the list from each controller's plugin manager (Manage Jenkins, then Plugins, then Installed plugins) and record each plugin's name, version, enabled state and whether any job, pipeline or shared library uses it. Sort every entry into one of three buckets: open-source plugin available on the Jenkins plugin site, CloudBees-only (supplied or supported only through CloudBees CI), or unused. Confirm the CloudBees-only list with CloudBees before you rely on it, because the boundary between distributions can change between releases. Jenkins is MIT-licensed and its plugins are community-contributed, so an open-source counterpart often exists, but check its availability against the Jenkins version you plan to run.

The Jenkins LTS 2.580.1 release, dated September 30, 2026 in the Jenkins LTS changelog, stopped bundling several plugins, including the bouncycastle API, SSH server and JUnit plugins. If a controller relies on any of them, an upgrade can break pipelines that previously worked without an explicit install. Add these three plugins to the inventory as required open-source dependencies, install them through the plugin manager and record their versions in your controller configuration. Then test a pipeline that publishes JUnit test results and one that uses SSH steps or SSH agents on a staging controller before any production cutover. Treat a failed build on staging as an inventory gap, not as a reason to skip the check.

What data, secrets and integrations move, and what must be re-entered

Jenkins migrations split into items that move as files, items that must be exported or rebuilt, and items that cannot be exported at all. Sorting each item into one of these groups before cutover shows where the effort sits. The controller's $JENKINS_HOME directory is the main backup target, because it holds configuration, plugins and secrets.

Jenkinsfiles in source control

Pipelines defined as a Jenkinsfile in the project's repository move with the code and need little or no change. Check that each Jenkinsfile avoids CloudBees-only steps, shared library calls that exist only on the CloudBees side, and hard-coded controller hostnames. Confirm that the shared pipeline libraries they import are also copied to the new controllers.

Job and folder configuration

Job definitions, folders, views and global settings are stored on the controller, not in Git, so they do not move automatically. Export them with the Configuration as Code plugin where the settings allow it, or rebuild the rest by hand. Record each job's owner and purpose during the export, since some jobs may no longer be needed.

Credentials and secrets

CloudBees and Jenkins do not expose stored credential values for export through the normal interface, so plan on re-entering each one. Where possible, source them from a secrets manager at runtime instead of storing them again on the controller. Keep a current inventory of credential IDs and their consumers so that no pipeline fails at the first run after cutover.

Build history and artifacts

Build logs, test results and archived artifacts stay on the CloudBees controller and are not carried across by a configuration export. Decide which history must be kept for audit or release traceability, then copy it out before the license end date. Store the copies in a system with its own retention rules, so history survives the controller being retired.

Backup of $JENKINS_HOME

The Jenkins scaling guide places all configuration, plugins and secrets in $JENKINS_HOME on the controller. Back up that directory before any change, and test a restore on a separate host. Treat the backup as sensitive, because it contains the stored secrets and the key material needed to decrypt them.

Webhooks and agent connections

SCM webhooks, agent connections and the Kubernetes cloud settings point at specific controller URLs and identities. Each one has to be re-created or repointed to the new controller, and the agents must trust the new controller's endpoint. Test a webhook delivery and a build on every agent type before you switch the source repositories over.

The migration sequence from inventory to decommission

The sequence moves controllers from CloudBees CI to community Jenkins one stage at a time, so each stage produces evidence that the next one can rely on. Teams finish with a documented cutover, a rollback path and a retained record before the CloudBees license ends.

  1. Inventory plugins, jobs, credentials and roles

    Platform engineering leads the inventory with the CloudBees administrators and a sample of team leads. List every installed plugin on each controller, flag the ones that exist only in the CloudBees distribution, and count jobs, folders and pipelines per controller. Export the credential IDs (not values) and map each role-based access control grant to a team or group. The output is a signed-off inventory with a gap list of CloudBees-only features and the open-source plugin or design chosen to replace each one. Confirm plugin availability against the current Jenkins plugin index before you commit.

  2. Pilot Configuration as Code on one non-critical controller

    Choose one controller that serves a low-risk team and rebuild it on open-source Jenkins with Configuration as Code. Store the YAML in version control, and state the plugin list in the image or Helm values because the Configuration as Code plugin does not install plugins itself. Re-create authorization with open-source plugins and confirm that each team sees only its own folders. Re-enter credentials through your secrets manager rather than copying old values, since CloudBees does not let you export them. The pilot is done when the team's Jenkinsfiles run green and an access review matches the inventory.

  3. Run both controllers in parallel on the same Jenkinsfiles

    Keep the CloudBees controller and the open-source controller building the same repositories for a period agreed by the migration owner. Jenkinsfiles stay in source control and are not rewritten for the move, so differences show up as build results rather than as code edits. Compare build outcomes, test reports, artifact contents and agent behavior, and log every difference with a root cause. Also check that build artifacts are exported from CloudBees before retention limits remove them. The output is a difference log that shows no unexplained failures for the pilot teams.

  4. Cut over webhooks with a tested rollback plan

    Move one team at a time by switching the webhook endpoint from the CloudBees controller to the open-source controller in the source forge. Before the switch, write down the exact webhook, credential and agent settings to reverse, and rehearse the reversal on the pilot. Keep the CloudBees controller in read-only or idle mode for the cutover window so that a rollback needs only a webhook change. Watch the first production builds and deployment jobs, including any that publish to registries or environments. The cutover is complete when each team's builds and deployments run on the new controller and the rollback has not been needed.

  5. Decommission with a final export and retained evidence

    Once all teams are cut over, take a final export of job configurations, build logs, test reports and artifacts that your retention or audit rules require, and store them in your own archive. Record the inventory, the Configuration as Code files, the access review and the difference log as retained evidence for your compliance team. Shut down the CloudBees controllers, revoke their credentials, and remove their network routes. Plan the license end date with your procurement team now, because the decommission date should follow the contract end and not the other way around. Confirm the end date, notice terms and any support obligations in writing with CloudBees.

Running both platforms in parallel and choosing a cutover pattern

This pattern moves one controller at a time. Each controller is rebuilt on open-source Jenkins, its jobs and Jenkinsfiles are verified, and only then is it switched over while the other controllers keep running on CloudBees CI. The Jenkins scaling guide describes a primary and backup controller arrangement in which a proxy such as HAProxy or F5 routes traffic to the backup if the primary fails, and the same routing layer can point a single team's hostname at the new controller during a cutover window.

  • Parallel running: CloudBees CI and open-source controllers run side by side until every controller has passed verification.
  • Rollback: Keep the CloudBees CI controller and its $JENKINS_HOME intact until the new controller has run real builds, then point the proxy back if needed.
  • Downtime: Only the controller being moved is unavailable during its window, and you can schedule each window around release calendars.
  • Routing: Use HAProxy or F5 to switch traffic per controller, and confirm that webhooks from your forge follow the switch.
  • Cost driver: Each controller you run in parallel adds infrastructure and license time until retirement.

Before each switch, confirm with your CloudBees account team the exact end date of the license for that controller and check that its plugins have open-source equivalents.

What drives migration cost and duration, and how to reduce each driver

This table lists the factors that set how much effort a move from CloudBees CI to open-source Jenkins takes, why each one matters and what to do about it. Read it before requesting a quote, because the same driver can add weeks of work or almost none depending on how your estate is organized.

DriverWhy it changes cost or effortHow to keep it down
Number of controllersEach controller has its own $JENKINS_HOME with configuration, plugins and secrets to back up and re-create, so effort grows with the controller count.Inventory controllers first, retire unused ones and consolidate near-identical controllers before migration starts.
CloudBees-only plugin countEvery plugin that exists only in the CloudBees distribution needs an open-source replacement, a rewrite or a decision to drop it.Map each plugin to an open-source equivalent early, and confirm with the plugin maintainers which ones are unmaintained.
RBAC complexityFolder-level roles, groups and matrix permissions configured in the operations center must be rebuilt in open-source authorization plugins and Configuration as Code files.Simplify roles into a small set of standard groups and document the mapping from each existing role to its replacement.
Credential volumeSecrets cannot be exported from CloudBees CI in readable form, so each credential must be re-entered or re-issued from a secrets manager.Rotate and re-issue credentials as part of the move, and remove any that no pipeline still uses.
Kubernetes agent modelAgent images, pod templates and cloud configuration must be rebuilt for the open-source Kubernetes plugin, and differences in how agents are provisioned need testing.Standardize agent images and pod templates in version control, then reuse them across controllers.
Build history retentionBuild logs and artifacts are not carried over automatically, so history you need for audit or rollback has to be exported before the license ends.Agree a retention rule with compliance and export only the records that rule requires.
Team countEach team needs onboarding, access review, pipeline validation and sign-off, and coordination grows with the number of teams.Move teams in waves, starting with the smallest or least regulated, and reuse one runbook across waves.
Testing depthPipelines must be checked against the new controllers, plugins and agents, and deeper test coverage takes longer to plan and run.Define a fixed set of pipeline smoke tests and a pass criteria list, and run the same tests on every wave.
Cost componentsInternal staff time, a fixed-scope implementation partner, infrastructure for new controllers and recurring plugin and upgrade upkeep each carry separate costs.Ask any quote to split one-time work (inventory, build, cutover) from recurring work (plugin updates, LTS upgrades, support) and to state its assumptions.

What usually goes wrong when moving CloudBees CI to Jenkins

Most failed CloudBees CI to Jenkins moves fail on a small set of predictable points: secrets, plugins, access rules, artifacts, upgrades and cutover. Each card names one failure and the check that prevents it, so the inventory and test plan can be built around them.

Assuming secrets can be exported

Credentials stored in CloudBees CI usually cannot be read back out as plain values, so a copy step that depends on exporting them will silently produce empty or missing credentials. Plan to re-enter or re-issue each secret from its source system into a secrets manager or Jenkins credentials store, and record the owner of every credential before the controller is retired. Treat the hosted CI vendors' own export limits as a reminder that secret values must be re-created, not moved.

Discovering plugin gaps late

Some pipelines depend on CloudBees-only plugins or on features that exist only in the commercial distribution. Build a list of every installed plugin on each controller, mark which ones are community plugins and which are vendor-specific, and run each job on a test controller before the cutover date. A failing step found in week one is a planning item; the same failure found on cutover day is an outage.

Rebuilding RBAC incorrectly

Role-based access control in CloudBees CI is often shaped by folders, groups and operations center policies that do not map one to one onto open-source authorization. Export the existing role assignments, decide which roles must exist in the new setup, and encode them in Configuration as Code where possible. Test each permission with a user from every team, including negative cases such as a developer who should not be able to edit production deployment jobs.

Losing artifacts after retention windows

Build artifacts and test reports stored on the CloudBees side are subject to the retention settings of that installation, and older builds may already be gone when the migration is planned. Confirm the retention policy in place today, then archive the artifacts that auditors, release managers or incident responders still need to an object store you control. Check the archived copies can be restored before the old controller is switched off.

Upgrading LTS and breaking plugins

Jenkins moves to a new LTS line on a fixed cycle, and plugins can lag behind core upgrades or stop being bundled with core. Recent LTS changes removed several bundled plugins, so an administrator who relies on them must install them explicitly. Pin the core version and plugin versions in configuration, test upgrades on a staging controller that mirrors production, and read the changelog for each LTS release before moving.

Cutting over without a rollback

A migration that turns off the CloudBees controller on the same day it starts the Jenkins controller leaves no route back when a job fails or a credential is wrong. Keep the old controller running in read-only or standby mode until the new one has passed a full release cycle, and document the switch-back steps, the owner who decides to roll back and the time window in which that decision can be made. Agree the license end date with the vendor so rollback remains possible while the contract is still active.

How the migration differs by controller count and starting point

A single controller is the simplest starting point. Most of the work is a one-time inventory of what the controller does, followed by a rebuild of its configuration on open-source Jenkins in a test environment. Because only one controller holds jobs, credentials and plugins, cutover can be planned as a single window, and the existing Jenkinsfiles usually move without structural change.

  • Plugin inventory: List every installed plugin and flag any that exist only in the CloudBees distribution or depend on CloudBees-licensed features. Confirm each remaining plugin is available from the community update center.
  • Configuration export: Everything to recreate lives in $JENKINS_HOME on the controller, so capture jobs, credentials references, system settings and plugin configuration as code where possible, using the Configuration as Code plugin with a jenkins.yaml file.
  • Agent rebuild: Recreate build agents on open-source Jenkins, for example with the Kubernetes plugin, and test them against the same toolchain images.
  • Secrets re-entry: Stored credential values cannot be read back out of the controller, so plan to re-enter them from your secrets manager or source system during the test build.
  • Cutover and rollback: Run a parallel build of representative jobs on the new controller before switching webhooks, and keep the CloudBees controller available until the rollback window closes.

Before cutover, confirm that every Jenkinsfile produces the same artifacts and test results on the new controller.

What do buyers ask about moving from CloudBees CI to Jenkins?

How much effort and cost should we expect when moving from CloudBees CI to Jenkins?

The effort depends mostly on how many controllers you run, how many CloudBees-only plugins they depend on, and how much of your governance lives in the operations center. The main cost components are internal engineering time, infrastructure for controllers and agents, plugin upkeep and upgrades, and any outside support you buy. Most of these recur after the move, because Jenkins LTS releases and plugin updates need regular attention. Ask any partner for a fixed-scope quote built from a written inventory of controllers, plugins, jobs and access rules, since that inventory is what sets the work.

How long does a migration from CloudBees CI to Jenkins take?

No duration is fixed in advance, so treat any timeline as something to agree in writing after the inventory is done. The duration is driven by the number of controllers, the count of plugins that have no open-source equivalent, the size of your shared libraries, and how many teams must test their pipelines. A small estate with mostly declarative Jenkinsfiles moves faster than one that relies on many scripted pipelines and custom credentials. Plan a parallel run period where both platforms build the same projects, so each team can confirm results before the old controller is retired.

What does our internal team need to provide during the move?

Your team needs to supply knowledge that no vendor can infer from outside. This includes an inventory of controllers, jobs, folders and plugins, the current role and permission model, the list of shared libraries and credentials, and named owners for each team's pipelines. Someone must also decide how access will be granted without the operations center, and who approves changes to the new platform. Expect your platform engineers to work with application teams to test builds, because they know which tests and deployment steps are business critical.

Can our own team do the CloudBees CI to Jenkins move without outside help?

Yes, a capable internal team can perform the move, provided it has Jenkins administration experience and time to run it alongside production work. The open-source route is documented, and the core tools are the Configuration as Code plugin, the Kubernetes plugin and the official installation guidance for Kubernetes. The harder parts are rebuilding features that CloudBees provided, keeping plugins current, and reviewing security settings. Consider outside help if your team lacks the time, the Jenkins skills or the independent review your compliance program requires.

What happens to our Jenkinsfiles and pipeline code during the move?

Your Jenkinsfiles can usually stay in the same source control repositories, because Jenkins Pipeline defines builds as code in a Jenkinsfile committed to the project's repository. Declarative and Scripted syntax both use stages and steps, so most pipeline logic moves without a rewrite. The work lies in the places where pipelines depend on CloudBees features, custom plugins or shared libraries that must be reattached. Test each pipeline on the new controller before switching traffic, and check any step that calls a CloudBees-only plugin.

What happens to our secrets and credentials when we leave CloudBees CI?

Plan for secrets to be re-entered, not exported. CI secrets generally cannot be read back out of a platform: GitHub's REST API returns Actions secret names without values, and CircleCI states that environment variable values are not readable after they are set. Jenkins stores configuration, plugins and secrets in $JENKINS_HOME on the controller, so you must back that directory up with care and plan how each credential is recreated. Many teams move credentials into a dedicated secrets manager and reference them from Jenkins, which also reduces the blast radius if a CI platform is compromised.

How should we plan the CloudBees CI license end date?

Set the license end date as the last day your teams depend on CloudBees CI, then work backward from it. Build the inventory first, run the Jenkins pilot, and schedule a parallel run long enough for each team to confirm its pipelines. Check your contract for notice periods and renewal terms, and ask your vendor to confirm them in writing, since those dates are not supplied here. Keep one controller available for read-only access to build history until your audit and retention needs are met, because hosted artifacts can expire on a limited schedule.

How DeployOpen scopes and runs a CloudBees CI to Jenkins migration

DeployOpen is a Chainscore Labs company that plans, implements, integrates, hardens, backs up and documents self-hosted open-source platforms inside the client's own infrastructure, including the cloud accounts, data centers or air-gapped networks where the Jenkins controllers already run. For a CloudBees CI to Jenkins migration, the work usually starts with an inventory: which controllers exist, which CloudBees-only plugins they depend on, how the operations center and role-based access control are configured, and where credentials and build history live. That inventory decides the scope, so it comes before any commitment on timelines or deliverables.

Most engagements are fixed-scope, meaning scope, deliverables and timelines are agreed in writing before any work starts. A written scope typically names the controllers in scope, the replacement for each CloudBees feature (for example, Configuration as Code for centrally managed settings and an open-source authorization plugin for access control), the Jenkinsfile review, the cutover approach and the documentation handed over at the end. A quote follows from that written scope, so the reader should ask for the quote to list each component separately. Ongoing support, upgrades and continuous testing are available as a retainer, which is the usual route for teams that want help keeping the new Jenkins current after cutover.

DeployOpen does not issue audit reports, attestations or certifications. It can prepare systems, controls and evidence for a compliance assessment, but independent auditors and certification bodies make the determination. Before signing, ask the provider to confirm in writing what evidence it will produce, who owns each control afterward, and how the license end date for CloudBees CI will be handled in the plan. Those questions tend to reveal more about fit than any general description of the provider.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.