Helm charts
Everything that runs on CPP’s CCM AKS clusters is deployed with Helm — application services, the istio service mesh, monitoring, and the supporting products around them. The charts all live in one repository, cpp-helm-chart, with one directory per chart.
This section is the catalogue of those charts: what exists, what each one is for, and how to use and change them.
How CPP charts differ from CNP charts
CPP has its own chart set alongside the Cloud Native Platform’s, and the two follow different models:
- CNP: every service repository contains its own small application chart, which depends on a centrally-maintained base chart such as
chart-java— see the CNP Helm charts section. - CPP: services do not have a chart of their own. A small set of shared application charts (
springboot-app,wildfly-app, and friends) is maintained centrally incpp-helm-chart, and each service supplies only its values — fromcpp-aks-deploywhen deployed by Helmsman, or from acpp-flux-configHelmRelease when deployed by Flux.
The intent is the same in both models — services describe configuration, not Kubernetes YAML — but on CPP the chart templates themselves are shared, so a template improvement lands in cpp-helm-chart once and every consuming service picks it up on its next chart version bump.
Where charts are published
Each chart carries its own semantic version in Chart.yaml, and the repository’s Azure DevOps pipeline publishes charts to Azure Container Registry as OCI artifacts:
- On a pull request — every changed chart is packaged as
<version>-PR<number>and pushed tooci://crmdvrepo01.azurecr.io/charts/pr-images, so you can test a chart change against a real deployment before it merges. Changed charts are also linted, unit tested and dry-run installed against the dev cluster. - On merge to
main— any chart whoseChart.yamlversion is not yet in the registry is packaged and pushed tooci://crmdvrepo01.azurecr.io/charts/<chart>. Released versions are imported into the live ACR from there.
Consumers always pin an exact chart version, so publishing a new version changes nothing until a consuming repository chooses to move to it.
How charts are deployed
Both deployment routes consume the same published charts:
- Helmsman — the established route for CCM services. cpp-aks-deploy declares each release in its
helmsman.tomlfiles and renders per-environment values with Ansible. - Flux — the newer GitOps route, adopted recently for CCM applications. cpp-flux-config declares a
HelmReleaseper service and Flux reconciles merged changes into the clusters.
Using and customising charts covers both routes in detail, and Tools and configuration explains which route a given service uses and which pipelines drive them.
Related documentation
- Tools and configuration — where CPP deployment configuration and pipelines live
- CNP Helm charts — the Cloud Native Platform’s equivalent section
- Helm chart versioning — the HMCTS-wide approach to chart versioning and pinning