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

154 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Урок 7.1 — Интеграция с CI/CD пайплайнами
## Файлы
| Файл | Описание |
|------|----------|
| `.github/workflows/policy-ci.yaml` | GitHub Actions: тест + валидация + деплой |
| `argocd-application.yaml` | ArgoCD Application для GitOps деплоя |
## Kyverno CLI — локальная проверка
```bash
# Установка
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
```bash
# 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
```bash
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
```bash
# Предварительно установите 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 для политик
```bash
# Создать файл для контроля ревью изменений в политиках
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 систем
```bash
# 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
```