Self-Hosted Kubernetes Installation Guide
This manual covers the installation of Develocity into an existing Kubernetes cluster.
Develocity is a Kubernetes-based application, distributed as a Helm chart. Helm is a package manager for Kubernetes applications. In a Kubernetes installation, you use Helm to install Develocity into an existing cluster. Helm manages all Develocity components.
For instructions on installing Develocity on a host without public network connectivity, see Airgap Installation.
Prerequisites
A Develocity License
If you have purchased Develocity or started a trial, you should already have a license file called develocity.license.
Otherwise, you can request a Develocity trial license.
Cluster Requirements
|
Develocity only supports the |
Kubernetes Versions
Compatibility between versions of Kubernetes, Helm and Develocity can be found on the version overview matrix.
When installing Develocity, if the versions of Kubernetes or Helm you are using are lower than the supported versions, the installation fails.
If you accept the risk of running on an unsupported version, you can bypass this check using the helmVersionOverride and kubernetesVersionOverride values. Develocity validates the versions you set here instead of the versions you actually have installed, so setting them to a supported version makes the check pass even when your real Helm or Kubernetes version is older.
These values do not change what you run. They only control which versions Develocity validates against. Set them to the minimum supported version, which is the simplest value that satisfies the check.
| Overriding these values disables Develocity’s version compatibility check. Running on unsupported versions of Helm or Kubernetes is at your own risk. |
🔍 Example of overriding the version check
Set the overrides to the minimum supported versions so the compatibility check passes. These are not the versions you are running. They are the values Develocity validates against.
global:
helmVersionOverride: "3.19.0"
kubernetesVersionOverride: "1.32.0"
Kubernetes Platforms
Develocity does not use any platform-specific features and works on all platforms.
Gradle has verified Develocity on K3s, Amazon EKS, Red Hat OpenShift, Google Kubernetes Engine (GKE) and Azure Kubernetes Service (AKS).
Helm Requirements
Check the Helm Version Support Policy to ensure compatibility with your Kubernetes version.
Resource Requirements
Node Group Specification
The recommended node group specification for a cluster is 5 nodes, each with 4 CPU units and 16 GiB of memory.
Resource Requests and Limits
The total resource requests and limits for the Develocity Helm Chart are as follows:
-
Resource requests (the minimal resources required by the application to start): 13 CPU units, 26 GiB memory.
-
Resource limits (the maximum resources that might be used by the application if available): 21 CPU units, 39 GiB memory.
Database
By default, Develocity stores its data in a PostgreSQL database that runs as part of the application itself. The data lives in a persistent volume. This is the embedded database.
You can also store Build Scan, Build Cache node, and test distribution data in a user-managed database. A user-managed database can be any PostgreSQL database compatible with versions 15 through 18. The compatibility matrix lists the supported versions for every Develocity release.
Storage
Develocity uses persistent volume claims for storing data, logs and backups. Develocity uses your cluster’s default StorageClass if it has one.
If no default StorageClass is configured, or you want to use a different one, provide the name of the StorageClass to use for provisioning persistent volumes.
Different StorageClasses can be specified for the different types of storage used.
| Use faster StorageClasses for data, and a separate slower, cost-efficient one for backups. |
Some Pods use multiple persistent volumes.
On Kubernetes platforms with multiple availability zones, those Pods and their persistent volumes must sit in the same zone.
In this case, use a StorageClass with a volumeBindingMode of WaitForFirstConsumer to ensure that all persistent volumes are provisioned in the same zone that the pod was scheduled in.
Where available, use StorageClasses that allow persistent volume claim expansion. Expanding storage is then straightforward as your Develocity usage grows.
Capacity
The recommended minimum capacities for the persistent volumes are:
| Description | Size in GiB |
|---|---|
Build Scan data |
250 |
Build Scan data backups |
250 |
Edge Node |
50 |
Test Distribution |
10 |
Logs and Monitoring |
20 |
Embedded Object Storage |
75 |
The embedded object storage provisions a single persistent volume sized to the sum of objectStorage.embedded.storage.internalBuffer.capacity (default 5Gi), objectStorage.embedded.storage.buildCache.capacity (default 50Gi, which holds the durable Build Cache content, including artifacts uploaded from co-located and externally provisioned Edge nodes), and objectStorage.embedded.storage.monitoring.capacity (default 20Gi).
Adjust the sub-settings to change the overall PV size.
|
|
The Edge node volume provides a low-latency cache for build agents. For optimal read speeds, this volume must be placed on local SSD block storage. Do not use network file systems (NFS) or remotely-mounted volumes. Remote storage introduces significant latency, negating the performance benefits of the cache. The volume is ephemeral, so it is not retained across Pod restarts, updates, or scale-down. After such an event, the cache starts empty and warms on demand. As builds request entries, the new Pod fetches them from peer Edge nodes. On a miss, it fetches them through Develocity from the durable Object Storage. Expect temporarily reduced performance while the cache warms this way. Reads are still served, but from Object Storage rather than the local volume until the working set is warm again. If the durable Object Storage sits in a different region than the cluster, this refill traffic also increases Develocity’s cross-region read volume. Entries served from Object Storage still register as ordinary remote-cache hits. As a result, the extra warm-up latency does not surface as a distinct signal in the Build Scan. When troubleshooting a slow build that follows an Edge node restart, correlate it with the restart event. No data is lost: the durable copy remains in the Object Storage connected to Develocity. |
Adjust its size with edgeNode.storage.data.capacity, or see the Edge Node configuration to scale it.
If you are producing a lot of Build Scan data in a day (> 1GB) or intend to retain Build Scan data for long periods of time (30 days+) you might want to consider provisioning more storage. If your StorageClass does not allow expanding volumes, you should also consider preparing for future data growth by adding additional disk capacity upfront.
Performance
For production workloads, the data StorageClass should exhibit SSD-class disk performance of at least 3000 IOPS (input/output operations per second). The StorageClasses for logs and backup volumes can be slower.
| Disk performance has a significant impact on Develocity performance. Network file systems (such as Amazon EFS) are not compatible with Develocity due to their performance characteristics. |
Object Storage
Develocity administrators can store Build Scan® data and monitoring data such as metrics in an object storage service, such as Amazon S3, Google Cloud Storage, and Microsoft Azure Blob Storage. This can help performance in high-traffic installations by reducing the load on the database. Object storage services offer performance and cost advantages compared to database storage. If you deploy Develocity to a cloud provider or have an available internal S3-compatible object store, Gradle recommends using object-based storage for your installation. See Build Scan object storage in the Develocity Administration Manual for a description of the benefits and limitations.
Networking
By default, Develocity requires a cluster whose nodes can pull images from the internet. It also requires network connectivity for periodic license validation.
An installation of Develocity does not start if it cannot connect to both registry.gradle.com and harbor.gradle.com.
|
For clusters with limited or no internet connectivity, follow the Airgap installation steps.
The next sections cover the networking options you need to decide on before Helm Configuration.
Verifying Connectivity
Internet connectivity to https://helm.gradle.com is required on the host where you run Helm.
| For Airgap installations, a connection to the internet on a machine is required to download Develocity installation bundles. You must ensure that you can transfer the files to the host (with limited internet connectivity) at installation time. |
Test connectivity by running the following commands:
curl -sw \\n --fail-with-body --show-error https://helm.gradle.com/ping
kubectl run gradle-registry-test -q --rm --attach --restart=Never \
--image=curlimages/curl -- -sw \\n --fail-with-body --show-error \
https://registry.gradle.com/ping
kubectl run gradle-harbor-test -q --rm --attach --restart=Never \
--image=curlimages/curl -- -sw \\n --fail-with-body --show-error \
https://harbor.gradle.com/ping
All three of these commands should return SUCCESS.
HTTP / HTTPS
Connecting to the application over HTTPS with a trusted certificate is strongly recommended.
When using the Develocity supplied Ingress, HTTPS is enabled by default with a self-signed certificate.
Your organization must provide the SSL certificates to Helm, trusted or untrusted.
Where a reverse proxy or load balancer performs SSL termination, configure the SSL certificates with that infrastructure instead.
Ports
You can change the ports the application accepts traffic on from the default of 443, or 80 for plain HTTP, during Helm Configuration.
Make sure any additional ports such as user-managed database or object-storage ports are reachable if necessary.
Proxy
If your organization requires all outbound HTTP traffic to go through an HTTP proxy, configure that during Helm Configuration.
Hostname
When installing Develocity, a hostname such as develocity.example.com is required.
Make sure to configure the DNS records accordingly.
Add an A record for the hostname that points to the public IP address of your host.
develocity.example.com A 12.34.56.78
Verify that your DNS record works before installing Develocity by running dig develocity.example.com or ping develocity.example.com within the terminal.
If running Develocity behind a cloud load balancer, use /ping for the load balancer’s health check.
It will respond as healthy when Develocity is capable of handling requests.
Using the load balancer to manage fail-over might be undesirable for highly available installations.
|
If you are installing Develocity in a highly available setup, submit a ticket at support.gradle.com for assistance.
Pod to Pod Communication
Develocity does not provide a mechanism to encrypt communication between components of its system. If your system requires that, delegate it to your infrastructure using tools such as a Kubernetes CNI or a Service Mesh of your choice.
Kubernetes Permissions
The user running Helm or applying its output should have permission to create Kubernetes resources in the designated namespace.
If your Kubernetes environment has fine-grained permissions such that your Kubernetes account might not be able to create certain types of resources, inspect the resources that Develocity creates by running helm template and viewing the output.
Helm Configuration
A Helm values file holds the installation options for Develocity.
Follow the instructions in the Kubernetes Helm Chart Configuration Guide and return to this document with a complete values.yaml file.
Installation
Run the following commands on a host with connectivity to your Kubernetes cluster.
If you are installing Develocity on a host without public network connectivity, follow the Airgap installation instructions.
Install Helm
Develocity requires Helm version 3.13.x (or later) to install.
It’s recommended to use the latest version available as this will have all known security vulnerabilities addressed. This document describes the maximum version skew supported between Helm and Kubernetes.
| For more information on installing Helm (including alternate installation approaches), see Installing Helm. |
Install Helm with the following command:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Install the Helm Chart
Develocity is distributed from the Develocity Helm repository.
Add the Develocity Helm repository to your Helm installation and fetch its contents into the local cache:
helm repo add gradle https://helm.gradle.com/
helm repo update gradle
Verify that the Develocity chart is accessible:
helm search repo gradle-enterprise
This will report the latest versions available for the two Develocity charts:
NAME CHART VERSION APP VERSION DESCRIPTION gradle/gradle-enterprise 2026.2.5 2026.2.5 Official Develocity chart for Kubernetes cluster installations gradle/gradle-enterprise-standalone 2026.2.5 2026.2.5 Official Develocity chart for standalone installations
Install Develocity
Install Develocity by running:
helm install \
--create-namespace --namespace develocity \(1)
ge \(2)
gradle/gradle-enterprise \(3)
--values values.yaml \(4)
--set-file global.license.file=./develocity.license (5)
| 1 | This example uses develocity as the namespace, but it can be a custom name. If you use a custom name, update all other example commands accordingly. |
| 2 | This is the Helm release name. Helm uses it to identify the Develocity installation. |
| 3 | The Develocity chart to install, in this case, gradle/gradle-enterprise.To install a specific version, use --version 2026.2.5. |
| 4 | The Helm values file with configuration values, including items such as the hostname. |
| 5 | The Develocity license file (if not already included in values file). |
Start Develocity
Check that the Helm release is installed:
helm --namespace develocity list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ge develocity 1 2026-09-10 deployed 2026.2.5 2026.2.5
You can inspect the status of the Develocity Pods:
kubectl --namespace develocity get pods
NAME READY STATUS RESTARTS AGE edge-node-7d9c8b6f4d-x2kfp 1/1 Running 0 4m41s gradle-database-5f9ddc958b-pn8wm 3/3 Running 0 4m41s gradle-embedded-object-storage-86745c9cd7-2lpb9 1/1 Running 0 4m41s gradle-enterprise-app-58b7b75579-4c5hz 1/1 Running 0 4m41s gradle-enterprise-operator-bdb9b67bc-5m9wb 1/1 Running 0 4m41s gradle-keycloak-64cd768b89-rk9g2 1/1 Running 1 4m41s gradle-monitoring-849994bb56-4wr9t 5/5 Running 0 4m41s gradle-proxy-6d7b965c4f-b6jdb 1/1 Running 0 4m41s gradle-test-distribution-broker-5494796d9b-gb289 1/1 Running 0 4m41s
The edge-node Pod is the co-located Edge node, which Develocity deploys by default to provide a local cache layer.
To scale or resize it, see the Edge Node Helm configuration.
Use the Develocity /ping endpoint to verify network connectivity.
Run the following command on any machine that needs to connect to Develocity:
curl -sw \\n --fail-with-body --show-error https://«develocity-host»/ping
The command returns {"status":"UP"} as the response message.
Once all Pods have a status of Running and the system is up and connected, you can interact with Develocity in a web browser.
Its URL is the hostname you configured for the installation.
Develocity is now installed and running.
See Next Steps to learn more about Develocity.
Airgap Installation
Airgap installations require a Docker or compatible registry available on an internal network that is accessible from the cluster to which Develocity images can be pushed.
Airgap installations require a specific entitlement on your license. To enable it, contact Develocity support or your customer representative.
For Airgap installations:
-
Download the installation files on a host with access to the internet
-
Upload the images to the internal container registry, from a host with network access to that registry (no internet access required)
-
Run Helm on a host with network access to the Kubernetes cluster (no internet access required)
-
Provide some mechanism for transferring the downloaded installation files to where you need them
Overview
In an airgap installation, the container images are preloaded into K3s. Helm is then configured so that no attempt is made to pull images from the outside world.
Airgap installations require a specific entitlement on your license. Please contact Gradle if you need an Airgap-enabled license.
Airgap installation involves downloading files, transferring them, installing supporting software, and running helm install.
| When installing Develocity, follow the installation manual for that version as the steps may have changed. See Develocity releases for information about the available versions. |
We recommend you save all the files into a single transfer directory, so that it’s effortless to transfer to the host where you are installing Develocity. For example:
mkdir develocity-files && cd develocity-files
Download Helm
Use the compatibility matrix to identify the latest version of Helm supported by your version of Develocity.
Download the Helm binary:
curl -L -o helm-linux-amd64.tar.gz https://get.helm.sh/helm-v4.2.4-linux-amd64.tar.gz
| You can see all compatible Helm releases on the Helm releases page. |
Download Bundle
Save your Develocity license to the transfer directory as develocity.license.
Download and verify the airgap bundle:
curl -LOJd @develocity.license \
https://registry.gradle.com/airgap/gradle-enterprise-2026.2.5-bundle.tar.gz
curl -LOJd @develocity.license \
https://registry.gradle.com/airgap/gradle-enterprise-2026.2.5-bundle.tar.gz.sha256
sha256sum -c gradle-enterprise-2026.2.5-bundle.tar.gz.sha256
If the checksum verification fails, check the contents of the downloaded files for error messages.
If the error message indicates that your license is invalid/expired/not airgap enabled, you will need to request an updated license file by contacting your customer success representative.
Instead of running the above curl commands, you can download the airgap bundle by navigating to https://registry.gradle.com/airgap in your browser and following the instructions on the page.
|
Download Helm Values File
Download and verify the example Helm values file:
curl -L -o example.values.yaml \
https://docs.develocity.ai/downloads/gradle-enterprise-values/gradle-enterprise-values-2026.2.0.yaml
curl -L -o example.values.yaml.sha256 \
https://docs.develocity.ai/downloads/gradle-enterprise-values/gradle-enterprise-values-2026.2.0.yaml.asc.sha256
echo "$(cat example.values.yaml.sha256) example.values.yaml" | sha256sum -c -
Configure Helm Values File
Before installing Develocity and its prerequisites, make sure your Helm values file from the Helm Configuration section is available on your local workstation.
You can use the example values.yaml file from the earlier section to check for any missing configuration.
Transfer Files
Check that the transfer directory has the following files (additional files are fine):
-
helm-linux-amd64.tar.gz -
develocity.license -
values.yaml -
gradle-enterprise-2026.2.5-bundle.tar.gz -
Optional: SSL certificates
After verifying that all the required files are present, transfer them to the host where you are installing Develocity.
Upload Images
Follow these instructions on the host with connectivity to the internal container registry with your transferred files present in the current directory.
| You must be logged in to the registry before running these commands. |
Expand the bundle and upload the images to the internal container registry:
tar zxvf gradle-enterprise-2026.2.5-bundle.tar.gz
./upload-images.sh --registry=registry.example.com/gradle-enterprise
Install Helm
Run these steps on the host with connectivity to the Kubernetes cluster, with the transferred files in the current directory.
To install Helm:
tar -zxvf helm-linux-amd64.tar.gz && sudo mv linux-amd64/helm /usr/local/bin/helm
Install Develocity
The recommended way to install Develocity is letting Helm manage the installation.
Follow these instructions on the host with connectivity to the Kubernetes cluster with your transferred files present in the current directory.
Expand the bundle (may have already been expanded if you uploaded the images on this host):
tar zxvf gradle-enterprise-2026.2.5-bundle.tar.gz
Install Develocity:
helm install \
--create-namespace --namespace develocity \(1)
ge \(2)
./gradle-enterprise-2026.2.5.tgz \(3)
--values values.yaml \(4)
--set-file global.license.file=./develocity.license (5)
| 1 | This example uses develocity as the namespace, but it can be a custom name.
If you use a custom name, update all other example commands accordingly.
Running with --create-namespace will create the namespace if it doesn’t already exist.The namespace option may not be required for OpenShift if oc login has been run and the active project for the current context is set. |
| 2 | This is the Helm release name. It’s used by Helm to identify the Develocity installation. |
| 3 | The Develocity chart to install.
This is the .tgz file included in the airgap bundle. |
| 4 | The Helm values file with configuration values, including items such as the hostname. |
| 5 | The Develocity license file (if not already included in values file). |
Start Develocity
You can see the status of Develocity starting up by examining its Pods.
kubectl --namespace develocity get pods
NAME READY STATUS RESTARTS AGE edge-node-7d9c8b6f4d-x2kfp 0/1 ContainerCreating 0 4s gradle-database-5f9ddc958b-pn8wm 0/3 Init:0/3 0 4s gradle-embedded-object-storage-86745c9cd7-2lpb9 0/1 ContainerCreating 0 4s gradle-enterprise-app-58b7b75579-4c5hz 0/1 Init:0/4 0 4s gradle-enterprise-operator-bdb9b67bc-5m9wb 0/1 ContainerCreating 0 4s gradle-keycloak-64cd768b89-rk9g2 0/1 Init:0/1 1 4s gradle-monitoring-849994bb56-4wr9t 0/5 ContainerCreating 0 3s gradle-proxy-6d7b965c4f-b6jdb 0/1 ContainerCreating 0 3s gradle-test-distribution-broker-5494796d9b-gb289 0/1 Init:0/1 0 3s
The Pods should all report Running once startup completes:
kubectl --namespace develocity get pods
NAME READY STATUS RESTARTS AGE edge-node-7d9c8b6f4d-x2kfp 1/1 Running 0 4m41s gradle-database-5f9ddc958b-pn8wm 3/3 Running 0 4m41s gradle-embedded-object-storage-86745c9cd7-2lpb9 1/1 Running 0 4m41s gradle-enterprise-app-58b7b75579-4c5hz 1/1 Running 0 4m41s gradle-enterprise-operator-bdb9b67bc-5m9wb 1/1 Running 0 4m41s gradle-keycloak-64cd768b89-rk9g2 1/1 Running 1 4m41s gradle-monitoring-849994bb56-4wr9t 5/5 Running 0 4m41s gradle-proxy-6d7b965c4f-b6jdb 1/1 Running 0 4m41s gradle-test-distribution-broker-5494796d9b-gb289 1/1 Running 0 4m41s
Once all Pods have a status of Running and the system is up and connected, you can interact with Develocity in a web browser.
Its URL is the hostname you configured for the installation.
Cleanup
The files used during installation are not required at runtime. Remove the following after installation:
-
helm-linux-amd64.tar.gz -
gradle-enterprise-2026.2.5-bundle.tar.gz -
gradle-enterprise-2026.2.5.tgz -
gradle-enterprise-2026.2.5-images.tar
Keep these files, which you might need for future upgrades or maintenance:
-
Helm values files
-
SSL certificates
-
Develocity license
| Treat these files as sensitive. |
Develocity is now installed and running.
Next Steps
-
Sign in as the System User: Set the system user password and create a personal administrator account.
-
Publish Your First Build Scan: Validate your installation end-to-end from Gradle, Maven, sbt, Bazel, or npm.
-
Kubernetes Helm Chart Configuration Guide: Develocity Helm chart options.
-
Develocity Administration: Learn how to configure and administer Develocity.
-
DPE University: A free, self-paced training portal to get the most out of Develocity.
Appendix A: Advanced Installation
Chart Download and Selection Options
When asking Helm to install or process a chart, you can pick from several sources:
-
A chart from a repository directly.
-
A downloaded chart archive.
-
An expanded chart directory.
Which of these to use depends somewhat on network and policy requirements.
Direct Selection
This involves running helm commands using the above gradle/gradle-enterprise chart name.
Helm downloads the chart if necessary, so this option requires internet connectivity on the host that runs Helm.
Examples:
helm install ge gradle/gradle-enterprise «options»
helm template gradle/gradle-enterprise «options»
Unless you have a reason not to, install Develocity charts this way. The main installation section above uses this method.
Downloaded Archive
Helm can download a chart archive, and can run using the downloaded archive. This is most useful when the host with internet connectivity does not have access to the Kubernetes cluster.
Example:
helm pull gradle/gradle-enterprise
Downloads the latest version to an archive in the current directory for example, gradle-enterprise-2026.2.5.tgz.
Then later, possibly on a different host:
helm install ge gradle-enterprise-2026.2.5.tgz «options»
This is also the installation method used for airgap installations.
Expanded Chart Directory
Helm users commonly download a chart, edit the included Helm values file, and then commit the result to source control. Keep configuration in a separate values file instead, and install a pristine Develocity chart with the configuration provided alongside. If your organization’s processes expect Helm Charts to be edited inline, use this method.
Example:
helm pull gradle/gradle-enterprise --untar
Downloads the latest version, and expands it into a gradle-enterprise directory in the current directory.
Or for airgap customers, extract the chart .tgz file included in the bundle:
mkdir -p gradle-enterprise && \
tar zxvf path/to/gradle-enterprise-2026.2.5.tgz -C gradle-enterprise
At this point you can edit gradle-enterprise/values.yaml and commit the directory to source control.
Later:
helm install ge ./gradle-enterprise «options»
Installs Develocity from a directory with the expanded chart.
Helm Post-Processing
Many organizations need to customize Kubernetes manifests before applying them to their cluster.
Kustomize is one commonly used tool for this.
You can alter the Helm-generated Kubernetes manifests before Helm applies them to the cluster, using Helm Post Rendering via the --post-renderer flag.
Helm still manages what reaches the cluster, so you keep both the customization and the release tracking.
helm install \
--create-namespace --namespace develocity \
ge gradle/gradle-enterprise \
--values values.yaml \
--set-file global.license.file=./develocity.license \
--post-renderer path/to/post-renderer.sh
The --post-renderer option specifies an executable script that takes the Helm-rendered manifests as input on stdin, and produces manifests with further customizations as output on stdout.
The following example is a Helm post-renderer that uses Kustomize:
#!/usr/bin/env bash
set -eo pipefail
cat <&0 > /absolute/path/to/kustomizations/develocity.yaml
kustomize build /absolute/path/to/kustomizations
In this example, the develocity.yaml file contains the output of the Helm rendering step.
The kustomization.yaml then takes this file as an input:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- develocity.yaml
# Rest of kustomization
User-Managed Installation
An alternative to running helm install directly on your cluster is to have Helm generate Kubernetes manifests that you then apply with kubectl or other Kubernetes tools.
In this mode, Helm does not track installed versions: the resources in the cluster are untracked, and Helm cannot report which version is installed.
The most common reasons to do a user-managed installation are:
-
Requirements that the final applied manifests are committed to source control.
-
Need to modify the manifests before applying them to the cluster in a way that Helm post-processing does not support.
-
Preference or policy to have manifests applied and managed by other tools.
-
Need to run Helm on a host separated from the cluster.
There are some other downsides:
-
You must clean up some resources by hand after upgrades or uninstallation.
Running helm template
By default, Helm will generate a combined Kubernetes manifest and write it to standard output.
helm template \
gradle/gradle-enterprise \(1)
--values values.yaml \(2)
--set-file global.license.file=./develocity.license \(3)
> develocity.yaml (4)
| 1 | The Develocity chart to install, gradle/gradle-enterprise.To install a specific version, pass this as additional parameters, for example, --version 2026.2.5. |
| 2 | The Helm values file with configuration values, including items such as the hostname. |
| 3 | The Develocity license file. |
| 4 | Save all the rendered manifests to a single YAML file. |
You might want to pass other files using --set-file, such as certificates for HTTPS.
Configuration values can be provided to Helm in a variety of ways. This includes:
-
Providing a Helm values file (which can contain inline files) with
--values -
Providing files (such as the Develocity license or certificates) with
--set-file -
Setting individual values with
--set
Choose a combination that works for your own configuration management processes.
You can commit the generated manifest to version control, copy it, or process it further at this point.
Helm can also write the manifests as a set of files in a directory, broken up into logical groupings, using the --output-dir argument:
helm template \
gradle/gradle-enterprise \
--values values.yaml \
--set-file global.license.file=./develocity.license \
--output-dir ./my-develocity-manifests
The above will create files under the specified directory. This might be a preferred form for customization, including using tools such as Kustomize.
Extracting Ingress Rules
You might route Develocity’s traffic through your own controller or gateway rather than the supplied Ingress. In that case, render the chart’s Ingress resources and use them as the authoritative source for the routes to replicate.
The rendered output reflects the exact paths for the chart version you render, including routes added in newer releases such as the co-located Edge node routes. This gives you a version-accurate reference for building your own routing configuration.
Render the chart and filter the output to the Ingress resources with yq:
helm template ge gradle/gradle-enterprise \(1)
--version 2026.2.5 \(2)
--values values.yaml \(3)
--set-file global.license.file=./develocity.license \
| yq 'select(.kind == "Ingress")' (4)
| 1 | The Develocity chart to render. |
| 2 | The chart version to render. Change this value to extract the rules for any released version. |
| 3 | Reuse the same values file you deploy with, so the rendered hostnames and paths match your installation. |
| 4 | Keep only the Ingress documents from the combined manifest. |
helm template fails when required values, such as the hostname or license, are missing.
Invariant Output
By default, the Develocity Helm Chart randomly generates several secrets during rendering.
For example, the embedded database user credentials.
As a security precaution, those secrets differ each time, so repeated runs of helm template produce non-identical manifests.
That causes unnecessary restarts where automated tools use changes in rendering output to trigger redeployment.
You can configure Helm so that the output of helm template is invariant.
Set the secret values directly, or specify a user-managed secret.
You also can combine the two solutions if appropriate for your installation, by specifying some secret values directly, and some using user-managed secrets.
The table below lists the secrets you need to specify to get invariant output.
| Helm value | Secret data key(s) | Usage |
|---|---|---|
For these Helm value keys, use |
When creating user-managed secrets, the secret should have the verbatim data key(s) given in this column.
Dots ( apiVersion: v1 kind: Secret metadata: name: gradle-abc-def-secret data: abc.def: "a-secret-value" |
|
|
|
The credentials used by the app to connect to the database
|
|
|
The credentials used when running database migrations
|
|
|
The credentials used to monitor the database
|
|
|
The symmetric encryption key used for client-side session data |
|
|
The token used for signing the data associated with client sessions |
|
|
The client secret used by the app when connecting to Keycloak |
|
|
The password for the keycloak admin user |
|
|
The password used by the app to connect to the embedded object store. |
|
|
The password used by the app to migrate data in the embedded object store. |
|
|
The credentials used by the app to create and configure the embedded object store.
|
|
|
The password used by the internal monitoring stack to store and retrieve |
|
|
The token authorizing privileged management requests on internal endpoints, used by If you set neither |
|
|
The registration key used by edge nodes to authenticate with Develocity |
|
None. Must be provided via unattended configuration. |
The hash of the system user password. If not specified, then |
Below shows an example Helm values YAML you can use to get invariant output by specifying user-managed secrets.
global:
managementApiToken:
secretName: <user-managed kubernetes secret resource name>
unattended:
configuration:
version: 16
systemPassword: "«hashed-system-password»"
database:
credentials:
app:
secretName: <user-managed kubernetes secret resource name>
migrator:
secretName: <user-managed kubernetes secret resource name>
monitor:
secretName: <user-managed kubernetes secret resource name>
enterprise:
session:
key:
secretName: <user-managed kubernetes secret resource name>
token:
secretName: <user-managed kubernetes secret resource name>
authenticationBroker:
clientSecret:
secretName: <user-managed kubernetes secret resource name>
adminPassword:
secretName: <user-managed kubernetes secret resource name>
objectStorage:
embedded:
credentials:
app:
secretName: <user-managed kubernetes secret resource name>
migrator:
secretName: <user-managed kubernetes secret resource name>
monitoring:
secretName: <user-managed kubernetes secret resource name>
superuser:
secretName: <user-managed kubernetes secret resource name>
edgeNode:
registrationKey:
secretName: <user-managed kubernetes secret resource name>
To get invariant output by specifying secret values directly in your Helm values.yaml:
global:
managementApiToken:
value: <secret value>
unattended:
configuration:
version: 16
systemPassword: "«hashed-system-password»"
database:
credentials:
app:
password: <secret value>
migrator:
password: <secret value>
monitor:
password: <secret value>
enterprise:
session:
key:
value: <secret value>
token:
value: <secret value>
authenticationBroker:
clientSecret:
value: <secret value>
adminPassword:
value: <secret value>
objectStorage:
embedded:
credentials:
app:
password: <secret value>
migrator:
password: <secret value>
monitoring:
password: <secret value>
superuser:
password: <secret value>
edgeNode:
registrationKey:
value: <secret value>
As with other values, you can also set these by passing --set or --set-file to Helm.
The following example uses kubectl to create the db-app-user-credentials, db-migrator-user-credentials, and embedded-object-storage-superuser-credentials secrets in the develocity namespace:
# Add this to your `helm install` command: `--set database.credentials.app.secretName=db-app-user-credentials`
kubectl -n develocity create secret generic db-app-user-credentials --from-literal=username=ge_app --from-literal=password=<your password here>
# Add this to your `helm install` command: `--set database.credentials.migrator.secretName=db-migrator-user-credentials`
kubectl -n develocity create secret generic db-migrator-user-credentials --from-literal=username=ge_migrator --from-literal=password=<your password here>
# Add this to your `helm install` command: `--set objectStorage.embedded.credentials.superuser.secretName=embedded-object-storage-superuser-credentials`
kubectl -n develocity create secret generic embedded-object-storage-superuser-credentials --from-literal=user=gradle-embedded-object-storage-root-user --from-literal=password=<your password here>
When you create a secret and reference it by name in your Develocity installation (for example, using a secretName value), Helm does not manage that secret.
If you change the secret value, for example when periodically cycling a password, restart Develocity manually so the change takes effect.
To do this, restart all the Pods in the Develocity Helm installation.
|
Mirroring the Helm Charts
You can mirror the Develocity Helm Charts in an internal Helm Chart repository.
Using helm pull to fetch the charts is the recommended approach since the Develocity Helm repository index uses relative URLs.
helm search repo gradle-enterprise --versions --output json | jq -r '"helm pull " + .[].name + " --version " + .[].version' | sort | uniq | bash
Uninstalling Develocity
To uninstall Develocity, follow the Uninstall Guide.