عندما نقوم بتصميم تطبيق لحل مشاكل العصر الحديث لأي مؤسسة، فإننا نصادف متطلبات جديدة على مدار فترة تطوير التطبيق. في هذه الحالة، يجب علينا عدم كسر وظائف التطبيق التي تم تصميمها في وقت سابق ونحتاج إلى تنفيذ حلول للمتطلبات الجديدة التي تم جمعها وهي عملية مستمرة يمكننا من خلالها إصدار تحديثات متكررة لهذا التطبيق بجودة عالية من التعليمات البرمجية وهذا يتحقق في DevOps من خلال CI/CD.
ما هو CI-CD في DevOps:
يشير الاختصار CI-CD إلى التكامل المستمر – التسليم المستمر. يشكّل التكامل المستمر (CI) والتسليم المستمر (CD) مجموعة من المبادئ والممارسات التي تمكّن فرق تطوير التطبيقات من تقديم تغييرات التعليمات البرمجية بشكل متكرر ومتسق ونشرها إلى الإنتاج.
كما يعد التكامل المستمر (CI/CD) أحد أفضل ممارسات منهجية أجايل حيث يتبع نهجًا تكراريًا لأنه يسمح لفرق التطوير بالتركيز على تلبية متطلبات العمل وجودة التعليمات البرمجية وأمن التطبيق.
التكامل المستمر (CI) هو عملية يقوم فيها المطورون الذين يعملون كفريق واحد لأي تطبيق واحد بدمج التعليمات البرمجية في مستودع مركزي ويفضل أن يكون GitHub أو Bitbucket قد يكون مرة واحدة أو عدة مرات في اليوم. وهو يمثل الخطوات المطلوبة لأتمتة بناء وتعبئة البرنامج. سيتم التحقق من كل تكامل من خلال اختبارات آلية يتم تشغيلها بواسطة خوادم الإنشاء، مما يمكننا من اكتشاف الأخطاء بشكل أسرع وتحديد موقعها لأن التغييرات البرمجية التي يلتزم بها مطور معين عادة ما تكون أصغر. نتيجة التكامل المستمر هي قطعة أثرية يمكن نشرها ومن هذه الخطوة يبدأ دور التسليم المستمر.
يمثل التسليم المستمر (CD) دعم البنية التحتية لنشر التعليمات البرمجية في الإنتاج. نحتاج إلى التأكد من أن الأداة تحتوي على جميع التكوينات المطلوبة للانتقال إلى الإنتاج. يعمل القرص المضغوط على أتمتة نشر التطبيقات إلى بيئات متعددة، مثل بيئات التطوير والاختبار، بالإضافة إلى الإنتاج. بمساعدة القرص المضغوط، يمكننا دفع التغييرات إلى بيئات متعددة تلقائيًا.
راجع أيضًا: لماذا يعد Devops مهمًا
خط أنابيب CI/CD Pipeline:
خط أنابيب CI/CD Pipeline عبارة عن سلسلة من الخطوات التي تحدد القدرة على نقل التعليمات البرمجية المصدرية إلى الإنتاج. وهي ممارسة تركز على تحسين تسليم البرامج باستخدام نهج DevOps أو SRE. يمكن تشغيل خط الأنابيب كلما حدث تغيير في التعليمات البرمجية أو قطعة أثرية جديدة في مستودع القطع الأثرية.
يتضمن خط أنابيب CI/CD النموذجي المراحل التالية:
الإنشاء – يتم تطوير كود التطبيق من قبل المطورين باستخدام أدوات التحكم في الإصدار وإدارة مشاريع البرمجيات مثل Maven
الاختبار – يحتاج التطبيق إلى اختباره من قبل فريق ضمان الجودة، سواء كان اختبارًا وظيفيًا أو اختبار الانحدار. يمكن لأدوات الأتمتة مثل سيلينيوم توفير الوقت والجهد للمختبرين
الإصدار – يقوم المطورون بتسليم كود التطبيق إلى المستودع، أي نقل الكود إلى الفرع الرئيسي.
النشر – يتم نقل التعليمات البرمجية للتطبيق إلى الإنتاج
الأمان والامتثال – يتحقق ضمان الجودة (QA) من صحة الإنشاء بناءً على متطلبات OWASP. يقوم فريق ضمان الجودة بإجراء اختبار الاختراق باستخدام أدوات مثل Burp Suite لاختبار أمان التطبيق
فوائد CI/CD:
يساعدنا الاختبار الآلي على تحقيق التسليم المستمر، مما يضمن جودة البرمجيات وأمانها ويزيد من ربحية التعليمات البرمجية في الإنتاج
تخلق خطوط أنابيب CI/CD وقتًا أقصر لتطوير ميزات المنتج الجديد لنضع أنفسنا على صفحة متطلبات العميل
تمنع الأتمتة أعضاء الفريق من المهام المتكررة وتساعدهم على التركيز على تطوير أشياء جديدة
يساعدنا خط الأنابيب هذا على دفع التغييرات البرمجية المعتمدة إلى بيئات متعددة في وقت واحد
وهذا يقلل من مخاطر تغييرات التعليمات البرمجية من خلال تحديثات صغيرة وتدريجية عن طريق تقليل التأثير الذي يمكن أن تحدثه الأخطاء على التطبيق
كيف تكتب خط أنابيب CI-CD؟
Jenkins هي واحدة من أدوات البرمجيات مفتوحة المصدر المتاحة لكتابة خط أنابيب CI-CD الذي يساعد على تحقيق التكامل المستمر في عملية بناء واختبار مؤتمتة. تتم كتابة Jenkins بلغة Java التي يستخدمها العديد من المطورين حول العالم على نطاق واسع. يمكن استخدام Jenkins عدة مرات في اليوم الواحد لبناء واختبار التعليمات البرمجية. يتم نشر التعليمات البرمجية بواسطة Jenkins بعد كل عملية بناء واختبار ناجحة. يمكن الإشارة إلى Jenkins كجهاز تحكم عن بعد حيث يتم تشغيل البناء المطلوب عند النقر على الزر. يمكن لواجهات برمجة تطبيقات مكتبات البرمجيات إضافة Jenkins كمكون إضافي.
كيف يعمل CI/CD؟
سيعمل العديد من المطورين على أي تطبيق في وقت واحد. وبمجرد الانتهاء من اختبار الوحدة من جانبهم يصبحون جاهزين لدمج تغييرات التعليمات البرمجية. تتطلب عملية الدمج موافقة المستشار الفني لأنها قد تعطل الوظائف التي تم تصميمها في وقت سابق. وهذا يجعل المطورين يتراجعون عن التعليمات البرمجية المدمجة أو يعملون لساعات طويلة على إصلاح الأخطاء. يمكن تقسيم عملية عمل CI/CD هذه إلى مرحلتين – مرحلة التكامل المستمر ومرحلة التسليم المستمر.
مرحلة التكامل المستمر:
يساعد هذا المطورين على دمج واختبار التعليمات البرمجية بشكل متكرر قد يكون عدة مرات في اليوم الواحد. تتبع مرحلة التكامل المستمر الخطوات على النحو التالي: يستنسخ المطور التعليمات البرمجية من المستودع المركزي ثم ينشئ فرعًا محليًا للعمل عليه من أجل ميزة جديدة أو تحسين التعليمات البرمجية بمجرد اكتمال التغييرات البرمجية المطلوبة، يقوم المطور بإلزامها إلى المستودع المركزي باستخدام GIT يحدد خادم التكامل المستمر التغييرات التي تم إجراؤها ويبدأ في بناء التطبيق واختباره، مع التأكد من أن التغييرات لم تتسبب في حدوث خلل وظيفي. يتم بناء التطبيق للتحقق من الأخطاء باستخدام البرامج النصية الأوتوماتيكية المكتوبة من قبل فريق الإنشاء والنشر. تركز حالات الاختبار المكتوبة على الوظائف (الاختبار الوظيفي) للتأكد من عدم تعطل أي وظيفة من وظائف التطبيق.
يتم إخطار فريق التطوير بنتائج الاختبار. في حالة فشل الإنشاء، سيعرف الفريق أن التعليمات البرمجية الملتزم بها حديثًا تسببت في تعطل التطبيق ويمكنه البدء في إصلاح المشكلة. إذا نجحت عملية الإنشاء، ينتقل الفريق إلى مرحلة التسليم المستمر.
مرحلة التسليم المستمر:
بعد إجراء اختبار شامل، يمكن للفرق الانتقال إلى مرحلة التسليم المستمر. يجب أن يتم تشغيل تسليم التعليمات البرمجية يدويًا من قبل فريق النشر قد يكون من GitLab، ولكن بقية العملية تكون تلقائية بالكامل. يتم إجراء جميع التفاعلات الضرورية مع خوادم الويب وقواعد البيانات والخدمات الأخرى إذا قمت بتشغيل خط أنابيب القرص المضغوط الذي ينفذ البرنامج النصي.
تتمثل إحدى طرق تشغيل النشر في استخدام ملف تكوين YAML من خلال GitLab. نظرًا لأن خط أنابيب القرص المضغوط يعتمد على CI، تتم إضافة سمة لضمان تشغيل خط أنابيب القرص المضغوط هذا بعد CI.
الخلاصة:
يمكننا استنتاج أن جودة التعليمات البرمجية تتحسن عند استخدام CI/CD وإصدار تحديثات البرامج دون انقطاع التطبيق. يمكن تجميع تأثير أي إصدار من فريق DevOps ويمكن تخطيط البيانات من الإصدار المعني للسباق التالي.
تقدم SPOTO تدريباً على شهادة DevOps Foundation® Foundation، مما يوفر معرفة شاملة ومهارات عملية في تنفيذ ممارسات DevOps الفعالة، بما في ذلك CI/CDD، لضمان تطوير ونشر التطبيقات بسلاسة.