Files
2026-04-08 20:22:14 +07:00
..
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00
2026-04-08 20:22:14 +07:00

Урок 7.1 — Интеграция с CI/CD пайплайнами

Файлы

Файл Описание
.github/workflows/policy-ci.yaml GitHub Actions: тест + валидация + деплой
argocd-application.yaml ArgoCD Application для GitOps деплоя

Kyverno CLI — локальная проверка

# Установка
brew install kyverno               # macOS
# или
curl -LO https://github.com/kyverno/kyverno/releases/latest/download/kyverno-cli_linux_amd64.tar.gz
tar -xzf kyverno-cli_*.tar.gz && sudo mv kyverno /usr/local/bin/

kyverno version

# Проверить манифест против политики (без кластера)
kyverno apply \
  ../../02-validation/01-resource-validation/require-resource-limits.yaml \
  --resource ../../02-validation/01-resource-validation/test-resources/pod-no-limits.yaml

# Проверить папку политик против папки манифестов
kyverno apply ../../02-validation/ \
  --resource ./test-k8s-manifests/ \
  --table \
  --detailed-results

# Запустить тесты
kyverno test ../../02-validation/01-resource-validation/tests/

Локальная симуляция CI pipeline

# 1. Сгенерировать манифесты из Helm
helm template my-app ./helm-chart/ \
  -f ./helm-chart/values-production.yaml \
  > /tmp/manifests.yaml

# 2. Запустить Kyverno проверку
kyverno apply ../../02-validation/ \
  --resource /tmp/manifests.yaml \
  --table 2>&1 | tee results.txt

# 3. Проверить наличие нарушений
if grep -q "^| FAIL" results.txt; then
  echo "❌ Policy violations found!"
  cat results.txt
  exit 1
else
  echo "✅ All policies passed"
fi

Тестовые манифесты для CI

mkdir -p test-k8s-manifests

# Манифест с нарушениями — pipeline должен упасть
cat > test-k8s-manifests/bad-deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: bad-app
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: bad-app
  template:
    metadata:
      labels:
        app: bad-app
    spec:
      containers:
      - name: app
        image: nginx:latest      # нарушение: latest тег
        # нет resources          # нарушение: нет limits
EOF

# Запустить проверку — должна быть ошибка
kyverno apply ../../02-validation/ \
  --resource test-k8s-manifests/bad-deployment.yaml \
  --table
# Ожидаем: FAIL для disallow-latest-tag и require-resource-limits

Настройка GitOps с ArgoCD

# Предварительно установите ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd \
  -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Применить Application
kubectl apply -f argocd-application.yaml

# Проверить статус синхронизации
kubectl get application kyverno-policies -n argocd

# Принудительная синхронизация
argocd app sync kyverno-policies

# История деплоев
argocd app history kyverno-policies

# Откат к предыдущей версии
argocd app rollback kyverno-policies 1

CODEOWNERS для политик

# Создать файл для контроля ревью изменений в политиках
cat > .github/CODEOWNERS <<EOF
# Изменения в security политиках — обязательное ревью от security team
policies/02-validation/02-security/**  @company/security-team

# Изменения в generation политиках — platform team
policies/04-generation/**              @company/platform-team

# Helm chart — оба
policies/05-variables/03-templates/**  @company/platform-team @company/security-team
EOF

JUnit отчёт для CI систем

# Kyverno CLI может генерировать JUnit XML
kyverno test policies/ \
  --junit-report kyverno-junit.xml

# GitLab CI — загрузка артефакта
# artifacts:
#   reports:
#     junit: kyverno-junit.xml

# GitHub Actions — публикация результатов
# uses: dorny/test-reporter@v1
# with:
#   artifact: kyverno-junit
#   name: Kyverno Tests
#   path: kyverno-junit.xml
#   reporter: java-junit