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_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> вставте відповідні значення.