Sobes.tech
Middle

Jak prawidłowo przechowywać szablony Helm w GitLab?

sobes.tech AI

Odpowiedź od AI

Zaleca się przechowywanie szablonów Helm w osobnym repozytorium Git w GitLab. Pozwala to na wersjonowanie, stosowanie pipeline'ów CI/CD do lintowania i pakowania, a także zarządzanie dostępem.

Struktura repozytorium może wyglądać tak:

my-helm-charts/
├── Chart.yaml          // Informacje meta o chartcie
├── values.yaml         // Domyślne wartości
├── templates/          // Szablony manifestów Kubernetes
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Zależne chartty (opcjonalnie)
    └── redis/
        └── ...

Do automatyzacji można użyć GitLab CI/CD. Przykład .gitlab-ci.yml:

stages:
  - lint
  - package
  - deploy # Opcjonalnie

variables:
  HELM_VERSION: "3.x.x" # Podaj aktualną wersję Helm
  HELM_REGISTRY: "my-gitlab-registry" # Nazwa Twojego rejestru w 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 # Użyj obrazu z Helm
  script:
    - helm lint ./my-chart-directory # Ścieżka do katalogu z chartem

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Tworzenie archiwum .tgz
  artifacts:
    paths:
      - ./*.tgz # Zapisanie spakowanego chartu jako artefaktu

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Konfiguracja rejestru Helm w 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 # Wysyłka do rejestru OCI
  variables:
    # Upewnij się, że zmienne CI_REGISTRY_USER i CI_REGISTRY_PASSWORD są ustawione w GitLab CI/CD
    GIT_STRATEGY: none # Nie klonuj repozytorium ponownie

# Przykład etapu deploy (opcjonalnie)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Konfiguracja zależności (np. kubectl, dostawcy chmury)
#     # 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 # Lub inne środowisko
#   when: manual # Lub on_branch, itd.

Aby przechowywać spakowane chartty (.tgz), można użyć:

  • Rejestru pakietów GitLab (charts Helm OCI): Zalecana metoda. Pozwala przechowywać chartty w formacie OCI bezpośrednio w GitLab.
  • Pakiety ogólne: Jeśli Helm OCI nie jest obsługiwany lub z innych powodów.
  • Prywatne przechowywanie statycznych plików: Na przykład, kompatybilne z S3 lub GitLab Pages.

Przy użyciu Rejestru pakietów GitLab (charts Helm OCI), aby dodać go jako repozytorium Helm:

helm registry login registry.gitlab.com
helm repo add my-gitlab-charts oci://registry.gitlab.com/<twój-namespace>/<twój-projekt-helm>

Zastąp <twój-namespace> i <twój-projekt-helm> odpowiednimi wartościami.