149 lines
3.5 KiB
Markdown
149 lines
3.5 KiB
Markdown
# 🎉 CI/CD Pipeline - Complete Guide
|
||
|
||
## ✅ Что мы построили - Production Ready System!
|
||
|
||
Полноценный CI/CD pipeline с автоматическим деплоем от Git до Production.
|
||
|
||
---
|
||
|
||
## 📦 Компоненты системы
|
||
|
||
### 1. Jenkins (CI/CD Engine)
|
||
```
|
||
URL: http://jenkins.thedevops.dev
|
||
Namespace: jenkins
|
||
|
||
Установлено:
|
||
✅ Docker CLI (для build & push)
|
||
✅ kubectl v1.28.0 (для deploy verification)
|
||
✅ ServiceAccount + RBAC (для K8s API)
|
||
✅ Auto-scan (проверяет Git каждый час)
|
||
```
|
||
|
||
### 2. Gitea (Git Repository)
|
||
```
|
||
URL: http://gitea.thedevops.dev
|
||
Repository: k3s-gitops
|
||
|
||
Содержит:
|
||
✅ apps/demo-nginx/ - все манифесты приложения
|
||
✅ apps/jenkins/ - конфигурация Jenkins
|
||
✅ Jenkinsfile - CI/CD pipeline
|
||
✅ Webhook настроен (опционально)
|
||
```
|
||
|
||
### 3. ArgoCD (GitOps)
|
||
```
|
||
URL: https://argocd.thedevops.dev
|
||
Application: demo-nginx
|
||
|
||
Функции:
|
||
✅ Автоматически синхронизирует Git → K8s
|
||
✅ Отслеживает изменения в deployment.yaml
|
||
✅ Применяет rolling updates
|
||
✅ Self-heal & auto-prune
|
||
```
|
||
|
||
### 4. Docker Hub (Registry)
|
||
```
|
||
Repository: docker.io/vladcrypto/demo-nginx
|
||
|
||
Images:
|
||
✅ Автоматически пушатся из Jenkins
|
||
✅ Теги: main-XX, latest
|
||
```
|
||
|
||
### 5. Kubernetes (Runtime)
|
||
```
|
||
Namespace: demo-app
|
||
Deployment: demo-nginx (2 replicas)
|
||
Service: demo-nginx (ClusterIP)
|
||
Ingress: https://demo-nginx.thedevops.dev
|
||
|
||
Status:
|
||
✅ 2/2 pods Running
|
||
✅ Rolling updates enabled
|
||
✅ Health checks configured
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 Как работает Pipeline
|
||
|
||
### Автоматический flow:
|
||
|
||
```
|
||
1. Developer → git push
|
||
↓
|
||
2. Gitea → сохраняет commit
|
||
↓
|
||
3. Jenkins → Auto-scan обнаруживает изменения (каждый час)
|
||
↓
|
||
4. Jenkins Pipeline (Jenkinsfile):
|
||
├─ Stage 1: Checkout Source (создает Dockerfile + nginx.conf)
|
||
├─ Stage 2: Build Docker Image (main-XX)
|
||
├─ Stage 3: Push to Registry (Docker Hub)
|
||
├─ Stage 4: Update GitOps Manifests (deployment.yaml)
|
||
└─ Stage 5: Verify Deployment (kubectl rollout status)
|
||
↓
|
||
5. ArgoCD → Обнаруживает изменения в Git (каждые 3 мин)
|
||
↓
|
||
6. ArgoCD → Синхронизирует deployment.yaml → Kubernetes
|
||
↓
|
||
7. Kubernetes → Rolling update (zero downtime)
|
||
↓
|
||
8. ✅ Production! Новая версия работает!
|
||
```
|
||
|
||
**Время:** 3-5 минут от commit до production
|
||
|
||
---
|
||
|
||
## 🧪 Как проверять
|
||
|
||
### 1. Проверить Jenkins
|
||
|
||
```bash
|
||
# Pods
|
||
kubectl get pods -n jenkins
|
||
|
||
# Logs
|
||
kubectl logs -n jenkins <jenkins-pod>
|
||
|
||
# UI
|
||
http://jenkins.thedevops.dev
|
||
```
|
||
|
||
**Что смотреть:**
|
||
- Build History (список сборок)
|
||
- Console Output (логи последней сборки)
|
||
- Blue Ocean (красивый UI)
|
||
|
||
---
|
||
|
||
### 2. Проверить Demo App
|
||
|
||
```bash
|
||
# Deployment
|
||
kubectl get deployment demo-nginx -n demo-app
|
||
|
||
# Pods
|
||
kubectl get pods -n demo-app
|
||
|
||
# Service
|
||
kubectl get svc demo-nginx -n demo-app
|
||
|
||
# Ingress
|
||
kubectl get ingress demo-nginx -n demo-app
|
||
```
|
||
|
||
**Ожидаемый результат:**
|
||
```
|
||
DEPLOYMENT: 2/2 Ready
|
||
PODS: 2/2 Running
|
||
SERVICE: ClusterIP
|
||
INGRESS: demo-nginx.thedevops.dev
|
||
```
|
||
|
||
См. полную документацию в файле для всех деталей, сценариев использования, troubleshooting и best practices.
|