DevOps and Infrastructure

إتقان التكامل المستمر والنشر باستخدام GitHub Actions

في دورة حياة تطوير البرمجيات الحديثة، تُعد السرعة والموثوقية أمرين بالغين الأهمية. تُعد خطوط أنابيب التكامل المستمر والنشر المستمر (CI/CD) العمود الفقري لهذه الكفاءة، مما يتيح لفرق التطوير دمج تغييرات الكود بشكل متكرر والنشر في بيئة الإنتاج بثقة. بينما هيمنت أدوات مثل Jenkins وGitLab CI على هذا المجال لفترة طويلة، برزت GitHub Actions كمنافس قوي، حيث تقدم تكاملاً عميقاً مع نظام GitHub البيئي وصيغة قوية ومرنة. يستكشف هذا الدليل كيفية بناء خط أنابيب CI/CD قوي باستخدام GitHub Actions، بدءاً من المفاهيم الأساسية وصولاً إلى تكوينات سير العمل المتقدمة.

فهم سير العمل والمحفزات

في صميم GitHub Actions توجد سير العمل (Workflows). هذه هي عمليات آلية يمكنك إعدادها في مستودعك لبناء أو اختبار أو حزم أو إصدار أو نشر أي مشروع كود على GitHub. يتم تعريف سير العمل بواسطة ملف YAML مخزن في دليل `.github/workflows` الخاص بمستودعك. الخطوة الأولى في تصميم خط الأنابيب هي تعريف المحفزات. تدعم GitHub Actions أحداثاً متنوعة، مثل `push` و`pull_request` و`schedule` و`workflow_dispatch`. بالنسبة لخط أنابيب CI/CD القياسي، تريد عادةً تشغيل سير العمل عند دفع الكود إلى فرع معين أو عند فتح طلب سحب (pull request). ```yaml name: CI/CD Pipeline on: push: branches: [ main, develop ] pull_request: branches: [ main ] ``` في المثال أعلاه، يعمل خط الأنابيب عند كل عملية دفع على فروع `main` أو `develop` وكلما استهدف طلب السحب فرع `main`. يضمن هذا أن يتم التحقق من صحة الكود قبل وصوله إلى بيئة الإنتاج.

المهام، المشغلات، والخطوات

يتكون سير العمل من مهمة واحدة أو أكثر، والتي تتكون بدورها من خطوة واحدة أو أكثر. كل خطوة إما أنها نص برمجي (shell script) سيتم تشغيله أو إجراء (action) سيتم تنفيذه. الإجراءات هي لبنات البناء القابلة لإعادة الاستخدام في GitHub Actions، وتتراوح بين الإجراءات الرسمية التي تحافظ عليها GitHub وتلك التي يساهم بها المجتمع. بالنسبة لتطبيق Node.js النموذجي، قد يبدو خط الأنابيب كالتالي: ```yaml jobs: build-and-test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run linter run: npm run lint - name: Run tests run: npm test ``` هنا، نحدد مهمة واحدة باسم `build-and-test` تعمل على أحدث إصدار من Ubuntu. تشمل الخطوات فحص الكود، وإعداد بيئة Node.js، وتثبيت التبعيات باستخدام `npm ci` (الذي يضمن إنشاءات قابلة للتكرار)، وتشغيل نصوص التدقيق والاختبار.

متغيرات البيئة والأسرار

مع نمو خط الأنابيب الخاص بك، ستحتاج إلى التعامل مع البيانات الحساسة مثل مفاتيح واجهة برمجة التطبيقات (API keys)، وبيانات اعتماد قاعدة البيانات، ورموز النشر. توفر GitHub Actions طريقة آمنة لإدارة هذه البيانات عبر أسرار المستودع (repository secrets). لا يجب أبداً تضمين الأسرار بشكل ثابت في ملفات YAML الخاصة بك. لاستخدام سر، يمكنك الإشارة إليه عبر سياق `secrets` في سير العمل. بالنسبة لخطوات النشر، قد تمرر هذه الأسرار إلى نص النشر الخاص بك: ```yaml - name: Deploy to Production if: github.ref == 'refs/heads/main' run: | ./deploy.sh env: DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }} AWS_SECRET_KEY: ${{ secrets.AWS_SECRET_KEY }} ``` تضمن شرط `if` أن يحدث النشر فقط عند دمج الكود في فرع `main`، مما يمنع عمليات النشر العرضية من فروع الميزات (feature branches).

التخزين المؤسي والتحسين

أحد أكبر فوائد الأداء لـ GitHub Actions هي ميزته الخاصة بالتخزين المؤسي (Caching). من خلال تخزين التبعيات مثل `node_modules` أو مستودعات Maven، يمكنك تقليل الوقت المستغرق لتشغيل المهام بشكل كبير. يسمح لك إجراء `actions/cache` بتحديد مفتاح بناءً على ملف القفل، مما يضمن عدم إبطال التخزين المؤسي إلا عند تغيير التبعيات. ```yaml - name: Cache node modules uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- ```

الخاتمة

توفر GitHub Actions مجموعة شاملة من الأدوات لأتمتة سير عمل تطوير البرمجيات الخاص بك. من خلال الاستفادة من سير العمل، والإجراءات، والتخزين المؤسي، يمكنك بناء خطوط أنابيب ليست فعالة فحسب، بل آمنة وقابلة للصيانة أيضاً. سواء كنت تنشر مشروعاً جانبياً صغيراً أو تطبيقاً مؤسسياً واسع النطاق، فإن إتقان GitHub Actions مهارة أساسية لأي مهندس DevOps حديث. ابدأ بشكل صغير، وطوّر سير عملك، وشاهد سرعة تطويرك ترتفع.
Share: