Starting with Develocity 2024.3 the upgrade documentation is now versioned.

If you want to upgrade from an older version, refer to the upgrade documentation for prior versions.


Overview

Upgrading to a new version of Develocity provides your organization with new features, improved functionality, and security updates.

This page provides the steps to upgrade Develocity to version 2024.3.

The 2024.3 release removes many deprecated configuration properties related to Object Storage.

If you use any of the removed properties you must update the configuration before attempting to upgrade.

Compatibility matrix

It’s recommended to use the latest versions of Helm and Kubernetes (K3s for standalone installations).

The versions below were confirmed to work with Develocity 2024.3.

Supported software versions

Software

Minimum version

Latest version

K3s

1.29.x

1.31.x

Kubernetes

1.29.x

1.31.x

Helm

3.14.x

3.16.x

Check the compatibility matrix for a full overview of the version compatibility of Develocity with related components.

User-managed database

For major version upgrades (for example, 2024.2 to 2024.3), if data is stored in a user-managed database and superuser credentials are not supplied, the database setup script must be run before the upgrade.

The corresponding script for Develocity 2024.3 can be downloaded via the following link

Depending on the size of your database, it may take from a few minutes to up to hours.

It’s strongly recommend to make a database backup before upgrading.

Upgrading Develocity irreversibly changes the database schema.
You will need to restore the database from a backup if you need to roll back the upgrade.

Standalone

Online

1. Upgrade K3s

Running the following command will:

  • Download the latest k3s binary supported by Develocity 2024.3.

  • Restart the k3s service.

$ curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=v1.31 sh -

For more information, see the official K3s upgrade documentation.

At this point, you still run the old version of Develocity.
Please confirm it works as expected before proceeding with the upgrade.

Accessing the application and verifying it receives new Build Scan data is the easiest method.

2. Upgrade Helm

Running the following commands will:

  • Download the Helm installation script.

  • Set the permissions of the script. Only the owner has read, write, and execute permissions.

  • Install the Helm version specified with the -v flag.

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh -v v3.16.0

For more information, see the official Helm installation documentation.

3. Upgrade Develocity

3.1 Update repository

First, run the helm repo update gradle command to update locally available charts:

$ helm repo update gradle
3.2 Adjust values.yaml configuration

Adjust your values.yaml configuration file. You can find a detailed list of required changes in the appendix.

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.
3.3 Decide on the upgrade command

You may need to run different upgrade commands depending on your configuration changes.
You can find recommendations in the appendix.

3.4 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 \
    --version 2024.3.0 \
    ge-standalone \
    gradle/gradle-enterprise-standalone \
    --dry-run

The actual command may differ depending on the outcome from the previous step.

If the --dry-run command completes successfully, you can proceed with the upgrade.
Otherwise, review the output and make any necessary changes to your configuration.

--dry-run validates syntax, verifies the chart structure, 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.

3.5 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 \
    --version 2024.3.0 \
    ge-standalone \
    gradle/gradle-enterprise-standalone

Airgap

Upgrading an airgap instance of Develocity requires downloading the latest version of charts, transferring them to the host machine, and installing them. Downloading an update for Develocity requires your license file.

If you use helm template (or --reset-values), you must specify all installation options again, including files. You must transfer these files to the machine used to access the cluster.

1. Download required files

1.1. 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.31.2+k3s1/k3s

Download the K3s airgap image:

$ curl -LO \
    https://github.com/k3s-io/k3s/releases/download/v1.31.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
1.2. Download Helm

Download the Helm binary:

$ curl -L -o helm-linux-amd64.tar.gz https://get.helm.sh/helm-v3.16.0-linux-amd64.tar.gz
1.3. 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-2024.3-bundle.tar.gz
$ curl -LOJd @develocity.license \
    https://registry.gradle.com/airgap/gradle-enterprise-standalone-2024.3-bundle.tar.gz.sha256
$ sha256sum -c gradle-enterprise-standalone-2024.3-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.

2. 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-2024.3-bundle.tar.gz

Once you’ve verified that you have the required files, transfer them to the host where you are installing Develocity.

3. 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 container-selinux package

Install the K3s SELinux Policy package you downloaded:

$ sudo yum install -y k3s-selinux.el9.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
Output
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.
Please confirm it works as expected before proceeding with the upgrade.

Accessing the application and verifying it receives new Build Scan data is the easiest method.

4. 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
Output
version.BuildInfo{Version:"v3.16.0", GitCommit:"fa9efb07d9d8debbb4306d72af76a383895aa8c4", GitTreeState:"clean", GoVersion:"go1.22.6"}

5. Upgrade Develocity

5.1. 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.

  • Imports Develocity’s images into K3s.

$ tar zxvf gradle-enterprise-standalone-2024.3.0-bundle.tar.gz
$ sudo k3s ctr images import gradle-enterprise-standalone-2024.3.0-images.tar
5.2 Adjust values.yaml configuration

Adjust your values.yaml configuration file. You can find a detailed list of required changes in the appendix.

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.
5.3 Decide on the upgrade command

You may need to run different upgrade commands depending on your configuration changes.
You can find recommendations in the appendix.

5.4 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-2024.3.0.tgz \
    --dry-run

The actual command may differ depending on the outcome from the previous step.

If the --dry-run command completes successfully, you can proceed with the upgrade.
Otherwise, review the output and make any necessary changes to your configuration.

--dry-run validates syntax, verifies the chart structure, 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.

5.5 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-2024.3.0.tgz

Kubernetes

Kubernetes installation type is for advanced users. This section assumes that you have a base knowledge of Kubernetes.

Before upgrading, check the upgrade notes section at the release notes for any special considerations when upgrading from older versions of Develocity.

Upgrading with multiple replicas

If you have configured more than one replica, you must scale the replicas down to one before upgrading to avoid having mixed versions running simultaneously.

Before applying the upgrade, run the following command to scale the application down to one replica.

1. Scale down the application to one replica

$ helm upgrade \
    --namespace develocity \
    --reuse-values \
    --set=global.scaling.replicas=1 \
    --version «deployed-version» \(1)
    ge
    gradle/gradle-enterprise (2)
1 «deployed-version» is the running version of Develocity, not the version being upgraded to.
2 Replace gradle/gradle-enterprise with gradle-enterprise-2024.3.0.tgz for airgap installations.

2. Upgrade Develocity

Use online or airgap instructions below to upgrade Develocity.

3. Scale up the application to N replicas

Before you scale up the application, ensure the upgrade went well and the application is working.
$ helm upgrade \
    --namespace develocity \
    --reuse-values \
    --set=global.scaling.replicas=N \(1)
    --version «deployed-version» \
    ge
    gradle/gradle-enterprise (2)
1 N is the number of replicas you want to scale up to.
2 Replace gradle/gradle-enterprise with gradle-enterprise-2024.3.0.tgz for airgap installations.

Online

1. Upgrade Helm

Running the following commands will:

  • Download the Helm installation script.

  • Set the permissions of the script. Only the owner has read, write, and execute permissions.

  • Install the Helm version specified with the -v flag.

$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh -v v3.16.0

For more information, see the official Helm installation documentation.

2. Upgrade Develocity

2.1 Update repository

First, run the helm repo update gradle command to update locally available charts:

$ helm repo update gradle
2.2 Adjust values.yaml configuration

Adjust your values.yaml configuration file. You can find a detailed list of required changes in the appendix.

You can discover your current configuration by running the following command:

$ helm get values \
    --namespace develocity \(1)
    ge \(2)
    > values.yaml (3)
1 The namespace used to install Develocity.
2 Release name.
3 Output file.
2.3 Decide on the upgrade command

You may need to run different upgrade commands depending on your configuration changes.
You can find recommendations in the appendix.

2.4 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 \
    --version 2024.3.0 \
    ge \
    gradle/gradle-enterprise \
    --dry-run

The actual command may differ depending on the outcome from the previous step.

If the --dry-run command completes successfully, you can proceed with the upgrade.
Otherwise, review the output and make any necessary changes to your configuration.

--dry-run validates syntax, verifies the chart structure, 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.

2.5 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 \
    --version 2024.3.0 \
    ge \
    gradle/gradle-enterprise

Airgap

Upgrading an airgap instance of Develocity requires downloading the latest version of charts, transferring them to the host machine, and installing them. Downloading an update for Develocity requires your license file.

If you use helm template (or --reset-values), you must specify all installation options again, including files. You must transfer these files to the machine used to access the cluster.

1. Download required files

1.1. Download Helm

Download the Helm binary:

$ curl -L -o helm-linux-amd64.tar.gz https://get.helm.sh/helm-v3.16.0-linux-amd64.tar.gz
1.2. 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-2024.3-bundle.tar.gz
$ curl -LOJd @develocity.license \
    https://registry.gradle.com/airgap/gradle-enterprise-2024.3-bundle.tar.gz.sha256
$ sha256sum -c gradle-enterprise-2024.3-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.

2. Transfer files

Check that the transfer directory has the following files (additional files are fine):

  • helm-linux-amd64.tar.gz

  • gradle-enterprise-2024.3-bundle.tar.gz

Once you’ve verified that you have the required files, transfer them to the host where you are installing Develocity.

3. 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.

Run the following commands to unpack the bundle and upload the images to the internal container registry:

$ tar zxvf gradle-enterprise-2024.3-bundle.tar.gz
$ ./upload-images.sh --registry=registry.example.com/gradle-enterprise

4. Upgrade Helm

Follow these instructions on the host with connectivity to the Kubernetes cluster 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
Output
version.BuildInfo{Version:"v3.16.0", GitCommit:"fa9efb07d9d8debbb4306d72af76a383895aa8c4", GitTreeState:"clean", GoVersion:"go1.22.6"}

5. Upgrade Develocity

5.1 Adjust values.yaml configuration

Adjust your values.yaml configuration file. You can find a detailed list of required changes in the appendix.

You can discover your current configuration by running the following command:

$ helm get values \
    --namespace develocity \(1)
    ge \(2)
    > values.yaml (3)
1 The namespace used to install Develocity.
2 Release name.
3 Output file.
5.2 Decide on the upgrade command

You may need to run different upgrade commands depending on your configuration changes.
You can find recommendations in the appendix.

5.3 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 \
    gradle-enterprise-2024.3.0.tgz \
    --dry-run

The actual command may differ depending on the outcome from the previous step.

If the --dry-run command completes successfully, you can proceed with the upgrade.
Otherwise, review the output and make any necessary changes to your configuration.

--dry-run validates syntax, verifies the chart structure, 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.

5.4 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 \
    gradle-enterprise-2024.3.0.tgz
Changing StorageClass

StorageClasses can’t be changed once a persistent volume claim is in place.
If you need to alter any configured Develocity StorageClasses, contact the Develocity support team for help.

Appendix

Appendix A: Changes

The 2024.3 release significantly updates the Object Storage configuration by removing deprecated configurations. Follow one of the actions below to migrate your configuration to the new version.

All the below configuration options were deprecated in earlier versions of Develocity.
If you already migrated your configuration, you can skip this step.

1. Unattended configuration

Historically, it was possible to configure Object Storage using unattended configuration. This method was deprecated in 2023.3 and is now removed, including the UI configuration page.

If you still use it, please follow the migration steps here.

2. Embedded storage capacity

In version 2024.2, objectStorage.embedded.storage.data.capacity has been replaced with objectStorage.embedded.storage.buildCache.capacity to allow more granular control over features using Object Storage.

The storage.data configuration block has been removed. Please replace it with storage.buildCache.

I.before.yaml

objectStorage:
  type: embedded
  embedded:
    storage:
      data: (1)
        capacity: "100Gi"
after.yaml
objectStorage:
  type: embedded
  embedded:
    storage:
      buildCache: (1)
        capacity: "100Gi"
1 The storage.data should be replaced with storage.buildCache.

3. AWS S3

Some authentication attributes in objectStorage.s3.credentials have been removed.

The list of removed keys:

  • objectStorage.s3.credentials.source

  • objectStorage.s3.credentials.secretName

  • objectStorage.s3.credentials.accessKey

  • objectStorage.s3.credentials.secretKey

To replace those keys, you can use one of the new credentials.type values:

  • keys

  • irsa (Kubernetes only)

  • instanceProfile (Standalone only)

source: configuration
before.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      source: configuration (1)
      accessKey: "<<YOUR_ACCESS_KEY>>" (2)
      secretKey: "<<YOUR_SECRET_KEY>>" (2)
after.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      type: keys (1)
      keys:
        accessKey: "<<YOUR_ACCESS_KEY>>" (2)
        secretKey: "<<YOUR_SECRET_KEY>>" (2)
1 The source: configuration should be replaced with type: keys.
2 The accessKey and secretKey keys should be moved under the keys.
secretName
before.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      secretName: example-s3-credentials (1)
after.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      type: keys (2)
      keys:
        secretName: example-s3-credentials (1)
1 The secretName key should be moved under the keys.
2 The credentials.type key should be added with the value keys.

The secret content does not change.

example-s3-credentials-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: example-s3-credentials
stringData:
  accessKey: "<<YOUR_ACCESS_KEY>>"
  secretKey: "<<YOUR_SECRET_KEY>>"
source: environment (Kubernetes only)
before.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      source: "environment" (1)
after.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      type: irsa (1)
      irsa: (2)
        serviceAccountAnnotations: (3)
          ann1: foo
          ann2: "bar.io/baz"
1 The source: environment should be replaced with type: irsa.
2 irsa leverages IAM Roles for Service Accounts to authenticate the container.
3 Additional annotation added to every component connected to S3 Object Storage.
source: environment (Standalone only)
before.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      source: "environment" (1)
after.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      type: instanceProfile (1)
1 The source: environment should be replaced with type: instanceProfile.

Please follow AWS documentation for more information.

4. Google Cloud Storage

objectStorage.type: googleCloud and corresponding configuration block objectStorage.googleCloud have been removed.
A new type, googleCloudStorage, has been introduced as a replacement.

The new type supports a more secure authentication mechanism, such as Workload Identity and Service Account.
Access and Secret keys are no longer supported.

Service Account
before.yaml
objectStorage:
  type: googleCloud (1)
  googleCloud: (2)
    bucket: example-bucket
    credentials:
      source: configuration (3)
      accessKey: "<<YOUR_ACCESS_KEY>>" (4)
      secretKey: "<<YOUR_SECRET_KEY>>" (4)
after.yaml
objectStorage:
  type: googleCloudStorage  (1)
  googleCloudStorage: (2)
    bucket: example-bucket
    credentials:
      type: serviceAccount (3)
      serviceAccount: (4)
        key: | (5)
          {
            "type": "service_account",
            "project_id": "PROJECT_ID",
            "private_key_id": "KEY_ID",
            "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
            "client_email": "SERVICE_ACCOUNT_EMAIL",
            "client_id": "CLIENT_ID",
            "auth_uri": "https://accounts.google.com/o/oauth2/auth",
            "token_uri": "https://accounts.google.com/o/oauth2/token",
            "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
            "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
          }
1 The type: googleCloud should be replaced with type: googleCloudStorage.
2 The googleCloud should be replaced with googleCloudStorage.
3 The source: configuration should be replaced with type: serviceAccount.
4 The accessKey and secretKey keys should be replaced with the serviceAccount.
5 Service account details should be provided.
Service Account (using Secret)
before.yaml
objectStorage:
  type: googleCloud (1)
  googleCloud: (2)
    bucket: example-bucket
    credentials:
      secretName: example-gcs-credentials-access-key (4)
after.yaml
objectStorage:
  type: googleCloudStorage (1)
  googleCloudStorage: (2)
    bucket: example-bucket
    credentials:
      type: serviceAccount (3)
      serviceAccount:
        secretName: example-gcs-credentials-service-account-key (4)
1 The type: googleCloud should be replaced with type: googleCloudStorage.
2 The googleCloud should be replaced with googleCloudStorage.
3 The credentials.type should be added with the value serviceAccount.
4 The secretName should be moved under the serviceAccount.
example-gcs-credentials-access-key.yaml
apiVersion: v1
kind: Secret
metadata:
  name: example-gcs-credentials-access-key
stringData: (1)
  accessKey: "<<YOUR_ACCESS_KEY>>"
  secretKey: "<<YOUR_SECRET_KEY>>"
example-gcs-credentials-service-account-key.yaml
apiVersion: v1
kind: Secret
metadata:
  name: example-gcs-credentials-service-account-key
stringData: (1)
  serviceAccountKey: |
    {
      "type": "service_account",
      "project_id": "PROJECT_ID",
      "private_key_id": "KEY_ID",
      "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
      "client_email": "SERVICE_ACCOUNT_EMAIL",
      "client_id": "CLIENT_ID",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://accounts.google.com/o/oauth2/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
    }
1 The secret content should be changed from direct credentials to service account key.
Workload Identity

You can now provision credentials to Develocity dynamically using Workload Identity.

values.yaml
objectStorage:
  type: googleCloudStorage
  googleCloudStorage:
    bucket: example-bucket
    credentials:
      type: workloadIdentity

5. Microsoft Azure Blob Storage

objectStorage.type: azure and corresponding configuration block objectStorage.azure have been removed.
A new type, azureBlobStorage, has been introduced as a replacement.

The new type supports a more secure authentication mechanism, such as Workload Identity, and Account Information.
SAS and connectionString are no longer supported.

source: connectionString

connectionString is no longer supported. You can use accountInformation instead.

before.yaml
objectStorage:
  type: azure (1)
  azure: (2)
    container: example-container
    credentials:
      source: connectionString (3)
      connectionString: "DefaultEndpointsProtocol=https;AccountName=exampleaccount;AccountKey=dfml3s9rfdl==;EndpointSuffix=core.windows.net" (5)
after.yaml
objectStorage:
  type: azureBlobStorage (1)
  azureBlobStorage: (2)
    container: example-container
    credentials:
      type: accountInformation (3)
      accountInformation: (4)
        accountName: "example-account"
        accountKey: "dfml3s9rfdlsok390wledck30rkdfs"
1 The type: azure should be replaced with type: azureBlobStorage.
2 The azure should be replaced with azureBlobStorage.
3 The source: connectionString should be replaced with type: accountInformation.
4 accountName and accountKey should be provided under the accountInformation key.
5 connectionString should be removed.
secretName

connectionString is no longer supported. You can use accountInformation instead.

before.yaml
objectStorage:
  type: azure (1)
  azure: (2)
    container: example-bucket
    credentials:
      secretName: example-azure-credentials-connection-string (4)
after.yaml
objectStorage:
  type: azureBlobStorage (1)
  azureBlobStorage: (2)
    container: example-bucket
    credentials:
      type: accountInformation (3)
      accountInformation:
        secretName: example-azure-credentials-account-information (4)
1 The type: azure should be replaced with type: azureBlobStorage.
2 The azure should be replaced with azureBlobStorage.
3 The credentials.type should be added with the value accountInformation.
4 The secretName key should be moved under the accountInformation key.
example-azure-credentials-connection-string.yaml
apiVersion: v1
kind: Secret
metadata:
  name: example-azure-credentials-connection-string
stringData: (1)
  connectionString: "DefaultEndpointsProtocol=https;AccountName=exampleaccount;AccountKey=dfml3s9rfdl==;EndpointSuffix=core.windows.net"
example-azure-credentials-account-information.yaml
apiVersion: v1
kind: Secret
metadata:
  name: example-azure-credentials-account-information
stringData: (1)
  accountName: "example-account"
  accountKey: "dfml3s9rfdlsok390wledck30rkdfs"
1 The secret content should be changed from connectionString to accountName/accountKey.
SAS & Workload Identity Federation

You can now provision credentials to Develocity dynamically using Workload Identity.
workloadIdentity is not available in the standalone version, use accountInformation instead.

before.yaml
objectStorage:
  type: azure (1)
  azure: (2)
    container: example-container
    credentials:
      source: sas (3)
      sas: "dfml3s9rfdlsok390wledck30rkdfs" (4)
      endpoint: https://exampleaccount.blob.core.windows.net (4)
after.yaml
objectStorage:
  type: azureBlobStorage  (1)
  azureBlobStorage: (2)
    container: example-container
    credentials:
      type: workloadIdentity (3)
      workloadIdentity:
        accountName: "example-account" (5)
        serviceAccountAnnotations: (6)
            azure.workload.identity/client-id: "example-client-id"
1 The type: azure should be replaced with type: azureBlobStorage.
2 The azure should be replaced with azureBlobStorage.
3 The source: sas should be replaced with type: workloadIdentity.
4 The sas and endpoint keys should be removed.
5 Azure account name.
6 Additional annotation that will be added to every component connected to Azure Blob Storage.

Appendix B: Upgrade command

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.

1. 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)
    --version 2024.3.0 (3)
    ge \(4)
    gradle/gradle-enterprise \(5)
1 The namespace used to install Develocity.
2 Reuse the configuration from the current deployment without any modifications.
3 The Develocity version. If omitted, the latest version will be installed.
4 The release name.
5 The chart name (or archive if using a local chart).

2. 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)
    --version 2024.3.0 \(5)
    ge \(6)
    gradle/gradle-enterprise (7)
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 Develocity version. If omitted, the latest version will be installed.
6 The release name.
7 The chart name (or archive if using a local chart).
This method works correctly only if you add new values or override existing values.
It will not remove any previously set values, so that you may have a corrupted configuration.

Example:

previously-applied-config.yaml
objectStorage:
  type: s3
  s3:
    bucket: example-bucket
    region: example-aws-region-1
    credentials:
      source: environment
new-config.yaml
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)
    --version 2024.3.0 \
    ge \
    gradle/gradle-enterprise
1 Reuse the configuration from the current deployment without any modifications.
2 Additionally, apply the partial configuration from the new-config.yaml file.

We 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 is not ignored during the upgrade process to quickly detect misconfigurations.

3. Complex changes

The --reset-values flag will discard all the values from the previous configuration.

Helm will use the default values defined in the chart during the upgrade, and any custom values previously set (whether through --set, --set-file, --values, or from the original release) will be ignored unless explicitly provided during the upgrade.

Use case: You want to upgrade to Develocity 2024.3 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)
    --version 2024.3.0 (5)
    ge \(6)
    gradle/gradle-enterprise \(7)
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 Develocity version. If omitted, the latest version will be installed.
6 The release name.
7 The chart name (or archive if using a local chart).