Назад к вопросам
Middle
93
questionbank

Как правильно хранить Helm-шаблоны в GitLab?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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 настроены в GitLab CI/CD
    GIT_STRATEGY: none # Не клонировать репозиторий заново

# Пример стадии деплоя (опционально)
# 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.
  • Generic Packages: Если Helm OCI не поддерживается или по другим причинам.
  • Приватный хранилище статических файлов: Например, S3-совместимое хранилище или GitLab Pages.

При использовании GitLab Package Registry (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> на соответствующие значения.