Overview
Jenkins is an open-source automation server for CI/CD pipelines. This template deploys a single Jenkins controller with the Control Plane cloud plugin built in: when a job is queued, Jenkins provisions a build agent as its own Control Plane workload and deletes it once idle, so build capacity costs nothing between builds. The controller is configured entirely from code and boots straight to a login screen, with no setup wizard. The admin password and the Control Plane API key Jenkins uses to create agents both come from secrets you create before installing; neither passes through Helm values.What Gets Created
Prerequisites
Twoopaque secrets must exist before you install. Secrets are org-level, so no GVC flag is involved, and their names are org-wide — give each Jenkins release its own.
Create the admin password secret
admin.passwordSecretName to this name.Create a service account and key
key value from the output — it is shown only once.Grant the service account permissions
Store the key in a secret
THE-KEY-VALUE:cloud.apiKeySecretName to this name. With cloud.enabled: false the API key secret is not needed.Installation
Once both secrets exist and the service account has its permissions, install from the marketplace registry with the two secret names:UI
CLI
Terraform
Pulumi
Configuration
Image
Admin Login
admin.username is the login name and stays an ordinary value. The password is applied on every boot, not only the first: change the secret and force a redeployment to change the login (see Rotating the Admin Password).
Control Plane Cloud
These values pre-configure the Control Plane cloud inside Jenkins — the settings you would otherwise fill in by hand under Manage Jenkins → Clouds. The chart renders them into a Configuration as Code file the controller reads at boot, so a fresh install already knows how to provision agents.cloud.cpu below 50, cloud.memory below 128 or cloud.retentionMins below 1. The organization and the controller address agents connect back to are derived from where the controller runs, so you never supply them.
Controller Resources and Storage
cloud.cpu and cloud.memory.
Access
publicAccess defaults to off, because the controller serves a login form and a CI server holds credentials for everything it deploys. A private controller is still reachable through a port-forward — see Connecting. A change to either access setting can take a few minutes to take effect.
Connecting
The controller is private by default. Open a tunnel to it from your machine:http://localhost:8080. To publish the UI instead, set publicAccess.enabled: true and read the public address from status.canonicalEndpoint:
First Run
There is no setup wizard. Open the UI and sign in withadmin.username (default admin) and the password in your admin password secret. The Control Plane cloud is already configured under Manage Jenkins → Clouds.
Running Builds on Control Plane Agents
A job runs on a Control Plane agent when it requests one of the labels incloud.labels (default cpln):
cloud.agentWorkload (default jenkins-agent), runs the build on it, and deletes it once it has been idle for cloud.retentionMins. Each agent runs cloud.agentImage with cloud.cpu millicores and cloud.memory MiB.
cloud.useUniqueAgents: true(default) gives every queued job its own agent;cloud.executorssets how many builds one agent runs at once.cloud.allowJobsWithoutLabels: true(default) also sends jobs with no label to Control Plane agents. Set it tofalseso only jobs requesting one ofcloud.labelsare picked up.
Operations
Backing Up
Jobs, build history and installed plugins all live on the volume setRELEASE_NAME-jenkins-vs. Take a snapshot at any time:
Restoring a Backup
The CLI restores a snapshot into the volume set with the command below. This path has been checked against the CLI help only and has not been verified against a Jenkins install, so take a fresh snapshot first and expect to restart the controller afterwards:LOCATION is the single location of your GVC.
Rotating the Admin Password
The password is re-applied at every boot, so a new secret value becomes the login after the next restart. Replace the secret’s value with the file below, then force a redeployment — a running controller keeps the old password until it restarts:rotate.yaml, then:
API_KEY_SECRET_NAME, with a new key from cpln serviceaccount add-key as the payload, then force a redeployment.
Changing Cloud Settings
Changecloud.* values with an upgrade; settings edited in the Jenkins UI are overwritten at the next boot:
--set you passed at install, including both secret names.
Most cloud.* settings change only the RELEASE_NAME-jenkins-cloud secret, and a running controller keeps the file it booted with. Force a redeployment after the upgrade so the controller boots with the new cloud settings:
Scaling and Availability
The controller is a single replica pinned to one volume set; it is not clustered, and there is no replicas knob. Build capacity scales through agents instead: each queued job gets its own agent workload, withcloud.provisioningCooldownSecs between provisions. A controller restart interrupts the UI and running builds; jobs, history and plugins survive on the volume set.
Troubleshooting
The controller never starts and cpln logs shows nothing
The controller never starts and cpln logs shows nothing
status.versions[].message, which names the missing secret, then create it:Jenkins is up but no agents ever appear
Jenkins is up but no agents ever appear
Failed to list workloads: 403, while the Jenkins UI only shows an idle cloud.Fix: Confirm the error in the controller log, then grant the service account the permissions listed in Prerequisites:Agents are never provisioned into a multi-location GVC
Agents are never provisioned into a multi-location GVC
cloud.gvc at a GVC with exactly one location and upgrade.Cloud settings changed in the UI revert after a restart
Cloud settings changed in the UI revert after a restart
cloud.* at every boot.Fix: Change the values and upgrade — see Changing Cloud Settings.Install fails with a cloud.cpu or cloud.memory minimum error
Install fails with a cloud.cpu or cloud.memory minimum error
cloud.retentionMins below 1, because the agent JVM fails to start or is OOM-killed below those floors.Fix: Raise cloud.cpu, cloud.memory or cloud.retentionMins and install again.Important Notes
- Create both secrets before installing — a missing one wedges the deployment silently.
- The agent GVC must have exactly one location — by default that is the GVC Jenkins is installed into.
- The API key needs policy bindings — workload
view/create/deletein the agent GVC, plusviewon GVCs, identities and volume sets. publicAccess.enabled: trueputs a Jenkins login on the internet — use a strong admin password, or stay private and use the port-forward.- Edit cloud settings in values, not in the Jenkins UI — UI edits are lost at the next restart.
- A rotated secret needs a forced redeployment — the running controller keeps the old value until it restarts.
- Uninstalling deletes the volume set — jobs and build history then survive only in the 7-day final snapshot.