تُنشر أدوات المسارات المختلفة لدينا كصور Docker.
تحتاج كل أداة إلى Dockerfile، وهو يحدد كيفية بناء الآلة.
وينبغي أن يوجد في الدليل الجذر لمستودعك وأن يكون اسمه Dockerfile.
ينبغي أن يُنشئ Dockerfile أصغر صورة ممكنة تعمل بها الأداة بشكل صحيح وسريع. وتحتوي صفحة أفضل الممارسات لدينا على الكثير من النصائح التي تساعدك على تحقيق هذا الهدف.
يحصل مشغّل الاختبارات على 100% من وحدة المعالجة المركزية و3 جيجابايت من الذاكرة خلال نافذة مدتها 20 ثانية لكل حل. وبعد 20 ثانية، تُوقف العملية ويُبلَّغ عن انتهاء المهلة برمز الخطأ 408.
نوصي بشدة باتباع وثيقة أفضل ممارسات الأداء لتقليل احتمال انتهاء المهلة.
stdout/stderr
قد يُنتج تشغيل الأداة ما يصل إلى ميغابايت واحد كحد أقصى من stdout وstderr.
وإذا أنتج أكثر من ذلك، فسيُقتل برمز الخطأ 413.
يُخزَّن محتوى stdout وstderr من كل تشغيل في ملفات.
ويمكنك كتابة ملف results.out في دليل المخرجات يحتوي على معلومات تصحيح الأخطاء.
في الوقت الحالي، لا يستطيع المشرفون على الصيانة عرض محتوى هذه الملفات.
لا يجوز أن يتجاوز ملف النتائج 500 كيلوبايت (بما في ذلك أي تتبّعات مكدس وما شابه). وإذا كان الملف أكبر من ذلك، فسيُقتل تشغيل الأداة برمز الخطأ 460.
يحصل كل حل على 100% من موارد الآلة خلال نافذة مدتها عشرون ثانية. وبعد 20 ثانية، تُوقف العملية ويُبلَّغ عن انتهاء المهلة.
تحتاج بعض الأدوات إلى انحرافات (طفيفة) عن الإعدادات الافتراضية.
وإن كان الأمر كذلك، فتُضبط هذه الانحرافات في ملف tools.json في مستودع Tooling Invoker.
تعمل الأدوات دون وصول إلى الإنترنت. وهناك إعدادان مختلفان يمكنك استخدامهما:
none. يعطّل هذا جهاز الشبكة داخل الحاوية.internal. يضيف هذا جهاز شبكة داخل الحاوية، لكن الشبكة لا تصل إلى أي شيء خارجي.تؤدي اللغات المختلفة أداءً أفضل أو أسوأ مع إعدادات مختلفة (مثلًا، Ruby أسرع بمرتين مع none. وElixir أسرع بـ12x مع internal).
يمكنك التجربة محليًا باستخدام خيار --network عند تشغيل Docker لديك. وخيار --network none مدعوم افتراضيًا.
ولاستخدام الشبكة الداخلية، شغّل أولًا docker network create --internal internal لإنشاء الشبكة، ثم استخدم --network internal عند تشغيل الحاوية.
يمكن للغات أن تحدد الحد الأقصى للذاكرة الذي تحتاج إلى استخدامه لتشغيل مهامها. وضبط هذا الحد عند أدنى قيمة ممكنة يعني أننا نستطيع تشغيل مزيد من المهام بالتوازي وبسرعة أكبر. ويعني أيضًا أن من يحاول إساءة استخدام الذاكرة لن ينجح. وتحتاج اللغات المختلفة إلى حدود قصوى متباينة جدًا لاستخدام الذاكرة. وننصح بقياس أداء تنفيذ docker run لتحديد الحد الأقصى للذاكرة التي يستخدمها، ونحن نقدّر ذلك.
وينبغي تحديد الذاكرة باستخدام الرقم متبوعًا باللاحقة b أو k أو m أو g للإشارة إلى البايت أو الكيلوبايت أو الميغابايت أو الجيجابايت.
يمكنك اختبار الإعدادات أعلاه باستخدام هذا الأمر:
docker container run -v /path/to/job:/mnt/exercism-iteration --network none -m 1GB exercism/ruby-test-runner lasagna /mnt/exercism-iteration/ /mnt/exercism-iteration/
تتطلب كل التغييرات على ملفات Dockerfile مراجعة PR من فريق @exercism/maintainers-admin، وذلك لتجنّب إدخال ثغرات أمنية.