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

إذا كنت لا تعرف هدفًا ، فسيكون من الصعب حقًا القيام بهذه المهمة. بدا المتغير الأول للنشر مثل bash :
make dist for i in abc ; do scp ./result.tar.gz $i:~/ ssh $i "tar -zxvf result.tar.gz" ssh $i "make -C ~/resutl install" done
تم تبسيط النص فقط لإظهار الفكرة الرئيسية: لم يكن هناك CI / CD. كان تدفقنا:
- بنيت على المضيف المطور.
- تم نشره لاختبار بيئة العرض التوضيحي.
في المرحلة الحالية ، معرفة كيف تم توفيرها ، كانت جميع kludges المعروفة سحر القذرة داخل عقول المطورين. لقد كانت مشكلة حقيقية بالنسبة لنا بسبب نمو الفريق.
فقط افعلها
استخدمنا TeamCity لمشاريعنا ولم يكن gitlab شائعًا ، لذلك قررنا استخدام TeamCity. أنشأنا يدويا VM. كنا نجري اختبارات داخل VM.
كانت هناك بعض الخطوات في تدفق البناء:
- تثبيت بعض الأدوات المساعدة داخل بيئة أعدت يدويا.
- تأكد من أنه يعمل.
- إذا كان كل شيء على مايرام ، فقم بنشر RPMs.
- تحديث التدريج إلى الإصدار الجديد.
make install && ./libs/run_all_tests.sh make dist make srpm rpmbuild -ba SPECS/xxx-base.spec make publish
تلقينا نتيجة مؤقتة:
- كان هناك شيء رنابل في الفرع الرئيسي.
- عملت في مكان ما.
- يمكننا اكتشاف بعض القضايا العرضية.
هل تشعر بالرائحة؟
- كان هناك جحيم التبعية مع RPMs.
- كل شخص لديه بيئة تطوير الحيوانات الأليفة الخاصة به.
- كانت الاختبارات تجري داخل بيئة مجهولة.
- كان هناك ثلاثة كيانات غير محدودة تمامًا: نظام التشغيل ، توفير التركيبات والاختبارات.
تقليل السحر القذر
قمنا بتغيير التدفقات والعملية:
- لقد أنشأنا حزمة التعريف RPM وإزالة الجحيم التبعية.
- أنشأنا قالب تطوير VM عبر متشرد.
- انتقلنا البرامج النصية باش إلى ansible.
- من ناحية ، أنشأنا إطار اختبارات التكامل ، ولكن من ناحية أخرى ، استخدمنا serverspec .
نتيجة للمرحلة الحالية التي تلقيناها:
- كانت جميع بيئة التطوير لدينا متطابقة.
- تمت مزامنة رمز التطبيق ومنطق الحكم مع كل مرة.
- قمنا بتسريع عملية تطوير المطورين الجدد.
من ناحية ، كان البناء بطيئًا بالفعل (حوالي 30-60 دقيقة) ، لكن من ناحية أخرى كان جيدًا بدرجة كافية ونجح في اجتياز الغالبية العظمى من المشكلات قبل ضمان الجودة يدويًا. ومع ذلك ، واجهنا مشكلات مختلفة جديدة ، أي بعد ذلك قمنا بتحديث النواة أو بعد ذلك قمنا باستعادة الحزمة.
تحسينه

لقد حللنا الكثير من القضايا المختلفة:
- عملت اختبارات التكامل أبطأ وأبطأ لأن قالب dev VM كان أقدم من RPMs الفعلية. لقد قمنا بإعادة إنشاء القالب يدويًا ، ثم قررنا تشغيله تلقائيًا:
- إنشاء VMDK تلقائيا.
- نعلق VMDK إلى VM.
- حزمة VM وتحميل إلى s3.
- في حالة الدمج ، لم يكن من الممكن الحصول على حالة الإنشاء ، ونتيجة لذلك ، انتقلنا إلى gitlab.
- اعتدنا على القيام بالإصدار اليدوي كل أسبوع ، وقمنا بالتشغيل الآلي له.
- نسخة زيادة السيارات.
- توليد ملاحظات الإصدار على أساس القضايا المغلقة.
- تحديث سجل التغيير.
- إنشاء طلبات دمج.
- خلق معلما جديدا.
- لقد نقلنا بعض الخطوات إلى عامل ميناء (الوبر ، إجراء بعض الاختبارات ، إرسال الرسائل ، إنشاء مستندات وغيرها).
ونتيجة لذلك ، بدا مخطط المرحلة الحالي كما يلي:

- كان هناك الكثير من RPM / DEB repos للحزم.
- كان هناك S3 كما مستودع التحف.
- إذا قمت بتشغيل بنية مرتين لنفس الفرع ، فستتلقى نتيجة مختلفة ، لأن تبعيات حزمة التعريف لم تكن مضغوطة.
- كانت هناك حدود غير واضحة (خطوط حمراء اللون) عبر البنيات.
ومع ذلك ، كنا قادرين على إنتاج الإصدار كل أسبوع وتحسين سرعة التطوير.
الخاتمة

لم تكن النتيجة مثالية ، ولكن رحلة الألف لي تبدأ بخطوة واحدة ©.
PS هو crosspost