لماذا يحتاج كودك إلى منزل مشترك قبل التفكير في CI/CD

أنت تعمل على تطبيق بمفردك. كل الكود موجود على حاسوبك المحمول. يمكنك تغيير أي شيء في أي وقت، ولا تقلق أبدًا بشأن تعطيل عمل شخص آخر. يبدو الأمر بسيطًا ونظيفًا وتحت السيطرة.

ثم ينضم شخص ثانٍ إلى المشروع. الآن لديكما نسختان من الكود على جهازيكما. تصلح خطأ ما بعد ظهر يوم الجمعة. يبدأ زميلك من نسخة قديمة صباح يوم الاثنين ويمحو إصلاحك عن طريق الخطأ. لا يعرف أي منكما ما حدث حتى يلاحظ أحدهم عودة الخطأ. تضيع ساعات في محاولة معرفة أي نسخة تحتوي على الكود الصحيح.

هذه هي اللحظة التي يتوقف فيها "احفظه محليًا" عن العمل.

المشكلة التي تكبر مع فريقك

يزداد الوضع سوءًا عندما يبدأ المستخدمون الحقيقيون في الاعتماد على تطبيقك. تحتاج إلى إصلاح الأخطاء وإضافة الميزات وتحديث المكتبات ومعالجة التصحيحات الأمنية. كل هذه التغييرات يجب أن تحدث بطريقة منسقة. لا يمكنك الاستمرار في تمرير الملفات عبر رسائل الدردشة أو مرفقات البريد الإلكتروني. هذا الأسلوب هش وسهل الفقدان ولا يترك سجلاً لمن غيّر ماذا ومتى.

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

ما يفعله التحكم بالمصادر فعليًا

التحكم بالمصادر هو نظام تخزين للكود يمكن لكل فرد في الفريق الوصول إليه. يبدو الأمر بسيطًا، لكن آثاره هائلة.

يوجد مكان مركزي واحد يحمل كود التطبيق. يُسمى هذا المكان مستودعًا. يمكن لكل فرد في الفريق سحب نسخة من الكود من المستودع إلى جهازه الخاص. عندما ينتهون من تغييراتهم، يدفعون تلك التغييرات مرة أخرى إلى المستودع. يسجل المستودع كل عملية دفع كـ commit — لقطة تحدد حالة الكود في نقطة زمنية محددة.

مع هذا النظام، لا يحتاج فريقك أبدًا إلى السؤال "من لديه أحدث إصدار؟" أو "أي ملف قمت بتغييره؟". كل شيء مسجل في المستودع. فقط انظر إلى سجل الـ commits لترى أحدث التقدم.

الفوائد العملية فورية:

  • كل تغيير يتم تتبعه. تعرف من قام بالتغيير ومتى قام به وماذا غيّر.
  • يمكنك العودة للخلف. إذا حدث خطأ، يمكنك رؤية التاريخ والعودة إلى إصدار سابق.
  • لا مزيد من المحو. يمكن لعدة أشخاص العمل على نفس قاعدة الكود دون تدمير عمل بعضهم البعض عن طريق الخطأ.
  • مصدر واحد للحقيقة. يتفق الجميع على أن المستودع يحتوي على الكود الحقيقي والحالي.

لماذا يعتبر التحكم بالمصادر أساسًا لـ CI/CD

هذا هو الجزء المهم لخطوط أنابيب التسليم. قبل أن يتمكن أي خط أنابيب آلي من العمل، يحتاج إلى معرفة أي كود سيعالجه. يحتاج خط الأنابيب إلى قراءة الكود من مكان ما، وتشغيل الاختبارات، وبناء القطع الأثرية، وإرسالها إلى الخوادم. لا شيء من هذا ممكن إذا كان الكود مبعثرًا عبر أجهزة محمولة فردية.

يوفر التحكم بالمصادر مكانًا واحدًا يمكن لخط الأنابيب الوثوق به. يسحب خط الأنابيب الكود من المستودع، ويعالجه، وينتج المخرجات. لهذا السبب فإن التحكم بالمصادر ليس اختياريًا لـ CI/CD — إنه شرط أساسي. بدون مستودع مشترك، لا يوجد مصدر واحد للحقيقة يمكن للأتمتة العمل منه.

فكر فيما يحدث بدونه. في كل مرة يقوم شخص ما بتغيير، يجب على شخص آخر جمع الكود يدويًا من الجميع ودمجه والأمل في عدم وجود تعارضات. العملية بطيئة وغير موثوقة ولا يمكن أتمتتها. ينتهي بك الأمر بعملية تسليم تعتمد على الذاكرة البشرية والتنسيق اليدوي.

التدفق في العالم الحقيقي

إليك كيف يعمل عمليًا:

  1. تكتب الكود على جهازك.
  2. تقوم بعمل commit للتغييرات محليًا مع رسالة تصف ما فعلته.
  3. تدفع commits الخاصة بك إلى المستودع المشترك.
  4. يسحب أعضاء الفريق الآخرون تغييراتك إلى نسخهم الخاصة.
  5. يحتفظ المستودع بسجل دائم لكل commit.

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

ما يأتي بعد ذلك

بمجرد أن يعيش الكود في مستودع مشترك، يظهر سؤال جديد: كيف تدير التغييرات التي لا تزال قيد التطوير؟ لا ينبغي أن تذهب كل تغييرة مباشرة إلى الكود الرئيسي. العمل الذي لا يزال قيد التطوير يحتاج إلى فصل عن الكود المستقر الذي يعتمد عليه المستخدمون.

هنا يأتي دور التفرع (branching). الفرع هو خط تطوير منفصل يتيح لك العمل على التغييرات دون التأثير على الكود الرئيسي. يمكنك التجربة وارتكاب الأخطاء وإصلاح الأشياء في عزلة. عندما يصبح العمل جاهزًا، تدمجه مرة أخرى في الفرع الرئيسي.

التفرع هو الخطوة الطبيعية التالية بعد التحكم بالمصادر. يمنحك القدرة على العمل بالتوازي دون فوضى. لكن هذا موضوع لمقال آخر.

قائمة التحقق العملية

قبل إعداد أي خط أنابيب CI/CD، تأكد من توفر هذه الأساسيات:

  • كل كود التطبيق موجود في مستودع مشترك يمكن لكل فرد في الفريق الوصول إليه
  • كل فرد في الفريق يعرف كيفية سحب (pull) وعمل commit ودفع (push) التغييرات
  • رسائل الـ commit تصف ما تغير ولماذا، وليس فقط "إصلاح" أو "تحديث"
  • يتفق الفريق على أي فرع يمثل الكود المستقر الجاهز للإنتاج
  • الوصول إلى المستودع مُتحكم به — لا يمكن للجميع الدفع مباشرة إلى الفرع الرئيسي

خلاصتك

التحكم بالمصادر ليس شيئًا جميلًا أو ممارسة أفضل. إنه الطابق الأرضي لأي عملية تسليم موثوقة. بدونه، سيقضي فريقك وقتًا أطول في تنسيق الكود أكثر من بناء الميزات. معه، لديك مصدر واحد للحقيقة يمكن لكل من فريقك وأتمتتك الوثوق به. ابدأ من هناك قبل أن تقلق بشأن خطوط الأنابيب أو استراتيجيات النشر أو أي جزء آخر من CI/CD.