بجدارة. كيفية تنظيم التحكم في الحزم من المستودعات الخارجية وتفويض التحكم لفرق المنتج





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



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



ما أردنا تحقيقه



قبل الشروع في وصف النهج ، بضع كلمات حول المهام التي أردنا حلها:



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


بناء ميزة تحليل دورة الحياة



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



لنأخذ مستودع Debian Stretch الشرطي كمثال. ينطبق هذا الأسلوب على مستودعات Docker و SaltStack وما إلى ذلك. تم تسجيل ثلاث شرائح في الجدول الزمني للتواريخ T1 و T2 و T3.





T1 T2 T3
تمتد 20200305 20200420 20200615
الميزة 1 20200304 20200304 20200501
الميزة 2 20200304 20200304 20200601
ميزة 3 20200301 20200406 20200406


لقد قمنا بجدولة تكوين مستودع Debian Stretch الخارجي لبناء توزيعات Feature1 و Feature2 و Feature3. من الجدول يمكنك أن ترى أن تكوين المستودع الخارجي يتحكم فيه كل فرع بشكل مستقل. لقد توصلنا إلى اتفاق لإلزام أنفسنا بالفرع الرئيسي لـ Debian Stretch على أساس يومي ووضع علامة على كل شريحة بتنسيق YYYYMMDD ، على سبيل المثال 2020304 لشريحة 4 مارس 2020. يلخص الجدول لقطات المستودع الخارجي المستخدم للتوزيع في كل فرع في ثلاث نقاط زمنية مختلفة والتكوين في معالج Debian Stretch. يقوم الفريق لكل ميزة أو لكل إصدار بتحديث تكوين المستودعات الخارجية وفقًا لتقديره ووفقًا لدورة التطوير الخاصة به.



استخدام الميزة 1 كمثال: يبدأ فريق المنتج في تطوير ميزة جديدة ويصلح تكوين المستودع الخارجي في ملفات التكوين اعتبارًا من تاريخ 20200228 (انظر الرسم البياني أعلاه).



قم بالتبديل إلى 20200228

deb http://repository.co/debian-stretch-20200228 stretch main contrib non-free



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



قم بالتبديل إلى 20200304

deb http://repository.co/debian-stretch-20200304 stretch main contrib non-free



بعد ذلك ، هناك تبديل آخر لقاعدة الحزمة في التاريخ 20200501.



قم بالتبديل إلى 20200501

deb http://repository.co/debian-stretch-20200501 stretch main contrib non-free



إذا رسمنا الآن شرائح زمنية ، فسنرى أنه في بعض الأحيان يكون تطوير T1 و T2 Feature1 على قاعدة الحزمة ، "مجمدة" في 4 مارس 2020. وفي T3 ، يجري بالفعل تطوير قاعدة حزمة جديدة في 1 مايو 2020.



إدارة تبعية المنتج متعدد الإصدارات



الآن دعونا نلقي نظرة على إدارة التبعية للعديد من إصدارات المنتجات النشطة هناك ثلاثة إصدارات للدعم ، 2.5 و 2.6 و 2.7.



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





إطلاق سراح تكوين
2.5.128 ، 2.5.135 ، 2.5.207 20200301
2.6.201 ، 2.6.215 ، 2.6.315 20200301
2.7.210 ، 2.7.217 ، 2.7.305 20200404


بدلاً من تسمية الشرائح حسب تواريخ YYYYMMDD ، نستخدم أيضًا تسمية العلامات بالتنسيق <ProjectName.ReleaseVersion> (release_name.release_version من المنتج ، على سبيل المثال name.2.2) أو <ProjectName-FeatureNumber> (إضافة رقم ميزة ، على سبيل المثال 3).



لقطة لـ 2.5 اعتبارًا من 20200301

deb http://repository.co/debian-stretch-projectname-2.5 stretch main contrib non-free # 20200301



وهكذا ، أثناء تطوير الإصدار 2.5 ، قام الفريق بإصلاح تكوين المستودعات التابعة اعتبارًا من 20200301. في مكان ما في أبريل ، بدأ الفريق إصدار 2.6 جديد وقرر استخدام تكوين حزم المستودعات الخارجية من 2.5. قم بإنشاء لقطة 2.6 جديدة من اللقطة 2.5. في المستقبل ، يمكن أن تتباعد مستودعات إصدارات 2.5 و 2.6 بسهولة. لقد صنعنا العلامة الخاصة بنا debian-stretch-projectname-2.6 لـ 2.6.



لقطة لـ 2.6 اعتبارًا من 20200301

deb http://repository.co/debian-stretch-projectname-2.6 stretch main contrib non-free # 20200301



في حالة الإصدار 2.7 ، يمكن للفريق بدء التطوير من الفرع الرئيسي - لقطة يومية للمستودع الأصلي.



لقطة لـ 2.7 اعتبارًا من 20200404

deb http://repository.co/debian-stretch-projectname-2.7 stretch main contrib non-free # 20200404



إدارة التبعية متعددة المنتجات



لنلقِ نظرة على إدارة التبعية متعددة المنتجات باستخدام مثال منتجين بدورات إصدار مختلفة وفرق المنتجات الخاصة بهما: Stealth و Infiniti.







دعونا نعلق على الجدول ما يحدث ومتى.

المنتج إطلاق سراح تكوين
التسلل 2.2 r2.2.124 20200301
التسلل 2.2 r2.2.131 ، r2.2.162 20200305
إنفينيتي 4.0 r4.0.235 ، r4.0.241 20200303
إنفينيتي 4.0 r4.0.250 20200308


1. دع تطوير الإصدار 2.2 من مشروع Stealth يبدأ في 1 مارس 2020 ، لذلك تم إنشاء لقطة من تكوين قاعدة بيانات الحزمة للتاريخ الحالي. تم إصدار الإصدار 2.2.124 مع قاعدة الحزمة الخاصة بالمستودع الخارجي من 20200301.



Stealth 2.2

deb http://repository.co/debian-stretch-stealth-2.2 stretch main contrib non-free # 20200301



2. في اليوم الخامس ، يتم تحديث قاعدة الحزمة. يتحول مستودع العمل debian-stretch-stealth-2.2 على الفور إلى التاريخ المطلوب ، ويتم إصدار الإصدارين 2.2.131 و 2.2.162 مع حزم المستودعات الخارجية من 20200305. بدون معالجات إضافية في البيئة ، تلقت جميع الخدمات المصغرة للمنتج البالغ عددها 100500 بيئة جديدة على الفور في خط أنابيب التجميع 20200305 ...



الشبح 2.2

deb http://repository.co/debian-stretch-stealth-2.2 stretch main contrib non-free # 20200305



3. بالتوازي مع اليوم الثالث ، يبدأ تطوير مشروع Infiniti الإصدار 4.0 ويتم إنشاء شريحة من المستودع بتاريخ 20200303 له. تم إصدار الإصدارين 4.0.235 و 4.0.241 مع حزم المستودعات الخارجية لعام 20200303.



Infiniti 4.0

deb http://repository.co/debian-stretch-infiniti-4.0 stretch main contrib non-free # 20200303



4. بعد إصدار الإصدار 4.0.241 ، قام الفريق يقرر تحديث تكوين المستودع إلى 20200308 وإصدار إصدار جديد بتكوين جديد للحزم الخارجية. تم إصدار الإصدار 4.0.250 مع حزم حزم لـ 20200308.



إنفينيتي 4.0

deb http://repository.co/debian-stretch-infiniti-4.0 stretch main contrib non-free # 20200308



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



ندير شرائح كل مستودع خارجي في حاوية Docker منفصلة ، لذلك في أي وقت يمكننا تبديل مستودع معين للتنزيل من الشبكة الخارجية في حالة وقوع بعض الحوادث.



قم بتنزيل قائمة بجميع المستودعات



# For example
curl repository.co/info/sources.list | grep $(lsb_release -cs) > /etc/apt/sources.list


الإنشاء التلقائي لشرائح من المستودعات الخارجية



يتم تحديث المستودعات كل ليلة وفقًا لجدولة GitLab. عند إضافة مستودع جديد ، يتم تطبيق التغييرات تلقائيًا على الخادم.







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



النتيجة



  1. لم يعد إعداد نسخة جديدة من مجموعة أدوات التوزيع للحصول على الاعتماد يمثل مشكلة. بالنسبة لفترة الشهادة ، نقوم بإصلاح تكوين التوزيع ، وإذا كنت بحاجة إلى إصلاح شيء ما على الفور ، فمع وجود احتمال كبير لن تكون هناك أخطاء في الإصلاح العاجل الذي تم إصداره بسبب التغييرات في البيئة.
  2. تحصل جميع تصميمات الميزات على الحالة المُدارة للمستودعات الخارجية.
  3. يتم تسريع طرح الإصلاح العاجل والتحقق من ضمان الجودة بنتيجة يمكن التنبؤ بها وسريعة وناجحة.
  4. Feature- , .
  5. .


لاحظ أن دبيان لديها مصدر snapshot.debian.org رسمي مع لقطات يومية وأعماق تخزين كبيرة. هذا يكفي لمهام معينة.



بفضل Sergey Smirnov والمجتمع لأداة ممتازة لإدارة تكوين مستودعات Aptly الخارجية. منا - مساهمة صغيرة في أفضل الممارسات لاستخدام هذه الأداة المفيدة في ناقلات الإنتاج.



في المقالات التالية ، سنتحدث عن حزمة Aptly + Simple-CDD لإعداد صور ISO للتوزيعات ، وتفويض إدارة التبعيات الخارجية لفرق المنتج ، ومشكلات الاستخدام المناسب في عملية إدارة التبعيات الخارجية.



المؤلفون : نيكيتا دراشيف ، ألكسندر بازدنيكوف ، تيمور جيلمولين



All Articles