Git لـ DevOps engineers:
أهلاً بيك
يلا كنتي فحال الأغلبية، أول مرة سمعتي بـ Git، قلتي مع راسك: آه، هادشي ديال صحاب الديفلوبمونت، كيكتبو بيه الكود ديالهم. وهاد الهضرة صحيحة، ولكن ماشي كاملة. فالعالم ديال Git، DevOps هو الأساس ديال خدمتنا كاملة.
أجي نفهمو علاش Git ؟
1. علاش Git مهم بزاف لـ DevOps engineers؟
قبل ما ندخلو فـ les commandes، خاص نفهمو “علاش”. Git كيعطيك 3 ديال الحوايج مهمين:
-
Version Control: تخيل معايا عندك واحد السكريبت ديال Ansible ولا واحد الفيشي ديال Terraform. اليوم خدام مزيان. غدا جيتي بدّلتي فيه شي حاجة صغيرة، وخوا كلشي. بـ Git، تقدر ترجع للنسخة لي كانت خدامة البارح فثانية وحدة. كيعطيك تاريخ كامل ديال أي تغيير، شكون دارو، وإيمتا.
-
Collaboration: فـ DevOps، مكاينش “أنا”، كاين “حنا”. Git كيخلي الفريق كامل (Devs, Ops, QA) يخدمو على نفس البروجي بلا ما واحد يخرّبق للآخر. كل واحد كيخدم ف “branche” ديالو، وملي كيسالي، كنجمعو كلشي بطريقة منظمة.
-
Single Source of Truth: هادي هي أهم نقطة. الكود ديال لابليكاسيون، السكريبتات ديال Infrastructure as Code (IaC)، الفيشيات ديال الكونفيغوراسيون، كلشي… كلشي خاصو يكون فبلاصا وحدة معروفة وموثوقة. هاديك البلاصا هي الـ repository ديال Git. يلا بغينا نعرفو شنو هي الكونفيغوراسيون الصحيحة، كنمشيو لـ Git، ماشي للـ server ديال فلان ولا للـ PC ديالي.
2. Infrastructure as Code
هنا فين DevOps Engineer كيبان. حنا مكنكتبوش غير كود ديال applications، حنا كنكتبو كود كيوصف الـ Infrastructure كاملة (سيرفرات، شبكات، قواعد بيانات…).
- Terraform (.tf files): بغيتي تبني 3 ديال les serveurs جداد على AWS؟ كتكتبها فكود.
- Ansible (YAML files): بغيتي تـinstallé Nginx على 100 سيرفر؟ كتكتبها فكود.
- Kubernetes (YAML manifests): بغيتي تدير deploy لواحد container جديد؟ كتكتبها فكود.
وهاد الكود كامل فين كيكون؟ فـ Git، طبعاً
ملي كدير git push
لواحد التغيير فملف Terraform، أنت فالحقيقة كتبدل فـ Infrastructure ديالك. هادشي كيعطيك قوة :
- Code Review: قبل ما شي تغيير يوصل للـ production، يقدر صاحبك فالخدمة يشوف الكود ديالك (Pull Request) ويقولك: “رد البال، هاد البور لي حلّيتي خطير!”.
- History & Audit: وقع شي مشكل؟ نقدر نعرفو بالضبط شكون لي غيّر القاعدة ديال الـ Firewall و إيمتا دارها.
3. CI/CD
CI/CD (Continuous Integration / Continuous Deployment) هو القلب ديال DevOps. هو داك البروسيس الأوتوماتيكي لي كيبني، يتيستي، ويدير deploy للتغييرات ديالك.
ولكن… شنو لي كيديكلونشي هاد البروسيس؟ هو Git
تخيل معايا هاد السيناريو:
- أنت كمهندس DevOps، كتزيد واحد الخاصية جديدة فملف Ansible ديالك.
- كدير الخدمة ديالك:
git add . git commit -m "Ajout de la configuration pour le monitoring" git push origin develop
- فديك اللحظة لي درتي فيها
push
، واحد الأداة بحال Jenkins، GitLab CI، ولا GitHub Actions كتشوف داك التغيير. - أوتوماتيكياً، كتبدا واحد الـ “pipeline”:
- المرحلة 1: كتشد الكود ديالك وكتأكد من أن السانتاكس ديالو صحيح (Linting).
- المرحلة 2: كطبق هاد التغيير فواحد البيئة ديال التيست (Staging environment).
- المرحلة 3: كدير شي تيستات أوتوماتيكية باش تأكد كلشي باقي خدام.
- المرحلة 4: يلا كلشي داز مزيان، كطبق داك التغيير فالـ Production.
شفتي ؟ أنت غير دفعتي الكود ديالك لـ Git، والسيستيم تكلف بالباقي.
4. شي Commands خاصك تكون كطير فيهم
بلا ما نخلعوك، هاهما أهم الحوايج لي خاصك تعرف:
git clone [URL]
: باش تجيب نسخة من البروجي عندك فالـ PC.git pull
: باش تجيب آخر التغييرات لي دارو صحابك. ديما ديرها قبل ما تبدا الخدمة.git branch [nom-branche]
: باش تصاوب فرع جديد ديالك تخدم فيه بوحدك. (مثال:git branch feature/add-database-user
)git checkout [nom-branche]
: باش تمشي تخدم فداك الفرع.git add .
: باش تقول لـ Git “هاد الفيشيات لي بدلت، وجدهوم”.git commit -m "Message dialek"
: باش تسجّل دوك التغييرات عندك بواحد الميساج واضح.git push
: باش تصيفط الخدمة ديالك للـ repository المشترك.git merge [nom-branche]
: باش تدمج الخدمة ديال شي فرع مع الفرع لي نتا فيه. (غالباً هادي كتدار عبر Pull Request).git log
: باش تشوف التاريخ ديال التغييرات كاملة.
تحياتي، كان معاكم براهيم