Sobes.tech
Middle

Как правилно да съхранявате Helm шаблоните в GitLab?

sobes.tech AI

Отговор от AI

Препоръчително е Helm шаблоните да се съхраняват в отделен Git репозитори в GitLab. Това позволява версиониране, прилагане на CI/CD пайплайни за линтинг и опаковане, както и управление на достъпа.

Структурата на репозитория може да изглежда така:

my-helm-charts/
├── Chart.yaml          // Метаданни за чарта
├── values.yaml         // Стойности по подразбиране
├── templates/          // Шаблони за манифести на Kubernetes
│   ├── deployment.yaml
│   ├── ingress.yaml
│   └── service.yaml
└── charts/             // Зависими чарта (по желание)
    └── redis/
        └── ...

За автоматизация може да се използва GitLab CI/CD. Пример .gitlab-ci.yml:

stages:
  - lint
  - package
  - deploy # По желание

variables:
  HELM_VERSION: "3.x.x" # Актуална версия на Helm
  HELM_REGISTRY: "my-gitlab-registry" # Името на вашия регистър в 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 # Използвайте образ с Helm
  script:
    - helm lint ./my-chart-directory # Път към директорията с вашия чарт

package_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    - helm package ./my-chart-directory # Създаване на архив .tgz
  artifacts:
    paths:
      - ./*.tgz # Запазване на опакования чарт като артефакт

publish_chart:
  stage: package
  image: docker.io/alpine/helm:latest
  script:
    # Настройка на Helm регистъра в 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 # Публикуване в OCI регистър
  variables:
    # Уверете се, че променливите CI_REGISTRY_USER и CI_REGISTRY_PASSWORD са настроени
    GIT_STRATEGY: none # Не клонирайте репозитория отново

# Пример за deploy етап (по желание)
# deploy_chart:
#   stage: deploy
#   image: alpine/helm:latest
#   script:
#     # Настройка на зависимости (напр. kubectl, облачни доставчици)
#     # 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 # Или друго околна среда
#   when: manual # Или on_branch и т.н.

За съхранение на опакованите чарти (.tgz) може да се използва:

  • GitLab Package Registry (Helm OCI charts): Препоръчителният начин. Позволява съхраняване на чарти в OCI формат директно в GitLab.
  • Общи пакети: Ако Helm OCI не се поддържа или по други причини.
  • Частно статично хранилище: Например S3-съвместимо хранилище или GitLab Pages.

При използване на Helm OCI регистър, за да го добавите като Helm репозиториум:

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

Заменете <your-namespace> и <your-helm-chart-project> с подходящите стойности.