DevOps and Infrastructure

GitHub Actions مع ArgoCD لـ Kubernetes

في مشهد DevOps الحديث، لم يعد فصل التكامل المستمر (CI) والتسليم المستمر (CD) مجرد أفضل ممارسة فحسب، بل أصبح ضرورة للتطبيقات القابلة للتوسع. بينما أحدثت GitHub Actions ثورة في الاختبار الآلي والبناء، فإن النشر الفعلي في بيئات متعددة المراحل معقدة غالبًا ما يتطلب نهج GitOps. من خلال دمج GitHub Actions مع ArgoCD، يمكن للمنظمات تحقيق تآزر قوي حيث تؤدي التغييرات في الكود إلى تشغيل الاختبارات في نظام واحد وإدارة حالة العنقود في نظام آخر.

يضمن هذا النهج أن يركز مسار CI على ضمان الجودة وتوليد العناصر، بينما يضمن مسار CD، الذي تقوده ArgoCD، النشر المتسق والإعلاني إلى عناقيد Kubernetes. دعونا نغوص في كيفية هندسة هذا التدفق السلس.

هندسة تدفق المسار

الفلسفة الأساسية لهذا التكامل هي فصل عملية البناء عن عملية النشر. ستكون GitHub Actions مسؤولة عن بناء صور Docker، وتشغيل الاختبارات الوحدية والتكاملية، ودفع هذه العناصر إلى سجل الحاويات. ثم ستقوم بتحديث مستودع Git الذي يحتوي على مظاهر Kubernetes برمز صورة جديد.

تراقب ArgoCD، التي تعمل داخل عناقيد Kubernetes المستهدفة، هذا المستودع المحدد. عند اكتشاف تغيير في تعريفات المظاهر، تقوم بمزامنة حالة العنقود تلقائيًا لتتطابق مع الحالة المطلوبة المحددة في Git. وهذا يخلق حلقة نشر موثوقة وقابلة للمراجعة وآلية.

تكوين ملف عمل GitHub Actions

يخدم ملف عمل GitHub Actions كمنسق لعمليات البناء والإصدار الخاصة بك. نحتاج إلى تحديد مراحل للمراجعة، والاختبار، والبناء، وتحديث مظاهر النشر. الخطوة الحاسمة تتضمن تعديل مظاهر Kubernetes أو مخطط Helm لتعكس رمز الصورة الجديد، ثم إرجاع هذا التغيير إلى المستودع.

إليك مثال على تكوين العمل يوضح دفع صورة وتحديث المظهر:

name: CI/CD Pipeline

on:
  push:
    branches: [ main ]

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2

      - name: Login to Container Registry
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.REGISTRY_USER }}
          password: ${{ secrets.REGISTRY_PASS }}

      - name: Build and Push Image
        uses: docker/build-push-action@v4
        with:
          push: true
          tags: ${{ secrets.REGISTRY }}/my-app:${{ github.sha }}

      - name: Update Kubernetes Manifest
        run: |
          sed -i "s|my-app:.*|my-app:${{ github.sha }}|g" k8s/deployment.yaml
          git config --local user.email "actions@github.com"
          git config --local user.name "GitHub Actions"
          git add k8s/deployment.yaml
          git commit -m "Update image to ${{ github.sha }}"
          git push

إعداد ArgoCD لـ GitOps

بمجرد قيام فعل GitHub بدفع المظاهر المحدثة، تتولى ArgoCD المهمة. يجب عليك أولاً تثبيت ArgoCD على العنقود المستهدف، ثم إنشاء مورد Application يشير إلى عنوان URL للمستودع والمسار الذي يحتوي على مظاهرك. يخبر هذا ArgoCD بما يجب مراقبته بالضبط.

عندما يتم دفع الالتزام، يكتشف آلية فحص الصحة في ArgoCD الانحراف بين الحالة الحية وحالة Git. تعمل ArgoCD بشكل افتراضي في وضع المزامنة التلقائية، ولكن يُنصح غالبًا باستخدام المزامنة اليدوية لمراحل الإنتاج الحرجة للسماح بخطوة تحقق بشري نهائي.

التعامل مع عمليات النشر متعددة المراحل

إحدى المزايا الكبيرة لهذا البنية هي إدارة بيئات متعددة (التطوير، الاختبار، الإنتاج) دون استراتيجيات فروع معقدة. يمكنك الحفاظ على عمل GitHub واحد يبني العنصر مرة واحدة. ومع ذلك، يمكنك هيكلة مستودع Git الخاص بك ليكون له مجلدات منفصلة لكل بيئة، أو استخدام طبقات Kustomize.

في إعداد Kustomize، قد يقوم فعل GitHub بتحديث مرجع الصورة الأساسية، بينما تشير تطبيقات ArgoCD إلى مجلدات مختلفة (على سبيل المثال، `k8s/dev`، `k8s/prod`). وهذا يضمن أن بيئة الاختبار تتلقى أحدث عنصر على الفور للاختبار، بينما يمكن بدء عمليات نشر الإنتاج عبر عمل GitHub منفحد يحدث مجلد مظاهر الإنتاج على وجه التحديد.

الخاتمة

يوفر دمج GitHub Actions مع ArgoCD طريقة قوية وقابلة للتوسع وآمنة لإدارة عمليات نشر Kubernetes. من خلال الاستفادة من GitHub Actions في الأعمال الشاقة لـ CI و ArgoCD للإدارة الإعلانية لـ CD، يمكن للمطورين التركيز على كتابة الكود بدلاً من إدارة حالة البنية التحتية. يخلق هذا الفصل في المسؤوليات، إلى جانب قابلية مراجعة Git، مسارًا من الدرجة الإنتاجية قادرًا على التعامل مع استراتيجيات إصدار متعددة المراحل معقدة. عند تنفيذك لهذا النمط، تذكر أن الأمان هو الأولوية القصوى؛ تأكد من تشفير أسرارك وضبط أذونات المستودع بدقة.

Share: