CI/CD Pipelines

أتمتة البناء والاختبار والنشر. كل تغيير يمر بخط أنابيب موثوق يصل للإنتاج بدون تدخل يدوي.

متوسط GitHub Actions Jenkins

📖 ما هو CI/CD؟

🔨

CI — التكامل المستمر

كل Push للريبو يُشغّل بناء تلقائي + اختبارات. يكتشف الأخطاء مبكراً.

🚀

CD — التسليم المستمر

بعد نجاح CI، التطبيق يُجهّز للنشر تلقائياً في بيئة الاختبار.

🎯

CD — النشر المستمر

النشر المباشر للإنتاج بدون تدخل بشري. كل تغيير ناجح يصل للمستخدمين.

🐙 GitHub Actions

أشهر أداة CI/CD مجانية

GitHub Actions مدمجة في GitHub. تعرّف ملفات YAML في .github/workflows/ لت定义 خط الأنابيب.

.github/workflows/ci.yml
name: CI Pipeline on: push: branches: [main] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Install dependencies run: npm ci - name: Run tests run: npm test - name: Build run: npm run build

🐳 CI/CD مع Docker

.github/workflows/deploy.yml
name: Build & Deploy on: push: branches: [main] jobs: build-and-push: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_PASS }} - name: Build & Push uses: docker/build-push-action@v5 with: push: true tags: myuser/myapp:latest,myuser/myapp:${{ github.sha }} deploy: needs: build-and-push runs-on: ubuntu-latest steps: - name: Deploy to server uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_KEY }} script: | docker pull myuser/myapp:latest docker compose down docker compose up -d

⚙️ Jenkins Pipeline

Jenkinsfile — Declarative Pipeline
pipeline { agent any stages { stage('Build') { steps { sh 'npm ci' sh 'npm run build' } } stage('Test') { steps { sh 'npm test' } } stage('Deploy') { steps { sh 'docker build -t myapp .' sh 'docker push myapp:latest' } } } post { success { echo '✓ Deployment successful!' } failure { echo '✗ Deployment failed!' } } }

🔐 إدارة الأسرار (Secrets)

🚨 لا تضع كلمات المرور أو API Keys في ملفات الـ workflow! استخدم GitHub Secrets أو HashiCorp Vault.
Terminal — إضافة Secrets
# من إعدادات الريبو: Settings → Secrets → Actions # أو عبر GitHub CLI: gh secret set DOCKER_USER --body "myuser" gh secret set DOCKER_PASS --body "mypass" gh secret set SERVER_HOST --body "192.168.1.100" # في الـ workflow: ${{ secrets.DOCKER_USER }}

أفضل الممارسات

🎯 1. اجعل الـ pipeline سريعاً (أقل من 10 دقائق)
2. استخدم caching لتسريع البناء
3. نفّذ الاختبارات قبل البناء
4. استخدم Secrets لكل المعلومات الحساسة
5. فعّل إشعارات Slack/Email عند الفشل
6. استخدم بيئات منفصلة (staging → production)
السابق: إدارة الخوادم التالي: قواعد البيانات