Standalone Airgap Upgrade
This section provides step-by-step instructions for upgrading a standalone Develocity environment without internet access.
Download Required Files
Download K3s
Running the following commands will:
-
Download the K3s binary.
-
Download the K3s airgap image.
-
Download the K3s installation script.
Download the K3s binary:
curl -LO https://github.com/k3s-io/k3s/releases/download/v1.35.2+k3s1/k3s
Download the K3s airgap image:
curl -LO \
https://github.com/k3s-io/k3s/releases/download/v1.35.2%2Bk3s1/k3s-airgap-images-amd64.tar.gz
Download the K3s installation script:
curl -L -o install_k3s.sh https://get.k3s.io
If you are running Red Hat Enterprise Linux with SELinux enabled, download the K3s policy package:
SELinux policy package download
Lookup the latest version of the K3s SELinux Policy package:
K3S_SELINUX_DOWNLOAD_URL=$(curl -s https://api.github.com/repos/k3s-io/k3s-selinux/releases/latest | jq -r '.assets[] | select( .name | endswith("el8.noarch.rpm") ) | .browser_download_url') && echo $K3S_SELINUX_DOWNLOAD_URL
| You can view the versions available and find the download links on the K3s SELinux releases page. |
Then download it:
curl -L -o k3s-selinux.el8.noarch.rpm $K3S_SELINUX_DOWNLOAD_URL
Download Helm
Download the Helm binary:
curl -L -o helm-linux-amd64.tar.gz https://get.helm.sh/helm-v4.1.3-linux-amd64.tar.gz
Download Airgap 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-standalone-2026.1.0-bundle.tar.gz
curl -LOJd @develocity.license \
https://registry.gradle.com/airgap/gradle-enterprise-standalone-2026.1.0-bundle.tar.gz.sha256
sha256sum -c gradle-enterprise-standalone-2026.1.0-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.
|
Transfer Files
Check that the transfer directory has the following files (additional files are fine):
-
k3s-airgap-images-amd64.tar.gz -
k3s -
install_k3s.sh -
k3s-selinux.el8.noarch.rpm(only if you are running SELinux) -
helm-linux-amd64.tar.gz -
gradle-enterprise-standalone-2026.1.0-bundle.tar.gz
Once you’ve verified that you have the required files, transfer them to the host where you are installing Develocity.
Import the New Container Images
The new Develocity images must be imported into K3s’s embedded container registry.
Run the following commands to:
-
Unpack the airgap bundle.
-
Import Develocity images into K3s.
tar zxvf gradle-enterprise-standalone-2026.1.0-bundle.tar.gz
sudo k3s ctr images import gradle-enterprise-standalone-2026.1.0-images.tar
Upgrade K3s
Follow these instructions on the host where you install Develocity with your transferred files in the current directory.
If you are running Red Hat Enterprise Linux with SELinux enabled, first install the necessary policy packages:
SELinux Policy installation
Install the k3s-selinux Package
Install the K3s SELinux Policy package you downloaded:
sudo yum install -y k3s-selinux.el8.noarch.rpm
Install K3s and make it available to the current user:
sudo mkdir -p /var/lib/rancher/k3s/agent/images/ && \
sudo cp k3s-airgap-images-amd64.tar.gz /var/lib/rancher/k3s/agent/images/
(cd /var/lib/rancher/k3s/agent/images/ && sudo gunzip -f k3s-airgap-images-amd64.tar.gz)
sudo cp k3s /usr/local/bin && sudo chmod a+rx /usr/local/bin/k3s
sudo chmod a+rx ./install_k3s.sh && INSTALL_K3S_SKIP_DOWNLOAD=true ./install_k3s.sh
sudo chown $UID /etc/rancher/k3s/k3s.yaml && \
mkdir -p "${HOME}/.kube" && \
ln -sf /etc/rancher/k3s/k3s.yaml "${HOME}/.kube/config"
Verify that you can interact with the K3s cluster:
kubectl get namespace
NAME STATUS AGE default Active 1h kube-system Active 1h kube-public Active 1h kube-node-lease Active 1h develocity Active 1h
|
At this point, you still run the old version of Develocity. Accessing the application and verifying it receives new Build Scan data is the easiest method. |
Upgrade Helm
Follow these instructions on the host where you are installing Develocity with your transferred files present in the current directory.
Run the following commands to unpack and install Helm:
tar -zxvf helm-linux-amd64.tar.gz && sudo mv linux-amd64/helm /usr/local/bin/helm
Verify that helm is installed and working:
helm version
Database
|
It’s strongly recommended to make a database backup before upgrading. Upgrading Develocity irreversibly changes the database schema. |
User-Managed Database
For major version upgrades (for example, 2025.4 to 2026.1), if data is stored in a user-managed database and superuser credentials aren’t supplied, the database setup script must be run before the upgrade.
Depending on the size of your database, it may take from a few minutes to up to hours.
Upgrade Develocity
Adjust values.yaml Configuration
Adjust your values.yaml configuration file. You can find a detailed list of required changes in the Changes section.
You can discover your current configuration by running the following command:
helm get values \
--namespace develocity \(1)
ge-standalone \(2)
> values.yaml (3)
| 1 | The namespace used to install Develocity. |
| 2 | Release name. |
| 3 | Output file. |
Adjust Unattended Configuration
If you are using unattended configuration, export the current configuration using the Admin UI. Then adjust the exported configuration according to the Changes section.
You can validate your unattended configuration against the schema by using the Develocity command line tool (develocityctl):
develocityctl config-file validate unattended-configuration.yaml
If your unattended configuration is embedded in the values.yaml file, you can validate it with the following command:
cat values.yaml | yq '.global.unattended.configuration' | develocityctl config-file validate -
|
Unattended configuration is versioned. If an older version is provided, the application migrates the config to the latest version automatically. If you use version control, it’s recommended that you export your unattended configuration after the upgrade and store the latest version in your repository. See Migrating Unattended Configuration for details. |
Decide on the Upgrade Command
You may need to run different upgrade commands depending on your configuration changes.
The helm upgrade command is used to upgrade an existing release.
It has several flags that control how the values are used for the upgrade.
Specifically, the --reuse-values and --reset-values flags modify the behavior around the values passed to the upgrade.
-
--reuse-values: Keeps existing values and allows the setting of additional values. -
--reset-values: Discards any previously set values and requires all values to be set.
Both flags give you fine-grained control over how values are managed during an upgrade, depending on whether you want to preserve or reset your previous configurations.
For more information about the helm upgrade command, refer to the official Helm documentation.
No Changes
Use case: You want to upgrade but keep all the values from the current deployment without any modifications.
This is useful to ensure that existing values remain unchanged during an upgrade.
This is the most straightforward option if no configuration needs to be modified.
helm upgrade \
--namespace develocity \(1)
--reuse-values \(2)
ge-standalone \(3)
gradle-enterprise-standalone-2026.1.0.tgz (4)
| 1 | The namespace used to install Develocity |
| 2 | Reuse the configuration from the current deployment without any modifications |
| 3 | The release name |
| 4 | The chart archive |
Simple Changes
Use case: You have an existing configuration and want to update the license value and disable ingress SSL, but keep the rest of the configuration.
helm upgrade \
--namespace develocity \(1)
--reuse-values \(2)
--set-file global.license.file=./develocity.license \(3)
--set ingress.ssl.enabled=false \(4)
ge-standalone \(5)
gradle-enterprise-standalone-2026.1.0.tgz (6)
| 1 | The namespace used to install Develocity |
| 2 | Reuse the configuration from the current deployment without any modifications |
| 3 | The path to the new license file |
| 4 | Disable the Ingress SSL |
| 5 | The release name |
| 6 | The chart archive |
|
This method works correctly only if you add new values or override existing values. It won’t remove any previously set values, so that you may have a corrupted configuration. |
Example:
objectStorage:
type: s3
s3:
bucket: example-bucket
region: example-aws-region-1
credentials:
source: environment
objectStorage:
type: s3
s3:
bucket: example-bucket
region: example-aws-region-1
credentials:
type: instanceProfile
Upgrade command:
helm upgrade \
--namespace develocity \
--reuse-values \(1)
--values new-config.yaml \(2)
ge-standalone \
gradle-enterprise-standalone-2026.1.0.tgz
| 1 | Reuse the configuration from the current deployment without any modifications |
| 2 | Additionally, apply the partial configuration from the new-config.yaml file |
You might expect the source: environment to be removed and the type: instanceProfile to be added, but the result is different:
objectStorage:
type: s3
s3:
bucket: example-bucket
region: example-aws-region-1
credentials:
source: environment
type: instanceProfile
The application throws an error since the old configuration block is no longer supported, but it’s still present.
UPGRADE FAILED: execution error at (gradle-enterprise/templates/enterprise-app/deployment.yaml:3:3): The `objectStorage.s3.credentials.source` attribute was removed. Please use `objectStorage.s3.credentials.type instead.
| The old attribute isn’t ignored during the upgrade process to quickly detect misconfigurations. |
Complex Changes
|
The Helm will use the default values defined in the chart during the upgrade, and any custom values previously set (whether through |
Use case: You want to upgrade to Develocity 2026.1 and adjust the Object Storage configuration (see the example above).
helm upgrade \
--namespace develocity \(1)
--reset-values \(2)
--values values.yaml \(3)
--set-file global.license.file=./develocity.license \(4)
ge-standalone \(5)
gradle-enterprise-standalone-2026.1.0.tgz (6)
| 1 | The namespace used to install Develocity |
| 2 | Discard old configuration settings |
| 3 | The path to the entire configuration file. No settings are preserved from the previous configuration |
| 4 | The path to the Develocity license file (if not included in values.yaml) |
| 5 | The release name |
| 6 | The chart archive |
Use dry-run to Verify the Upgrade
Before upgrading, you can use the --dry-run flag to verify the upgrade process.
This will show you the changes that would be made without actually applying them.
For example (if no changes were required):
helm upgrade \
--namespace develocity \
--reuse-values \
ge-standalone \
gradle-enterprise-standalone-2026.1.0.tgz \
--dry-run
|
The actual command may differ depending on the outcome from the previous step. |
|
If the --dry-run validates syntax, verifies the chart structure, validates your configuration with schema, and checks the generated Kubernetes manifests for errors. However, it won’t detect issues like typos in optional fields or guarantee the application configuration will function correctly. |
Execute the Upgrade
Remove --dry-run from the command above and execute the upgrade.
For example (if no changes were required):
helm upgrade \
--namespace develocity \
--reuse-values \
ge-standalone \
gradle-enterprise-standalone-2026.1.0.tgz
Verify the Upgrade
After executing the upgrade, verify that the Helm release has been updated:
helm list --namespace develocity
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ge-standalone develocity 2 2026-03-25 deployed gradle-enterprise-standalone-2026.1.0 2026.1.0
You can inspect the status of the Develocity Pods:
kubectl get pods --namespace develocity
Wait until all Pods have a status of Running.
Develocity has a /ping endpoint, which can be used to verify that the application is up and running:
curl -sw \\n --fail-with-body --show-error https://«develocity-host»/ping
It should return {"status":"UP"} as response message.