154 lines
4.4 KiB
Markdown
154 lines
4.4 KiB
Markdown
# Урок 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
|
||
```
|