Sobes.tech
Middle

Comment stocker correctement les modèles Helm dans GitLab?

sobes.tech IA

Réponse de l'IA

Il est recommandé de stocker les modèles Helm dans un référentiel Git séparé dans GitLab. Cela permet de les versionner, d'appliquer des pipelines CI/CD pour le linting et l'empaquetage, ainsi que de gérer l'accès.

La structure du référentiel peut être la suivante :

my-helm-charts/
├── Chart.yaml          // Informations méta du chart
├── values.yaml         // Valeurs par défaut
├── templates/          // Modèles de manifestes Kubernetes
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Charts dépendants (optionnel)
    └── redis/
        └── ...

Pour automatiser, on peut utiliser GitLab CI/CD. Exemple de .gitlab-ci.yml :

stages:
  - lint
  - package
  - deploy # Optionnel

variables:
  HELM_VERSION: "3.x.x" # Indique la version actuelle de Helm
  HELM_REGISTRY: "my-gitlab-registry" # Nom de votre registre dans 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 # Utilisez une image avec Helm
  script:
    - helm lint ./my-chart-directory # Chemin vers le répertoire de votre chart

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Création de l'archive .tgz
  artifacts:
    paths:
      - ./*.tgz # Sauvegarde du chart empaqueté en tant qu'artéfact

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Configuration du registre Helm dans 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 vers le registre OCI
  variables:
    # Assurez-vous que les variables CI_REGISTRY_USER et CI_REGISTRY_PASSWORD sont configurées dans GitLab CI/CD
    GIT_STRATEGY: none # Ne pas re-cloner le dépôt

# Exemple d'étape de déploiement (optionnel)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Configuration des dépendances (par ex., kubectl, fournisseurs cloud)
#     # 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 # Ou autre environnement
#   when: manual # Ou en_branch, etc.

Pour stocker les charts empaquetés (.tgz), on peut utiliser :

  • Registry de packages GitLab (charts Helm OCI) : Méthode recommandée. Permet de stocker directement dans GitLab des charts au format OCI.
  • Packages génériques : Si Helm OCI n'est pas supporté ou pour d'autres raisons.
  • Stockage privé de fichiers statiques : Par exemple, stockage compatible S3 ou GitLab Pages.

En utilisant le Registry de packages GitLab (charts Helm OCI), pour l'ajouter comme dépôt Helm :

helm registry login registry.gitlab.com
helm repo add my-gitlab-charts oci://registry.gitlab.com/<votre-namespace>/<votre-projet-de-helm-charts>

Remplacez <votre-namespace> et <votre-projet-de-helm-charts> par les valeurs appropriées.