CI/CD و Argo CD
الهدف من الدرس
Section titled “الهدف من الدرس”ستفهم الفرق بين CI و CD و GitOps، وكيف تنشئ Argo CD Application يراقب repo ويطبق manifests على cluster.
الفكرة ببساطة
Section titled “الفكرة ببساطة”CI يبني image ويشغل tests. GitOps يجعل Git هو مصدر الحقيقة للـ manifests. Argo CD يراقب Git ويجعل cluster يطابق ما في Git.
التدفق الصحيح
Section titled “التدفق الصحيح”flowchart LR Dev[Developer] --> AppRepo[App Repo] AppRepo --> CI[CI Pipeline] CI --> Registry[Container Registry] CI --> ConfigRepo[GitOps Repo] ConfigRepo --> Argo[Argo CD] Argo --> Cluster[Kubernetes Cluster]Argo CD Application
Section titled “Argo CD Application”application.yaml:
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: web-dev namespace: argocdspec: project: default source: repoURL: https://github.com/example/kubernetes-course-gitops.git targetRevision: main path: environments/dev/web destination: server: https://kubernetes.default.svc namespace: web-dev syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=trueشرح سريع:
| الحقل | المعنى |
|---|---|
repoURL | repo الذي يحتوي manifests أو Helm chart |
path | المسار داخل repo للبيئة المطلوبة |
destination.namespace | أين يطبق Argo الموارد |
prune | حذف الموارد التي حذفت من Git |
selfHeal | إعادة cluster إلى Git لو حصل drift |
هيكلة GitOps repo
Section titled “هيكلة GitOps repo”kubernetes-course-gitops/ apps/ web/ Chart.yaml values.yaml templates/ environments/ dev/ web/ values.yaml staging/ web/ values.yaml prod/ web/ values.yamlأوامر مهمة
Section titled “أوامر مهمة”kubectl apply -f application.yamlargocd app get web-devargocd app sync web-devargocd app history web-devargocd app rollback web-dev <history-id>Expected output:
Name: argocd/web-devHealth Status: HealthySync Status: Synced to mainبيئات dev و staging و prod
Section titled “بيئات dev و staging و prod”| البيئة | السياسة المقترحة |
|---|---|
| dev | sync تلقائي، موارد صغيرة، image tag سريع |
| staging | sync بعد مراجعة، يشبه prod |
| prod | sync مضبوط، approvals، rollback plan |
أخطاء شائعة
Section titled “أخطاء شائعة”| المشكلة | التشخيص | الحل |
|---|---|---|
App OutOfSync | argocd app diff web-dev | راجع الفرق وطبق sync أو عدل Git |
App Degraded | argocd app get web-dev | افحص resource المكسور في Kubernetes |
| Argo لا يستطيع إنشاء namespace | events داخل app | أضف CreateNamespace=true أو أنشئ namespace |
| CI يعدل cluster مباشرة | مراجعة pipeline | اجعل CI يحدث Git فقط |
Lab: GitOps Application أولى
الهدف: إنشاء Argo CD Application تربط repo ببيئة dev ومراجعة sync status.
Prerequisites
Section titled “Prerequisites”- Argo CD مثبت على cluster.
- Repo يحتوي manifests أو Helm chart.
- عدل
repoURLوpathفيapplication.yaml. - طبق Application:
kubectl apply -f application.yaml- افحص الحالة:
argocd app get web-devargocd app sync web-dev- غير عدد replicas من Git، ثم راقب Argo:
argocd app diff web-devargocd app sync web-devExpected output
Section titled “Expected output”Sync Status: SyncedHealth Status: HealthyCleanup
Section titled “Cleanup”kubectl delete -f application.yamlالربط بالمشروع النهائي
Section titled “الربط بالمشروع النهائي”Project 6 سيطلب منك تشغيل مشروعك عبر Argo CD، مع مسارات منفصلة للبيئات وخطة rollback موثقة.