الفصل 12.2 - CI/CD مع Kubernetes
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- فهم خطوط أنابيب CI/CD لـ Kubernetes
- تكوين GitHub Actions لـ Kubernetes
- تنفيذ GitLab CI/CD
- استخدام GitOps مع ArgoCD
- أتمتة عمليات النشر
- تنفيذ استراتيجيات النشر
مقدمة
تقوم خطوط أنابيب CI/CD بأتمتة بناء واختبار ونشر التطبيقات في Kubernetes.
GitHub Actions
خط أنابيب أساسي
name: Deploy to Kubernetes
on:
push:
branches: [main]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: |
docker build -t my-app:${{ github.sha }} .
docker tag my-app:${{ github.sha }} my-registry/my-app:${{ github.sha }}
- name: Push to registry
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker push my-registry/my-app:${{ github.sha }}
- name: Deploy to Kubernetes
uses: azure/k8s-deploy@v4
with:
manifests: |
k8s/deployment.yaml
k8s/service.yaml
images: |
my-registry/my-app:${{ github.sha }}
kubectl-version: 'latest'
GitLab CI/CD
.gitlab-ci.yml
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
test:
stage: test
script:
- docker run $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA npm test
deploy:
stage: deploy
script:
- kubectl set image deployment/my-app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
only:
- main
GitOps مع ArgoCD
التثبيت
# تثبيت ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
تطبيق ArgoCD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/user/my-app
targetRevision: main
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
استراتيجيات النشر
Rolling Update
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Blue/Green
نشر إصدار جديد بالتوازي، ثم تحويل المرور.
Canary
نشر تدريجي لنسبة من المستخدمين.
أفضل الممارسات
1. الاختبارات التلقائية
تنفيذ الاختبارات قبل كل نشر.
2. البيئات
فصل التطوير، التدريج، الإنتاج.
3. الموافقات
طلب الموافقات للإنتاج.
4. التراجع
وجود خطة تراجع سريعة.
5. المراقبة
مراقبة النشر في الوقت الحقيقي.
ملخص
في هذا الفصل، تعلمت:
CI/CD: أتمتة البناء، الاختبار، والنشر
GitHub Actions: خطوط أنابيب CI/CD مدمجة
GitLab CI: خطوط أنابيب مع .gitlab-ci.yml
GitOps: ArgoCD للنشر التصريحي
استراتيجيات: Rolling، Blue/Green، Canary
أفضل الممارسات: الاختبارات، البيئات، الموافقات، التراجع
الخطوات التالية
الفصل 12.3: البيئات
المختبر 12.2: التوسع الأفقي والعمودي
المختبر 12.3: GitOps مع ArgoCD
تم إنشاء الفصل في: ديسمبر 2024