تعدد الهندسات في كل الأشياء

بواسطة سيباستيان بارينيشيا في ٦ سبتمبر ٢٠٢١
شريحتان، إحداهما مُعلمة بـ "x86" والأخرى بـ "ARM".

عندما بدأنا في وضع أسسنا الأولية في فايناليس، أتذكر أن لدينا فكرة لاختبار Graviton من AWS. لم يكن ذلك عمليًا في عام 2018 دون بناء الأشياء بنفسك. ولكن بسرعة إلى الأمام، نحن في عام 2022، ولا يزال المجتمع يكافح للعثور على دعم ARMv8 في صور Dockerhub.

لكن في عام 2020، حدث شيء كبير: أعلنت شركة Apple عن انتقال أجهزة Mac إلى Apple Silicon مع جدول زمني لمدة عامين.

في فايناليس، نلتزم بأجهزة Apple لتطوير البرمجيات. تحصل على نظام تشغيل شبيه بـ Unix وجودة شاشة وصوت رائعة لمشاهدة الأفلام أو أي شيء آخر 🍿.

في عام 2020، بدأ العد التنازلي. إذا أردنا الاستمرار في الحصول على أجهزة Apple الجديدة في المستقبل، كان يتعين على فايناليس أن تصبح متعددة الهندسات.

دوكر

عندما أصدرت Apple الـ M1، وحصلنا على واحد، كان دوكر يبدأ في “التوافق” معه، ولكن كان لدوكر على ARM بعض المشاكل في الإصدارات الأولى ببساطة لأن المحرك كان يختبر (بواسطتنا، المطورين الرواد).

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

مع تغطية الأدوات الخارجية، كان الأمر مجرد التأكد من أن دوكر يبني صورنا الخاصة لـ ARM64. “مهلا، أنت تستخدم TypeScript؛ يجب أن يعمل ببساطة!”… حسنًا، طالما أن اعتمادياتك لا تتطلب تنزيل الثنائيات أثناء تشغيل npm install.

المشكلة الرئيسية؟ لا توجد ثنائيات متوفرة لـ ARM64، مما يجبر على بناء ثنائي أثناء تشغيل npm install مع make (سكربتات ما بعد التثبيت؟). من منظور التكوين، كان كل ما نحتاجه هو القليل من الاهتمام في بعض ملفات Dockerfile الخاصة بنا وقد حل ذلك كل شيء.

الأنابيب

عند العمل مع GitHub Actions والتعامل مع تعدد الهندسات، لديك خياران: تشغيل عاملين متوازيين (واحد يبني لـ x86/64 والآخر لـ arm64)، أو تشغيل عامل واحد لكلا الهندسات.

اخترت الخيار الثاني للتجربة، من خلال docker buildx. باتباع تعليمات الإعداد لـ build-push-action يمكنك الحصول بسرعة على أنبوب تشغيلي.

السماح لـ buildx بالتعامل مع بناء تعدد الهندسات يتيح لك الدفع إلى Dockerhub دون الحاجة إلى التعامل مع علامات مختلفة لهندسات مختلفة. ستكون جميع علاماتك متوافقة مع تعدد الهندسات.

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

المحتوى مترجم بواسطة gpt-4-1106-preview

©2022-2024 سيباستيان بارينيشيا. جميع الحقوق محفوظة.

مبني بواسطة Astro v4.15.9.