Урок 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