أتمتة مشاريع لارافيل: دليلك الشامل لعمل CI/CD Pipeline احترافي باستخدام GitHub Actions
هل تعبت من الروتين اليومي الممل؟ تخلصت من Bug في الكود، عملت Push، وبعدين دخلت على السيرفر (Server) بإيدك عشان تعمل Pull، وتعمل run للـ migrations، وتمسح الكاش، وتكتشف في الآخر إن في Test وقعت منك؟ كل ده بيضيع وقتك كمبرمج وممكن يخليك تغلط غلطات مكلفة. الحل في عالم الـ DevOps هو الـ CI/CD Pipeline، والنهاردة هنتعلم إزاي نعمل "أتمتة" (Automation) كاملة لمشاريع لارافيل (Laravel) باستخدام GitHub Actions.
Table of contents [Show]
يعني إيه CI/CD ومين المستفيد؟
الـ CI/CD اختصار لـ Continuous Integration و Continuous Deployment. ببساطة، هي دورة حياة برمجية بتخلي الكود بتاعك يمر باختبارات (Automated Tests) بمجرد ما تعمل Push، وإذا كله تمام، بيترفع للسيرفر أوتوماتيكياً. ده بيوفر عليك "وجع القلب" وبيخليك تركز في كتابة كود نضيف مش في التكرار الممل.
خطوة 1: إعداد الـ GitHub Actions
في مشروع لارافيل، الـ GitHub Actions بتشتغل عن طريق ملفات بتتحط في مسار .github/workflows/. هننشئ ملف جديد وليكن اسمه deploy.yml. الملف ده هو اللي هيحكم العملية كلها.
ده مثال لملف Workflow بيعمل Test للمشروع قبل ما يرفع أي حاجة:
name: Laravel CI/CD
on:
push:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
- name: Install Dependencies
run: composer install --prefer-dist --no-progress
- name: Run Tests
run: php artisan test
خطوة 2: أتمتة الـ Deployment
بعد ما اتأكدنا إن الـ Tests شغالة، عايزين نبعت الكود للسيرفر. الطريقة الأكثر شيوعاً هي استخدام الـ SSH. تقدر تستخدم Action جاهزة زي appleboy/ssh-action عشان تنفذ أوامر على السيرفر بتاعك.
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Deploy to Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/my-laravel-app
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan view:cache
خطوة 3: التعامل مع الـ Secrets بذكاء
اوعى تحط بيانات السيرفر أو الـ Database passwords جوه الكود بتاعك! GitHub بيوفر خاصية الـ Secrets في إعدادات الـ Repository. روح على Settings ثم Secrets and variables، وضف الـ SERVER_HOST والـ SSH_PRIVATE_KEY هناك. ده بيخلي الـ Pipeline بتاعك آمن (Secure) بنسبة 100%.
نصيحة من أخ لمبرمج زميل
بص يا بطل، الـ DevOps مش بس أدوات، دي "عقلية". في الأول الموضوع هيبان إنه معقد وبياخد وقت، لكن بمجرد ما تظبط الـ Pipeline بتاعك مرة واحدة، هتحس براحة نفسية مش طبيعية. نصيحتي ليك: ابدأ بـ Pipeline بسيط بيعمل Test بس، وبعدين طوره لـ Deployment، ومع الوقت هتلاقي نفسك بقيت متمكن من أدوات الـ Cloud والـ Infrastructure. مجال الـ Web Development بيتطور بسرعة، والناس اللي بتعرف تعمل "أتمتة" هي اللي قيمتها بتزيد في سوق العمل.