I tried helmfile, but helm state weirdness became enough of an issue that I investigated `kubectl apply -k` (which uses `kustomize`), and after I got it working it felt like a significant improvement over helm+helmfile. (But I still use `helm` to generate manifests.)
Whenever I can, I use helmfile[0] for storing variables for helm since it does add a declarative layer on top of helm.
0 - https://github.com/roboll/helmfile