6
votes

Disclaimer: I'm new to Kubernetes and Helm.

I am trying to install a Helm chart using the brand new Helm Hub and for the life of me I can't figure out how this is supposed to work.

A new version of Helm (3.0) was released only a few months ago with significant changes, one of them is that it doesn't come with any repositories configured. Helm released the Helm Hub which is supposed to be a centralized service to find charts.

I am trying to install a CloudBees Jenkins chart. This is what I get when I search the hub:

[me@localhost tmp]$ helm search hub cloudbees -o yaml
- app_version: 2.222.1.1
  description: The Continuous Delivery Solution for Enterprises
  url: https://hub.helm.sh/charts/cloudbees/cloudbees-core
  version: 3.12.0+80c17a044bc4
- app_version: 9.2.0.139827
  description: A Helm chart for CloudBees Flow
  url: https://hub.helm.sh/charts/cloudbees/cloudbees-flow
  version: 1.1.1
- app_version: 9.2.0.139827
  description: A Helm chart for CloudBees Flow Agent
  url: https://hub.helm.sh/charts/cloudbees/cloudbees-flow-agent
  version: 1.1.1
- app_version: 2.204.3.7
  description: CloudBees Jenkins Distribution provides development teams with a highly
    dependable, secure, Jenkins environment curated from the most recent supported
    Jenkins release. The distribution comes with a recommended catalog of tested plugins
    available through the CloudBees Assurance Program.
  url: https://hub.helm.sh/charts/cloudbees/cloudbees-jenkins-distribution
  version: 2.204.307
- app_version: 2.0.2
  description: Helm chart for sidecar injector webhook deployment
  url: https://hub.helm.sh/charts/cloudbees/cloudbees-sidecar-injector
  version: 2.0.2

So it looks like the chart I am looking for is available: cloudbees-jenkins-distribution.

However, I can't find any way to install from the hub or to add a repository based on the hub output. Some of the things I've tried:

[me@localhost tmp]$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "incubator" chart repository
...Successfully got an update from the "gitlab" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈ 

[me@localhost tmp]$ helm install myJenkins cloudbees-jenkins-distribution
Error: failed to download "cloudbees-jenkins-distribution" (hint: running `helm repo update` may help)

[me@localhost tmp]$ helm repo add cbRepo https://hub.helm.sh/charts/cloudbees
Error: looks like "https://hub.helm.sh/charts/cloudbees" is not a valid chart repository or cannot be reached: error converting YAML to JSON: yaml: line 8: mapping values are not allowed in this context

[me@localhost tmp]$ helm repo add cbRepo https://hub.helm.sh/charts/cloudbees/cloudbees-jenkins-distribution
Error: looks like "https://hub.helm.sh/charts/cloudbees/cloudbees-jenkins-distribution" is not a valid chart repository or cannot be reached: error converting YAML to JSON: yaml: line 8: mapping values are not allowed in this context

The documentation really doesn't say much about how I'm supposed to go from the Helm Hub to an installed chart. What am I missing here?

3

3 Answers

7
votes

Helm Hub is NOT like a repo that you can add and install from it helm charts. It doesn't expose valid repos urls either. That's why you're getting the error message like below:

Error: looks like "https://hub.helm.sh/charts/cloudbees" is not a valid chart repository ...

when you're trying to run helm repo add on https://hub.helm.sh based urls.

I know it may seem pretty confusing but it just works like that, by its very design. Please refer to this discussion on Github. Specifically this comment explains it a bit more and I hope it also answers your question:

hub.helm.sh is not the helm repo, so it will not work the you trying, it is only meant to view and search for charts. check in there for chart repository and it that way, then you will be able to install the charts.

Unfortunatelly the official helm documentation doesn't explain it well enough. It mentions only:

helm search hub searches the Helm Hub, which comprises helm charts from dozens of different repositories.

But it shows "no explanation how to get from helm search repo which shows hub.helm.sh to helm repo add which magically shows the a new url to use." - as one user wrote in the thread mentioned above.

1
votes

Despite that Helm hub doesn't have a convenient way to get a repository url, it has a github repo that contains all vendors repository in one file.
We can use that fact to create a workaround, that you can improve using automation tools like bash,awk, sed, perl, python, etc.

Let's imagine we want to get the helm chart url using helm v3 and command line tools only.
(helm3 is just a symlink for helm v3.1.2)

Let's get the repository name for jenkins distribution for cloudbees vendor

$ helm3 search hub jenkins --max-col-width 1000 | grep cloudbees | tr "\t" "\n"

https://hub.helm.sh/charts/cloudbees/cloudbees-core                
3.12.0+80c17a044bc4
2.222.1.1    
The Continuous Delivery Solution for Enterprises                                                                                                               

https://hub.helm.sh/charts/cloudbees/cloudbees-jenkins-distribution
2.204.307          
2.204.3.7    
CloudBees Jenkins Distribution provides development teams with a highly dependable, secure, Jenkins environment curated from the most recent supported Jenkins 
release. The distribution comes with a recommended catalog of tested plugins available through the CloudBees Assurance Program.

As we can see the chart page on Helm hub is

# https://hub.helm.sh/charts/cloudbees/cloudbees-jenkins-distribution
#                            ^^^^^^^^^

so we can assume that repository name is also cloudbees

Let's find the url for cloudbees helm repository

$ curl -s https://raw.githubusercontent.com/helm/hub/master/config/repo-values.yaml | grep cloudbees

    - name: cloudbees
      url: https://charts.cloudbees.com/public/cloudbees

Now we can add this repository using helm repo command:

$ helm3 repo add cloudbees https://charts.cloudbees.com/public/cloudbees

"cloudbees" has been added to your repositories

Don't forget to update:

$ helm3 repo update

Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "cloudbees" chart repository
Update Complete. ⎈ Happy Helming!⎈ 

To find the chart name let's repeat search in repo

$ helm3 search repo jenkins

NAME                                            CHART VERSION           APP VERSION     DESCRIPTION                                       
cloudbees/cloudbees-jenkins-distribution        2.204.307               2.204.3.7       CloudBees Jenkins Distribution provides develop...
cloudbees/cloudbees-core                        3.12.0+80c17a044bc4     2.222.1.1       The Continuous Delivery Solution for Enterprises  

And finally we can install the chart:

$ helm3 install cloudbees/cloudbees-jenkins-distribution --version 2.204.307

Happy Helming3 ! :)

0
votes

True, helm search hub cloudbees does not return the url of the repo.
What you can do from the result of helm search hub cloudbees is helm install $urlFromBefore:

$ helm search hub cloudbees
- app_version: 2.222.1.1
  description: The Continuous Delivery Solution for Enterprises
  url: https://hub.helm.sh/charts/cloudbees/cloudbees-core
...

$ helm install cloudbees https://hub.helm.sh/charts/cloudbees/cloudbees-core

from helm/helm#7419


To get the repo url, you can do the search on https://hub.helm.sh or
do a work around when you want the repo url from console:

$ curl https://hub.helm.sh/api/chartsvc/v1/charts/search?q=rancher | json_pp

The repo url is in key url in repo (data[...].attributes.repo.url). (json_pp is optional. It pretty prints json, which helps me to read it.)

Now continue with

# variables names show the place in json output from above
helm repo add $data_attributes_repo_name $data_attributes_repo_url
helm repo update
helm install $data_attributes_repo_name/$data_attributes_name