
أصبح اعتماد منهجية DevOps هو الحل البديهي لتحسين البرامج البطيئة وغير الناجحة وأتمتة المهام اليدوية. ولذلك، سنشرح في هذا المقال ما هي منهجية عمل إنتاج البرمجيات في DevOps أو ما يُعرف بمصطلح DevOps pipeline وما هي خطوات إنشائها.
مقدمة عن منهجية DevOps وخطوط التكامل والتسليم المستمر CI/CD
تطورت منهجية DevOps لتشتمل على عديد من التخصصات المختلفة، ولكن معظم الناس يتفقون على أن DevOps هي منهجية لتطوير البرمجيات أو دورة حياة تطوير البرمجيات SDLC، ومبدؤها الأساسي هو تغيير ثقافة العمل واعتماد أتمتة المهام اليدوية لزيادة الإنتاجية وتحسين مرونة تنفيذ المهام.
هناك بعض الأدوات الضرورية لتحقيق بيئة DevOps، لكن المفتاح الرئيسي هو إنشاء منهجية عمل Pipeline يُطبّق فيها التكامل المستمر والنشر المستمر CI/CD، بحيث تحتوي على مراحل مختلفة مثل مرحلة التطوير DEV، والتكامل INT، والاختبار TST، والتحقق من الجودة QA، واختبار قبول المستخدم UAT، والتحضير STG، والانتاج PROD؛ وتؤتمت فيها المهام اليدوية، لكي يستطيع المطورون العمل بمرونة وكتابة شيفرة عالية الجودة، والنشر مرات عديدة.
يقدّم هذا المقال طريقةً مكونةً من خمس خطوات لإنشاء منهجية عمل لإنتاج البرمجيات بأسلوب DevOps باستخدام أدوات مفتوحة المصدر، مثل ماهو موضح في الصورة التالية:
1. استخدام اُطر عمل التكامل والنشر المستمر CI/CD
أول ما نحتاج إليه هو إحدى أدوات التكامل والنشر المستمر CI/CD، ويُنصح لهذا الغرض باستخدام أداة جنكينز Jenkins، وهي أداة مفتوحة المصدر ومبنية على لغة جافا Java وترخيص MIT، وهي ما ساهم في نشر منهجية DevOps لتصبح المعيار الأساسي.
ولتبسيط الأمر، يمكننا تخيل أن أداة Jenkins هي جهاز تحكم عن بعد يمكنه التخاطب مع خدمات وأدوات عدة المختلفة وإدارتها، وهي عديمة النفع بمفردها، ولكنها تصير أكثر قوةً عند استخدامها مع أدوات وخدمات مختلفة. وهي واحدة من العديد من أدوات CI/CD مفتوحة المصدر التي يمكن الاستفادة منها لإنشاء منهجية عمل DevOps.
فيما يلي بعض الأدوات الأخرى:
الأداة | الرخصة |
---|---|
Jenkins | المشاع الإبداعي و MIT |
Travis CI | MIT |
CruiseControl | BSD |
Buildbot | GPL |
Apache Gump | Apache 2.0 |
Cabie | GNU |
توضح الصورة التالية سير عمليات DevOps باستخدام أدوات التكامل والنشر المستمر CI/CD:
وبهذا تكون قد أصبحت لدينا أداة CI/CD قيد التشغيل في مضيفنا المحلي، ولكن لا يمكن الاستفادة منها في شيء الآن. سنتابع شرح باقي الخطوات كي نتعلم كيفية استخدام الأدوات لبناء منهجية عمل DevOps.
2. إدارة الشيفرة المصدرية Source Code Management
إن أفضل وأسهل طريقة للتأكد من أن أدوات CI/CD تعمل جيدًا هي استخدامها مع إحدى أدوات إدارة الشفرة المصدرية Source Code Management أو اختصارًا: SCM، وذلك لأن الشيفرة التي نكتبها عند تطوير تطبيق ما باستخدام إحدى لغات البرمجة مثل لغة جافا Java أو بايثون Python أو C++ أو لغة جو Go، أو جافاسكربت Javascript، أو غيرها، يطلق عليها اسم الشيفرة المصدرية Source Code.
عند العمل بمفردنا، سيكون من الأسهل هو حفظ كل ما يلزمنا في مجلد واحد على جهازنا؛ ولكن عند العمل على مشروع كبير يتم فيه التعاون مع الآخرين، فسوف نحتاج إلى طريقة لمشاركة التعديلات على الشيفرة بفعالية وتجنب التعارض عند التعديل؛ كما سنحتاج أيضًا إلى طريقة لاستعادة النسخ السابقة من الشيفرة، وأحدث من طريقة النسخ الاحتياطي أو طريقة النسخ واللصق التقليدية.
هنا علينا استخدام أدوات إدارة الشيفرة المصدرية SCM التي تساعد في تخزين الشيفرة في مستودعات، والتحكم في إصدار الشيفرة، والتنسيق بين أعضاء المشروع.
ثمة أدوات عدة لإدارة الشيفرة المصدرية، لكن غيت Git أفضلها، وفيما يلي ذكر لأدوات أخرى مفتوحة المصدر:
الأداة | الرخصة |
---|---|
غيت | GPLv2 & LGPL v2.1 |
Subversion | Apache 2.0 |
Concurrent Versions System (CVS) | GNU |
Vesta | LGPL |
Mercurial | GNU GPL v2+ |
توضح الصورة الآتية كيف تبدو منهجية عمل DevOps عند استخدام إحدى أدوات إدارة الشيفرة المصدرية SCM:
وكما هو واضح، يمكن لأداة التكامل والنشر المستمر CI/CD أتمتة التعديلات على الشيفرة المصدرية وتسهيل التعاون بين أعضاء الفريق. وسنتعرف في باقي الخطوات على كيفية الاستفادة من ذلك في تطبيق عملي حتى يتمكن العديد من الناس من استخدامه.
3. إنشاء أداة لأتمتة عمليات بناء الشيفرة
يمكن الآن الإطلاع على تعديلات الشيفرة وإضافة تعديلاتنا، كما يمكن التعاون مع مطورين آخرين في كتابة الشيفرة. للتأكيد، يجب علينا تجميع التطبيق قبل ذلك ووضعه في تنسيق حزمة قابلة للنشر أو تشغيله كملف قابل للتنفيذ Executable لجعله تطبيق ويب. يمكننا ملاحظة أن لغات البرمجة المُفسَّرة مثل جافاسكربت JavaScript أو PHP لا تحتاج إلى تجميع Compilation، وهنا علينا استخدام إحدى أدوات أتمتة عمليات بناء البرامج Build Automation Tool، والتي تهدف إلى إنشاء شيفرة مصدرية بتنسيق معين، وأتمتة عمليات تنظيف الشيفرة وتجميعها واختبارها ونشرها في موقع معين.
تختلف أدوات البناء وفقًا للغة البرمجة، وفيما يلي بعض الأدوات الشائعة مفتوحة المصدر:
الأداة | الرخصة | لغة البرمجة |
---|---|---|
Maven | أباتشي Apache 2.0 | جافا Java |
Ant | أباتشي Apache 2.0 | جافا Java |
Gradle | أباتشي Apache 2.0 | جافا Java |
Bazel | أباتشي Apache 2.0 | جافا Java |
Make | GNU | --- |
Grunt | MIT | جافا سكربت JavaScript |
Gulp | MIT | جافا سكربت JavaScript |
Rake | MIT | Ruby |
Buildr | Apache | Ruby |
A-A-P | GNU | بايثون Python |
SCons | MIT | بايثون Python |
BitBake | GPLv2 | بايثون Python |
Cake | MIT | C# |
ASDF | Expat (MIT) | LISP |
Cabal | BSD | Haskell |
يمكننا الآن إضافة ملفات إعدادات أداة أتمتة بناء الشيفرة إلى أداة إدارة الشيفرة المصدرية SCM وستتولى أداة التكامل والنشر المستمر CI/CD أمر بنائها.
4. اختيار خادم تطبيقات الويب
للحصول على فائدة من التطبيق، يجب أن يكون التطبيق قادرًا على توفير خدمة أو واجهة ما، كما يجب استضافته على خادم تطبيقات ويب؛ إذ يوفر الخادم بيئةً قادرةً على قراءة المنطق البرمجي داخل الحزمة القابلة للنشر، وعرض واجهة التطبيق، وتقديم خدمات الويب عن طريق إتاحة مآخذ هذه الخدمات، ولذلك ستحتاج إلى خادم HTTP وآلة افتراضية Virtual machine لتثبيت خادم التطبيقات.
فيما يلي عدد من خوادم تطبيقات الويب مفتوحة المصدر التي يمكن المفاضلة بينها واختيار الأنسب بينها:
الأداة | الرخصة | لغة البرمجة |
---|---|---|
Tomcat | Apache 2.0 | جافا |
Jetty | Apache 2.0 | جافا |
WildFly | GNU Lesser Public | جافا |
GlassFish | CDDL & GNU Less Public | جافا |
Django | 3-Clause BSD | بايثون |
Python Paste | MIT | بايثون |
Rails | MIT | Ruby |
Node.js | MIT | جافا سكربت |
بعد تحديد خادم الويب المناسب، نستطيع القول أنه قد أصبحت لدينا منهجية عمل DevOps شبه مُعَدّة للاستخدام.
يمكن التوقف هنا عند هذه الخطوة والمتابعة بمفردنا، لكن سنخصص الخطوة التالية للتحدث عن جودة الشيفرة لأهميتها.
5. اختبار تغطية الشيفرة Code Testing Coverage
قد يكون اختبار الشيفرة أمرًا مرهقًا ولكنه ضروري ويجب إجراؤه باكرًا لاكتشاف الأخطاء ورفع جودة الشيفرة وضمان رضا العملاء؛ ولكن توجد أدوات عدة مفتوحة المصدر لاختبار الشيفرة وتحسين جودتها, ويمكن توصيل معظم أدوات التكامل والنشر المستمر CI/CD مع أدوات الاختبار وأتمتة العملية.
أُطُر اختبار الشيفرة البرمجية Code Test Frameworks
هناك نوعان من أدوات اختبار الشيفرة، هما:
- أُطُر اختبار الشيفرة البرمجية Code test framework: وتساعد في كتابة الاختبارات وتشغيلها
- أدوات تحسين الجودة Code Quality Suggestion Tools: وتقدم اقتراحات تساعد على تحسين جودة الشيفرة البرمجية
في الآتي جدول مكون من أهم أُطُر الاختبار:
إطار العمل | الرخصة | لغة البرمجة |
---|---|---|
JUnit | Eclipse Public License | جافا |
EasyMock | أباتشي Apache | جافا |
Pytest | MIT | Python |
Tox | MIT | Python |
أما عن أدوات تحسين الجودة Code Quality Suggestion Tools، فيمكن ذكر الأدوات الآتية:
الأداة | الرخصة | لغة البرمجة |
---|---|---|
Cobertura | GNU | جافا |
Emma | common Public License | جافا |
Coverage.py | Apache 2.0 | بايثون |
Tox | MIT | Python |
Jasmine | MIT | جافا سكربت |
Jest | MIT | جافا سكربت |
وكما نلاحظ، معظم الأدوات والأطر التي ذكرناها مكتوبة بلغة جافا، أو بايثون، أو جافا سكربت؛ أما لغتا C++ وC# فهما من لغات البرمجة الخاصة Proprietary لكن المُترجِم المستخدم لترجمتهما GCC مفتوح المصدر.
والآن بعد تطبيق أدوات اختبار التغطية، يجب أن يكون لدينا منهجية عمل DevOps تشبه المنهجية الموضحة في بداية مقالنا.
خطوات إضافية لتحسين المنهجية
سنوضح فيما يلي بعض الخطوات الإضافية التي يمكن القيام بها لتحسين منهجية عمل DevOps الخاصة بنا.
استخدام الحاويات Containers
ذكرنا سابقًا أن بإمكاننا استضافة خادم التطبيقات على آلة افتراضية أو خادم، كما يمكن استخدام الحاويات containers أيضًا.
يقوم مفهوم الحاويات باختصار على أن الآلة الافتراضية تحتاج إلى مساحة كبيرة لنظام التشغيل تفوق حجم التطبيق، بينما تحتاج الحاوية فقط إلى عدد قليل من المكتبات والإعدادات لتشغيل التطبيق. لا تزال هناك استخدامات مهمة للآلات الافتراضية، ولكن الحاويات توّفر حلًا خفيف الوزن لاستضافة التطبيقات، بما في ذلك خادم التطبيقات.
توجد خيارات مختلفة للحاويات، لكن دوكر Docker وكوبرنيتس Kubernetes هما الأكثر شيوعًا.
الأداة | الرخصة |
---|---|
Docker | Apache 2.0 |
Kubernetes | Apache 2.0 |
أدوات الأتمتة الوسيطة Middleware automation tools
تركز منهجية عمل DevOps التي نفّذناه على إنشاء تطبيق ونشره بصورة تعاونية، ولكن هناك أمور أخرى عدّة يمكننا تنفيذها باستخدام أدوات DevOps، وأحدها هو الاستفادة من أدوات إدارة البنية التحتية باستخدام الشيفرة Infrastructure as Code واختصارًا IaC، والتي تُعرف أيضًا باسم أدوات الأتمتة الوسيطة.
تساعد هذه الأدوات في أتمتة عمليات التثبيت والإدارة ومهام البرامج الوسيطة، حيث يمكن لأداة الأتمتة مثلًا أن تسحب الاعدادات المناسبة للتطبيقات، مثل خادم تطبيقات الويب وقواعد البيانات وأدوات المراقبة، ونشرها على خادم التطبيقات.
وفيما يلي بعض أدوات الأتمتة الوسيطة مفتوحة المصدر:
الأداة | الرخصة |
---|---|
SaltStack | Apache 2.0 |
Chef | Apache 2.0 |
Ansible | GNU Public |
Puppet | Apache أو GPL |
الخلاصة
تعلّمنا في هذا المقال كيفية إنشاء منهجية عمل لإنتاج البرمجيات بأسلوب DevOps باستخدام أدوات مفتوحة المصدر، وتعرفنا على أشهر أدوات التكامل والنشر المستمر CI/CD مفتوحة المصدر وأدوات إدارة الشيفرة المصدرية واختبارها، ويمكنك من الآن بدء تجربة إنشاء منهجية DevOps لمشروعك البرمجي الحقيقي.
ترجمة، وبتصرّف، للمقال A beginner's guide to building DevOps pipelines with open source tools لكاتبه Bryant Son.
تعليقات
إرسال تعليق