Sobes.tech
Middle

Cum să stocați corect șabloanele Helm în GitLab?

sobes.tech AI

Răspuns de la AI

Se recomandă stocarea șabloanelor Helm într-un depozit Git separat în GitLab. Acest lucru permite versiunea lor, aplicarea pipeline-urilor CI/CD pentru linting și împachetare, precum și gestionarea accesului.

Structura depozitului poate arăta astfel:

my-helm-charts/
├── Chart.yaml          // Informații meta despre chart
├── values.yaml         // Valori implicite
├── templates/          // Șabloane de manifest Kubernetes
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Chart-uri dependente (opțional)
    └── redis/
        └── ...

Pentru automatizare, se poate folosi GitLab CI/CD. Exemplu .gitlab-ci.yml:

stages:
  - lint
  - package
  - deploy # Opțional

variables:
  HELM_VERSION: "3.x.x" # Indicați versiunea curentă Helm
  HELM_REGISTRY: "my-gitlab-registry" # Numele registry-ului dvs. în 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 # Utilizați o imagine cu Helm
  script:
    - helm lint ./my-chart-directory # Calea către directorul chart-ului

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Crearea arhivei .tgz
  artifacts:
    paths:
      - ./*.tgz # Salvarea chart-ului împachetat ca artefact

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Configurarea registry-ului Helm în 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 # Împingere în registry-ul OCI
  variables:
    # Asigurați-vă că variabilele CI_REGISTRY_USER și CI_REGISTRY_PASSWORD sunt configurate în GitLab CI/CD
    GIT_STRATEGY: none # Nu reclona depozitul

# Exemplu de etapă de deploy (opțional)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Configurarea dependențelor (de exemplu, kubectl, furnizori 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 # Sau alt mediu
#   when: manual # Sau on_branch, etc.

Pentru stocarea chart-urilor împachetate (.tgz), se poate folosi:

  • Registry de pachete GitLab (charts Helm OCI): Metodă recomandată. Permite stocarea chart-urilor în format OCI direct în GitLab.
  • Pachete generice: Dacă Helm OCI nu este suportat sau din alte motive.
  • Stocare privată de fișiere statice: De exemplu, stocare compatibilă cu S3 sau GitLab Pages.

Pentru adăugarea ca depozit Helm, dacă se folosește Registry de pachete GitLab (charts Helm OCI):

helm registry login registry.gitlab.com
helm repo add my-gitlab-charts oci://registry.gitlab.com/<numele-tău-de-namespace>/<proiectul-tău-helm>

Înlocuiți <numele-tău-de-namespace> și <proiectul-tău-helm> cu valorile corespunzătoare.