⚡
CI/CD Pipelines
أتمتة البناء والاختبار والنشر. كل تغيير يمر بخط أنابيب موثوق يصل للإنتاج بدون تدخل يدوي.
متوسط
GitHub Actions
Jenkins
🐙 GitHub Actions
أشهر أداة CI/CD مجانية
GitHub Actions مدمجة في GitHub. تعرّف ملفات YAML في .github/workflows/ لت定义 خط الأنابيب.
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
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
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.
gh secret set DOCKER_USER --body "myuser"
gh secret set DOCKER_PASS --body "mypass"
gh secret set SERVER_HOST --body "192.168.1.100"
${{ secrets.DOCKER_USER }}
✅ أفضل الممارسات
🎯
1. اجعل الـ pipeline سريعاً (أقل من 10 دقائق)
2. استخدم caching لتسريع البناء
3. نفّذ الاختبارات قبل البناء
4. استخدم Secrets لكل المعلومات الحساسة
5. فعّل إشعارات Slack/Email عند الفشل
6. استخدم بيئات منفصلة (staging → production)