Git Hooks والأتمتة
اكتشف كيفية استخدام Git Hooks لأتمتة عمليات التطوير لديك.
I
InSkillCoach
· دقيقة
Git Hooks والأتمتة
اكتشف كيفية استخدام Git Hooks لأتمتة عمليات التطوير لديك.
أساسيات Git Hooks
الإعداد
# Activer les hooks
git config core.hooksPath .git/hooks
# Créer un hook pre-commit
touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
الـ Hooks الشائعة
# pre-commit
#!/bin/sh
# Exécuté avant chaque commit
echo "Vérification du code..."
# post-commit
#!/bin/sh
# Exécuté après chaque commit
echo "Notification envoyée..."
# pre-push
#!/bin/sh
# Exécuté avant chaque push
echo "Tests en cours..."
# post-merge
#!/bin/sh
# Exécuté après chaque merge
echo "Mise à jour des dépendances..."
أمثلة عملية
التحقق من الكود
# pre-commit
#!/bin/sh
# Vérifier le formatage
echo "Vérification du formatage..."
npm run lint
# Exécuter les tests
echo "Exécution des tests..."
npm test
# Vérifier les types
echo "Vérification des types..."
npm run type-check
التحقق من رسائل الـ commit
# commit-msg
#!/bin/sh
# Vérifier le format du message
commit_msg=$(cat "$1")
if ! echo "$commit_msg" | grep -qE "^(feat|fix|docs|style|refactor|test|chore)(\(.+\))?: .+"; then
echo "Format de message invalide"
echo "Utilisez: type(scope): description"
exit 1
fi
النشر التلقائي
# post-push
#!/bin/sh
# Déployer en staging
if [ "$(git rev-parse --abbrev-ref HEAD)" = "develop" ]; then
echo "Déploiement en staging..."
npm run deploy:staging
fi
# Déployer en production
if [ "$(git rev-parse --abbrev-ref HEAD)" = "main" ]; then
echo "Déploiement en production..."
npm run deploy:prod
fi
Husky لبيئة Node.js
التثبيت
# Installer Husky
npm install husky --save-dev
# Initialiser Husky
npx husky install
# Ajouter un hook
npx husky add .husky/pre-commit "npm test"
الإعداد
// package.json
{
"scripts": {
"prepare": "husky install"
},
"husky": {
"hooks": {
"pre-commit": "npm test",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
}
Git Hooks مع Python
مثال على Hook
#!/usr/bin/env python3
# pre-commit
import sys
import subprocess
def run_tests():
try:
subprocess.run(['pytest'], check=True)
except subprocess.CalledProcessError:
print("Les tests ont échoué")
sys.exit(1)
def check_formatting():
try:
subprocess.run(['black', '--check', '.'], check=True)
except subprocess.CalledProcessError:
print("Le formatage est incorrect")
sys.exit(1)
if __name__ == '__main__':
run_tests()
check_formatting()
التكامل المستمر
GitHub Actions
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Check formatting
run: npm run lint
GitLab CI
# .gitlab-ci.yml
stages:
- test
- deploy
test:
stage: test
script:
- npm install
- npm test
- npm run lint
deploy:
stage: deploy
script:
- npm run deploy
only:
- main
أفضل الممارسات
-
الأمان
- التحقق من الاعتمادات (dependencies)
- فحص الكود
- التحقق من الأسرار (secrets)
- حماية الفروع
-
الأداء
- hooks خفيفة
- اختبارات سريعة
- تخزين النتائج مؤقتًا (cache)
- المعالجة المتوازية
-
الصيانة
- توثيق واضح
- اختبار الـ hooks
- معالجة الأخطاء
- سجلات (logs) مفصلة
الخلاصة
النقاط الرئيسية التي يجب تذكّرها:
- أتمتة العمليات
- التحقق من الكود
- النشر التلقائي
- التكامل المستمر
التوصيات:
- اختيار الـ hooks المناسبة
- أتمتة الاختبارات
- تأمين العمليات
- اتباع أفضل الممارسات
- التدرّب على Git وتعميق المعرفة به
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
1.4k
148
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش