Overview
What Gets Created
- Jenkins Controller — a
statefulworkload serving HTTP on port 8080, pinned to a single replica. - Volume Set — an
ext4volume mounted at/var/jenkins_home, holding jobs, build history and installed plugins. A final snapshot is kept for 7 days when the volume set is deleted. - Cloud Configuration Secret — created by the chart from your values and read by Jenkins at boot as Configuration as Code.
- Identity and Policy — grants the controller
revealon exactly the secrets it mounts, and nothing else. - Agent Workloads — created and deleted by Jenkins itself at build time, not by the chart.
Prerequisites
Twoopaque secrets must exist before you install.
1
Create the admin password secret
Anyone holding this password controls your CI, so use a strong one.Set
admin.passwordSecretName to the name you used.2
Create a Control Plane API key secret
Jenkins uses this key to create and delete agent workloads.Copy the Set
key value from the output — it is shown once — then:cloud.apiKeySecretName to the name you used.3
Grant the service account permissions
The key needs
view, create and delete on workloads in the agent GVC, plus view on GVCs, identities and volume sets.A key with no policy bindings authenticates successfully but provisions nothing — this is the most common reason agents never appear.Configuration
Admin Login
admin.username— The login name. Not sensitive, so it stays a value.admin.passwordSecretName— Name of theopaquesecret holding the password. It never passes through Helm values, so it does not land in the release.
The password is applied on every boot, not only the first. Rotating the secret and redeploying does change the login — unlike templates that seed an admin account once and ignore the value afterwards.
The Control Plane Cloud
These values pre-configure the Control Plane cloud inside Jenkins — the same 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.gvc— The GVC agents are provisioned into. Empty means the GVC Jenkins itself runs in.cloud.labels— Space-separated labels jobs use to target Control Plane agents.cloud.useUniqueAgents— On by default: one dedicated agent per queued job, so jobs do not wait behind each other.cloud.retentionMins— How long an idle agent survives before Jenkins deletes both the Jenkins node and the Control Plane workload.cloud.cpu/cloud.memory— Per-agent resources. The chart refuses to render below 50 millicores or 128 MiB, because the agent JVM fails to start or is OOM-killed below those floors.
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:
http://localhost:8080.
Access changes take up to a couple of minutes to propagate after toggling
publicAccess or internalAccess. A measured toggle moved through 403 then 503 before reaching 200 over about 140 seconds.Connecting
Running Builds on Control Plane Agents
Give a job the label fromcloud.labels:
cloud.retentionMins elapses. With allowJobsWithoutLabels: true (the default), unlabelled jobs also run on Control Plane agents.
To route work away from Control Plane instead, set allowJobsWithoutLabels: false so only jobs explicitly requesting one of cloud.labels are picked up.
Diagnosing a Stuck Install
A missing prerequisite secret produces no log output at all. The container never starts, socpln logs returns zero lines and the deployment simply looks slow.
status.versions[].message — it names the missing secret.
Creating the secret repairs the deployment on its own in roughly 5.5 to 10.5 minutes, or force a redeployment to skip the wait.
If Jenkins starts but no agents ever appear, the API key is the usual cause. The controller log shows Failed to list workloads: 403 when the key lacks workload permissions — the Jenkins UI only shows an idle cloud, so the log is the place to look.
Important Notes
- Create both secrets before installing — a missing one wedges the deployment silently.
- The agent GVC must have exactly one location. Multi-location GVCs are rejected by the plugin.
- An API key with no policy bindings authenticates but provisions nothing. It needs workload
view,createanddeletein the agent GVC. publicAccess.enabled: trueputs a Jenkins login on the internet. Set a strong admin password first, or reach the UI through a port-forward tunnel instead.- Editing cloud settings in the Jenkins UI does not survive a restart — Configuration as Code re-applies them at every boot.
- Jobs, build history and installed plugins live on the volume set and survive redeployment. Uninstalling the release deletes the volume set.