2018/09/01

مقدمة عن الDevOps

في هذا المقال سوف اتحدث عن مقدمة بسيطة عن ال DevOps ولماذا لابد ان تهتم فرق تطوير البرمجيات به وما هي النتائج المترتبة عن استخدام اساليبه وفي نهاية المقال سوف يكون اتضح لماذا استخدام اساليب ال DevOps احدث ثورة في تطوير البرمجيات ولماذا المطورون الذين يتبعون اساليبه يستطيعون تنفيذ اعمال مذهلة بجودة عالية

  

انت صاحب شركة وتريد تطوير نظام جديد


تخيل معي ان لديك شركة تطوير برمجيات او انك بصدد تطوير نظام لعميل ما وقد اتفقت معه ان تسلمه النظام هذه خلال 6 اشهر
فماذا ستفعل لتطوير هذا النظام؟

نعم مثلما اجبت
اولا سوف تقوم انت وفريقك بتحليل المطلوب جيدا وستجلس مع العميل جلسات مطولة لمعرفة المطلوب جيدا وبعد ذلك سوف توثق كل ما تم الاتفاق عليه في مستند به كل المتطلبات
ثانيا سوف تبدأ بتصميم النظام و برمجته
ثالثا سوف تقوم باختبار النظام والتأكد من ان كل المطلوب تم تنفيذه بصورة صحيحة
رابعا سوف تقوم برفع ملفات النظام على الخادم الخاص بالعميل
خامسا سوف تقوم بتسليم العميل كل متطلباته

وبذلك تكون انتهيت 😃

للاسف عند تسليم العميل فوجيء العميل وقال لك "ليس هذا ما كنت اريد , بل كنت اريد كذا و كذا"
الان وفي هذه اللحظه احمرت عيناك وارتفع ضغط دمك وقلت له "كلا , هذا ما طلبته انت سابقا"

الحقيقة ان العميل ليس مخطيء (اعذرني وتقبل هذه الكلمة) فهو ليس لديه الخبرة ليستطيع ان يتصور شكل النظام الذي سوف تصممه له بالاضافة الى انه قد تتفتح لديه افكار جديدة عندما يرى النظام امامه.

 

اذا ما الحل؟


تخيل معي انك سوف تعمل باسلوب اخر كالتالي

سوف تقسم المشروع الذي مدته 3 اشهر الى 6 مراحل وكل مرحلة هي اسبوعان وخلال كل مرحلة تقوم بتطوير واختبار جزء من النظام يمكن ان يعمل وفي نهاية كل مرحلة تاخذ راي عميلك وتاخذ منه تعديلاته ان وجدت

اليس بهذه الطريقة ضمنت نجاح المشروع وانه يحقق ما يريده عميلك؟
اليس هذا الهدف اصلا؟

اعتقد انك الان مقتنع ان الاسلوب الثاني افضل وفي الحقيقة اتفق حديثا مجتمع مطوري البرمجيات على ذلك.

الاسلوب الاول لادارة دورة حياة تطوير البرمجيات يسمى الشلال Waterfall وهذا الاسلوب القديم وكان متبع لسنين كثيره ولكنه مع الوقت تحدث منه مشاكل كالتي ذكرتها سابقا


الاسلوب الثاني هو اسلوب ال Agile Scrum وهو يعتمد على تقسيم المشروع الى مراحل Sprints وجوهر هذا التقسيم هو مشاركة العميل دائما لتكون الصورة واضحة بين الطرفين وللAgile اكثر من اسلوب مثل Scrum , Kanban , .... الخ وليس المجال هنا لذكرها وايضا يوجد داخل الScrum مثلا انشطة مختلفة للمساعدة في الPlanning و ال Managment و ال Review وهكذا
     


الان انت حللت مشكلة ادارة المشروع وضمان نجاحه ولكن ماذا عن تسريع العمليات المتتابعة داخل المشروع ولتفهم ما اقصده تخيل معي انك بعد اول مرحلة في ال 6 مراحل من تطوير مشروعك تريد ان ترفع ملفاتك على سيرفر العميل ماذا ستفعل؟

نعم الامر بسيط ستأخذ نسخة فارغة من قاعدة بيانات المشروع  + ملفات المشروع وتنصبهم على سيرفر العميل بكل بساطة 

الان عميلك بدأ يعمل بالفعل وانت انهيت المرحلة الثانية فكيف سيتم تنصيب النسخة الجديدة؟
الامر اصبح صعب الان لانه يوجد قاعدة بيانات حالية تريد الحفاظ عليها و على بياناتها ولذلك حتى تستطيع رفع النسخة الجديدة تريد ان تعمل اسكربت مثلا يعدل في الSchema الحالية يجعلها مساوية للجديدة وبعد ذلك تقوم بتنصيب ملفات المشروع الجديدة.

هل تتخيل ما كمية الوقت اللذي ستحتاجه لفعل ذلك في كل مرة تريد فيها تنصيب نسخة جديدة؟
ماذا تتخيل ان يحدث اذا قمت بخطأ ما اثناء التحديث ؟ قد يؤدي الى توقف النظام تماما

هنا يأتي دور ال DevOps



فال DevOps هو بالاساس يهتم بالتسليم المستمر للعملاء عن طريق استخدام ادوات و طرق تشغيل و فريق العمل لتحقيق ذلك
ولذلك فال DevOps هو مرتبط ارتباط مباشر بال Automation بمعنى انك كلما قمت بالعمليات التي تقوم بها يدويا بشكل تلقائي Automated فانت اقرب الى ال DevOps.


وسوف تشعر بميزة ال DevOps كلما كبر حجم فريقك وكان هناك متخصصين للOperations اي تنصيب و تشغيل النظام ومسئولين اخرين للتطوير والبرمجيات وايضا كلما كبر حجم مشروعك فتخيل معي انك تقوم باصدار Release نسخة جديدة كل ساعة فماذا ستفعل ان عملت بالاسلوب العادي؟

في الحقية الفريق الذي يحقق ال DevOps هو فريق يستطيع ان يقوم باعمال هائلة و يستطيع ان يستجيب للتغيرات بسهولة لانتاج برامج ذات قيمة فعلية.


وليكون الفريق يحقق ال DevOps لابد ان يحقق بعض او كل ما يلي

  

Agile Planning


اي يتبع اساليب الAgile و التخطيط لها وذلك للقدرة على الاستجابة للتغيرات ومشاركة العملاء بشكل فعال وايضا لمتابعة المشروع بشكل فعال عن طريق انشطة ال Agile المختلفة
.

Continuous Development


اي ان كل المطورين و المبرمجمين يعملون على Source Controle ما مثل Git او TFS مثلا ومن وجهة نظري لابد ان يكون كل ملف من الكود مرتبط بال User Story او ال Requirment الخاصة به لامكانية تتبعه.
.

Continuous Monitoring


والمقصود هنا متابعة البرنامج اثناء تشغيله بادوات ال Monitoring المختلفة لقياس ادائه وفعاليته طوال مدة تشغيله
  

Continuous Testing


وهنا يأتي اهمية ال Test Automation بمعنى انه يتم عمل Automation لاعمال ال Testing المختلفة و ال Automation هنا مقصود به كتابة كود يقوم باختبار الكود الخاص بالبرنامج وذلك يمكننا انه في اي لحظة اريد ان اختبر البرنامج اقوم بضغطة زر باختباره كاملا كما لو انه يقوم انسان باختباره (هل متخيل مدى الجودة و السرعة).
.

Continuous Integration


والمقصود هنا انه بمجرد ان يقوم المبرمج برفع الكود على ال Source Controle يتم عمل Build لكل الكود وعمل Test لكل الكود (حيث اننا عملنا Test Automation سابقا) واذا حدث Bug يظهرتلقائيا . (ما رايك الان في سرعة التنفيذ)
.

Continuous Delivery


والمقصود هنا بعد عمل ال Build واختباره ان تتواجد نسخة جاهزة قابله للتنزيل لدى العميل بضغطة زرر (😀).
  .

Continuous Deployment


والمقصود هنا بعد عمل ال Build واختباره ان يتم تنصيب نتيجة ال Build مباشرة على Server العميل
وهذه اقصى قمة ال DevOps حيث انه بمجرد رفع المبرمج للكود يتم عمل Build و اختبار الكود و تنصيبه لدى العميل مباشرة


ما رأيك الان هل يستحق موضوع ال DevOps اهتمامك , اليس بتطبيقه تستطيع تطوير برمجيات بسرعة وجودة عالية

ما سبق هو مقدمة بسيطة بدون التطرق الى ال Tools او الادوات التي يمكن استخدامها حيث ان الموضوع غير مرتبط باداه معينة ولكن باي وسيله تستطيع بها تحقيق ما سبق.
.
لا تنسي عمل لايك لصفحتنا في ال Facebook لمتابعة المزيد
https://www.facebook.com/GalalDev-438227283302149/

مراجع


https://docs.microsoft.com/en-us/azure/devops/learn/what-is-devops
https://en.wikipedia.org/wiki/DevOps
https://www.apress.com/gp/book/9781484214473





هناك 7 تعليقات:

Unknown يقول...

شكر لك

Unknown يقول...

العفو اتمنى ان تكون مفيدة

abdelfttah يقول...

الف شكر علي الشرح المبسط

غير معرف يقول...

شكرا ياريت شرح للادوات

بس اعمل ايه للعملاء اللى عايزين يدفعوا مبلغ ثابت ؟ مره عميل شغلنى 6 شهور بدون ماقدر ازود المبلغ

غير معرف يقول...

خالص شكري وتقديري وامتناني

فراس الطوباسي يقول...

ما شاء الله عليك وبارك الله لك

غير معرف يقول...

شكرا جزيلا لك

مقدمة عن الDevOps

في هذا المقال سوف اتحدث عن مقدمة بسيطة عن ال DevOps ولماذا لابد ان تهتم فرق تطوير البرمجيات به وما هي النتائج المترتبة عن استخدام اساليبه ...