helm-gcs
helm-gcs
is a helm plugin that allows you to manage private helm repositories on Google Cloud Storage aka buckets.
Installation
Install the stable version:
$ helm plugin install https://github.com/hayorov/helm-gcs.git
Update to latest
$ helm plugin update gcs
Install a specific version:
$ helm plugin install https://github.com/hayorov/helm-gcs.git --version 0.4.0
Quick start
# Init a new repository
$ helm gcs init gs://bucket/path
# Add your repository to Helm
$ helm repo add repo-name gs://bucket/path
# Push a chart to your repository
$ helm gcs push chart.tar.gz repo-name
# Update Helm cache
$ helm repo update
# Fetch the chart
$ helm fetch repo-name/chart
# Remove the chart
$ helm gcs rm chart repo-name
Documentation
Authentification
To authenticate against GCS you can:
-
Use the application default credentials
-
Use a service account via
export GOOGLE_APPLICATION_CREDENTIALS=credentials.json
system variable -
Use a temporary OAuth 2.0 access token via
export GOOGLE_OAUTH_ACCESS_TOKEN=<MY_ACCESS_TOKEN>
environment variable. When used, plugin will ignore other authentification methods.
See GCP documentation for more information.
Create a repository
First, you need to create a bucket on GCS, which will be used by the plugin to store your charts.
Then you have to initialize a repository at a specific location in your bucket:
$ helm gcs init gs://your-bucket/path
You can create a repository anywhere in your bucket.
This command does nothing if a repository already exists at the given location.
You can now add the repository to helm:
$ helm repo add my-repository gs://your-bucket/path
Push a chart
Package the chart:
$ helm package my-chart
This will create a file my-chart-<semver>.tgz
.
Now, to push the chart to the repository my-repository
:
$ helm gcs push my-chart-<semver>.tgz my-repository
Push the chart with additional option by providing metadata to the object :
$ helm gcs push my-chart-<semver>.tgz my-repository --metadata env=my-env,region=europe-west4
Push the chart with additional option by providing path inside bucket :
This would allow us to structure the content inside the bucket, and stores at gs://your-bucket/my-application/my-chart-<semver>.tgz
$ helm gcs push my-chart-<semver>.tgz my-repository --bucketPath=my-application
If you got this error:
Error: update index file: index is out-of-date
That means that someone/something updated the same repository, at the same time as you. You just need to execute the command again or, next time, use the --retry
flag to automatically retry to push the chart.
Once the chart is uploaded, use helm to fetch it:
# Update local repo cache if necessary
# $ helm repo update
$ helm fetch my-chart
This command does nothing if the same chart (name and version) already exists.
Using
--retry
is highly recommended in a CI/CD environment.
Remove a chart
You can remove all the versions of a chart from a repository by running:
$ helm gcs remove my-chart my-repository
To remove a specific version, simply use the --version
flag:
$ helm gcs remove my-chart my-repository --version 0.1.0
Don't forget to run
helm repo up
after you remove a chart.
Troubleshooting
You can use the global flag --debug
, or set HELM_GCS_DEBUG=true
to get more informations. Please write an issue if you find any bug.
Helm versions
Starting from 0.3 helm-gcs works with Helm 3, if you want to use it with Helm 2 please install the latest version that supports it
helm plugin install https://github.com/hayorov/helm-gcs.git --version 0.2.2 # helm 2 compatible