docs: Add comprehensive CI/CD pipeline guide
This commit is contained in:
148
CICD_GUIDE.md
Normal file
148
CICD_GUIDE.md
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
# 🎉 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.
|
||||||
Reference in New Issue
Block a user