Sobes.tech
Middle

Hoe bewaar je Helm-sjablonen correct in GitLab?

sobes.tech AI

Antwoord van AI

Het wordt aanbevolen om Helm-sjablonen op te slaan in een aparte Git-repository in GitLab. Dit maakt versiebeheer mogelijk, het toepassen van CI/CD-pijplijnen voor linting en packaging, en het beheren van toegang.

De structuur van de repository kan er als volgt uitzien:

my-helm-charts/
├── Chart.yaml          // Meta-informatie over de chart
├── values.yaml         // Standaardwaarden
├── templates/          // Kubernetes manifest sjablonen
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Afhankelijke charts (optioneel)
    └── redis/
        └── ...

Voor automatisering kan GitLab CI/CD worden gebruikt. Voorbeeld .gitlab-ci.yml:

stages:
  - lint
  - package
  - deploy # Optioneel

variables:
  HELM_VERSION: "3.x.x" # Geef de actuele Helm-versie op
  HELM_REGISTRY: "my-gitlab-registry" # Naam van je registry in GitLab

before_script:
  - curl https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz | tar xz
  - mv linux-amd64/helm /usr/local/bin/helm
  - helm version

lint_chart:
  stage: lint
  image: docker.io/alpine/helm:latest # Gebruik een image met Helm
  script:
    - helm lint ./my-chart-directory # Pad naar je chart directory

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Maak een .tgz-archief
  artifacts:
    paths:
      - ./*.tgz # Bewaar het verpakte chart als artifact

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Configureer de Helm registry in GitLab
    - HE=helm-registry.$CI_SERVER_HOST helm registry login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
    - helm push my-chart-*.tgz oci://$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$HELM_REGISTRY # Push naar OCI registry
  variables:
    # Zorg dat de variabelen CI_REGISTRY_USER en CI_REGISTRY_PASSWORD zijn ingesteld in GitLab CI/CD
    GIT_STRATEGY: none # Kloneer de repository niet opnieuw

# Voorbeeld van een deploy-stap (optioneel)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Configureer afhankelijkheden (bijv. kubectl, cloud providers)
#     # helm upgrade --install my-release oci://$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$HELM_REGISTRY/my-chart --version latest -n my-namespace -f values.yaml
#   environment: production # Of andere omgeving
#   when: manual # Of on_branch, etc.

Voor het opslaan van verpakte charts (.tgz) kan worden gebruikt:

  • GitLab Package Registry (Helm OCI charts): Aanbevolen methode. Hiermee kunnen charts direct in OCI-formaat in GitLab worden opgeslagen.
  • Generieke pakketten: Als Helm OCI niet wordt ondersteund of om andere redenen.
  • Privé statisch bestand opslag: Bijvoorbeeld S3-compatibele opslag of GitLab Pages.

Bij gebruik van de GitLab Package Registry (Helm OCI), voeg deze toe als Helm-repository:

helm registry login registry.gitlab.com
helm repo add my-gitlab-charts oci://registry.gitlab.com/<jouw-namespace>/<jouw-helm-project>

Vervang <jouw-namespace> en <jouw-helm-project> door de juiste waarden.