3.4.4 · блок 3
Качество chart и поставка: Helm, Jenkins, GitOps
Качество chart и поставка: Helm, Jenkins, GitOps
Зачем это нужно
Chart, который «работает у автора» — не готов к prod. Нужны lint, review values, immutable tags образов, воспроизводимый путь commit → registry → Git → cluster. Этот урок связывает модули 3.2 (Jenkins), 3.3 (Kubernetes), 3.4 (Helm) и заходит на GitOps (Argo CD в модуле 3.7) — без дублирования UI Argo, но с понятной склейкой.
Capstone курса повторит: Helm + Jenkins + Argo + rollback при fire-drill.
Основные идеи
Quality gates для chart.
1. helm lint — синтаксис и conventions.
2. helm template + валидация против Kubernetes schema (kubeconform, --dry-run=server в CI с доступом к cluster).
3. Policy checks (optional): не latest, limits memory заданы, probes обязательны.
4. Peer review MR в Git — diff values, не только templates.
Версионирование.
- Image tag — из Jenkins:
gitSha-buildNumber, не mutablelatestв prod. - Chart version — semver при изменении templates.
- Release revision — Helm history в кластере; Git commit — source of truth при GitOps.
Helm + Jenkins — типовой pipeline.
| Stage | Действие |
|-------|----------|
| Test app | pytest (repo приложения) |
| Build | docker build & push → `IMAGE_TAG` |
| Chart lint | `helm lint deploy/chart` |
| Render | `helm template release deploy/chart -f values-ci.yaml --set image.tag=$IMAGE_TAG` |
| Publish values | commit/MR в deploy-repo: `prod/image.tag=$IMAGE_TAG` или artifact |
| *(GitOps)* | Argo CD sync (автоматически или manual approval) |
Jenkins может выполнять helm upgrade в dev namespace; для prod — только обновление Git (pull request), чтобы Argo CD был единственным deployer.
Helm + Argo CD — GitOps.
- Git repo
ml-scorer-deploy: chart +environments/prod/values.yaml. - Argo CD Application указывает
path: charts/scorer,helm.valueFiles: [../../environments/prod/values.yaml]. - Sync diff visible в UI; rollback = revert Git commit или Argo history → Helm rollback.
- Values overlays в Argo: несколько
valueFilesили parameters — тот же порядок merge, что в CLI.
Преимущество: кластер = declared in Git; drift виден; audit trail.
Helm + Jenkins + Argo — сквозной сценарий.
1. Developer merge PR в ml-scorer (код).
2. Jenkins: test, build scorer:abc-99, push registry.
3. Jenkins job (или bot) открывает MR в ml-scorer-deploy: bump image.tag: abc-99.
4. Review + merge → Argo CD OutOfSync → Sync → rolling update в prod.
5. Инцидент → revert MR или helm rollback / Argo Rollback → tag abc-98.
Post-deploy checks. Smoke HTTP, проверка /health, canary через Istio (модуль 3.6) — chart должен поддерживать labels/version для traffic split.
Supply chain hygiene. Scan image (Trivy) в Jenkins; pin base image digest в values; sign artifacts — advanced, но знайте направление.
Documentation. README chart: обязательные values, пример install, таблица environments overlays.
Как это выглядит на практике
Структура двух репозиториев (частый паттерн):
ml-scorer/ # код + Dockerfile + Jenkinsfile
ml-scorer-deploy/ # charts/scorer + environments/*/values.yaml
values overlays:
environments/dev/values.yaml # replicaCount: 1
environments/staging/values.yaml # integration tests
environments/prod/values.yaml # autoscaling, prod tags
Jenkinsfile (deploy repo) или multibranch на app repo с shared library — lint chart на каждый MR.
Fire-drill (учебный):
1. Выкатить заведомо broken tag (fail readiness).
2. Argo/Helm rollback.
3. Postmortem: какой stage pipeline не поймал ошибку.
Практикум модуля: свой chart для inference + upgrade/rollback; опишите, куда встанет Argo CD в следующем модуле.
Что сделать после занятия
- [ ] Добавьте stage
helm lintв Jenkinsfile (app или deploy repo). - [ ] Подготовьте три values overlays и таблицу отличий dev/staging/prod.
- [ ] Нарисуйте sequence diagram: developer → Jenkins → registry → Git → Helm/Argo → Pod.