Helm Module
The Helm module provides integration with Helm, the package manager for Kubernetes. This module allows you to manage Helm charts, repositories, and deployments in your Dagger pipelines.
Features
- Helm chart management
- Repository handling
- Chart installation and upgrades
- Package dependencies
- Version control
- Custom values support
- Multi-platform compatibility
Installation
To use the Helm module in your Dagger pipeline:
import (
"dagger.io/dagger"
"github.com/felipepimentel/daggerverse/libraries/helm"
)
Usage Examples
Basic Helm Chart Installation
func (m *MyModule) Example(ctx context.Context) error {
helm := dag.Helm().New()
// Add repository and install chart
return helm.
AddRepo(ctx, "bitnami", "https://charts.bitnami.com/bitnami").
Install(
ctx,
"my-release",
"bitnami/nginx",
"1.0.0",
dag.File("./values.yaml"),
)
}
Chart Upgrade
func (m *MyModule) UpgradeChart(ctx context.Context) error {
helm := dag.Helm().New()
// Upgrade existing release
return helm.Upgrade(
ctx,
"my-release",
"bitnami/nginx",
"1.1.0",
dag.File("./values.yaml"),
)
}
Repository Management
func (m *MyModule) ManageRepos(ctx context.Context) error {
helm := dag.Helm().New()
// Add and update repositories
return helm.
AddRepo(ctx, "stable", "https://charts.helm.sh/stable").
AddRepo(ctx, "jetstack", "https://charts.jetstack.io").
UpdateRepos(ctx)
}
GitHub Actions Integration
You can use this module in your GitHub Actions workflows:
name: Helm Operations
on: [push]
jobs:
helm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Helm Chart
uses: dagger/dagger-action@v1
with:
module: github.com/felipepimentel/daggerverse/libraries/helm
args: |
do -p '
helm := Helm().New()
helm.AddRepo(
ctx,
"bitnami",
"https://charts.bitnami.com/bitnami",
).Install(
ctx,
"my-release",
"bitnami/nginx",
"1.0.0",
dag.File("./values.yaml"),
)
'
API Reference
Helm
Main module struct that provides access to Helm functionality.
Constructor
New() *Helm
- Creates a new Helm instance
- Default version: “latest”
- Default platform: “linux/amd64”
Methods
AddRepo(ctx context.Context, name string, url string) *Helm
- Adds a Helm repository
- Parameters:
name
: Repository nameurl
: Repository URL
UpdateRepos(ctx context.Context) error
- Updates all configured repositories
Install(ctx context.Context, release string, chart string, version string, values *File) error
- Installs a Helm chart
- Parameters:
release
: Release namechart
: Chart referenceversion
: Chart versionvalues
: Values file
Upgrade(ctx context.Context, release string, chart string, version string, values *File) error
- Upgrades a Helm release
- Parameters:
release
: Release namechart
: Chart referenceversion
: Chart versionvalues
: Values file
Best Practices
- Repository Management
- Use official and trusted repositories
- Keep repositories updated
- Document repository sources
- Version Control
- Pin chart versions
- Test upgrades in staging
- Track version changes
- Values Management
- Use version-controlled values files
- Document values changes
- Validate values before deployment
- Security
- Follow Helm security best practices
- Use signed charts when possible
- Regularly update dependencies
Troubleshooting
Common issues and solutions:
- Repository Issues
Error: failed to fetch repository Solution: Check repository URL and connectivity
- Chart Installation Failures
Error: chart not found Solution: Verify chart name and repository configuration
- Version Conflicts
Error: incompatible versions Solution: Check version compatibility and dependencies
Values File Example
# values.yaml
replicaCount: 3
image:
repository: nginx
tag: 1.21.0
pullPolicy: IfNotPresent
service:
type: LoadBalancer
port: 80
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
Advanced Usage
Custom Chart Development
func (m *MyModule) DevelopChart(ctx context.Context) error {
helm := dag.Helm().New()
// Package and install local chart
return helm.
Package(ctx, "./my-chart", "1.0.0").
Install(
ctx,
"my-release",
"./my-chart-1.0.0.tgz",
"",
dag.File("./values.yaml"),
)
}
Dependency Management
func (m *MyModule) ManageDeps(ctx context.Context) error {
helm := dag.Helm().New()
// Update chart dependencies
return helm.
AddRepo(ctx, "deps", "https://charts.deps.io").
UpdateDependencies(ctx, "./my-chart")
}