الأسئلة الشائعة

إذا كانت لديك أسئلة أو كنت بحاجة إلى الدعم، يُرجى الاطِّلاع على الحصول على المساعدة.

ما هو Bazel؟

Bazel هي أداة تعمل على برمجة إصدارات البرامج والاختبارات. تتضمن مهام الإصدار المُعتمد تشغيل برامج التجميع والروابط لإنشاء برامج ومكتبات قابلة للتنفيذ، بالإضافة إلى تجميع حِزم قابلة للنشر لنظامَي التشغيل Android وiOS وبيئات مستهدفة أخرى. تشبه Bazel الأدوات الأخرى، مثل Make وAnt وGrdle وBuck وPant و Maven.

ما هي مميزات Bazel؟

تم تصميم Bazel ليناسب الطريقة التي تم تطوير البرامج بها في Google. يتضمن هذا الإصدار الميزات التالية:

  • الدعم بلغات متعددة: تدعم Bazel لغات متعددة، ويمكن تمديدها لإتاحة لغات البرمجة العشوائية.
  • لغة إصدار عالية المستوى: يتم وصف المشاريع باللغة BUILD، وهي تنسيق نص موجز يصف المشروع كمجموعات من المكتبات الثنائية والبرامج الثنائية والاختبارات المرتبطة. في المقابل، باستخدام أدوات مثل Make، يجب وصف الملفات الفردية واستدعاءات التجميع.
  • دعم الأنظمة الأساسية المتعددة: يمكن استخدام الأداة نفسها وملفات BUILD نفسها لإنشاء برامج للبُنى الأساسية المختلفة وحتى الأنظمة الأساسية المختلفة. في Google، نستخدم Bazel لإنشاء كل شيء، بدءًا من تطبيقات الخوادم التي تعمل على الأنظمة في مراكز البيانات التابعة لنا إلى تطبيقات العملاء التي تعمل على الهواتف الجوّالة.
  • التكرار: في ملفات BUILD، يجب أن تحدد كل مكتبة واختبار وثنائي تبعياتها المباشرة تمامًا. تستخدم Bazel معلومات التبعية هذه لمعرفة ما يجب إعادة إصداره عند إجراء تغييرات على ملف مصدر، والمهام التي يمكن تنفيذها بالتوازي. وهذا يعني أنّ جميع الإصدارات تبدأ تدريجيًا وتعرض النتيجة نفسها دائمًا.
  • قابلية التطور: يمكن للبيزال التعامل مع الإصدارات الكبيرة؛ في Google، من الشائع أن يحتوي البرنامج الثنائي للخادم على 100 ألف ملف مصدر، كما أن الإصدارات التي لم يتم فيها إجراء أي تغييرات تستغرق حوالي 200 ملّي ثانية.

لماذا لا تستخدم Google...؟

  • التصميم والنينجا: توفر هذه الأدوات تحكمًا دقيقًا في الأوامر التي يتم استدعاؤها لإنشاء ملفات، ولكن يرجع القرار إلى المستخدم في كتابة القواعد الصحيحة.
    • يتفاعل المستخدمون مع Bazel على مستوى أعلى. على سبيل المثال، تحتوي Bazel على قواعد مضمّنة لكل من "اختبار جافا" و"C++ الثنائي" وأفكار مثل "Platform Platform" و"host Platform". تم اختبار هذه القواعد على أنها غير مضمونة.
  • النمتين وMaven: يستطيع كل من النمتين وMaveن التركيز في المقام الأول على جافا، بينما تعالج Bazel عدة لغات. تشجّع Bazel التقسيم الفرعي لقواعد الرموز في وحدات أصغر قابلة لإعادة الاستخدام، ولا يمكنها إعادة إنشاء سوى الوحدات التي تحتاج إلى إعادة البناء. وذلك يؤدي إلى تسريع عملية التطوير عند التعامل مع قواعد الرموز الأكبر حجمًا.
  • Gradle: تتسم ملفات الإعداد في Bazel بأنها أكثر تنظيمًا من Gradle، مما يتيح لـ Bazel فهم ما يؤديه كل إجراء بالضبط. ويسمح هذا الإجراء بمزيد من التوازي وإعادة الظهور.
  • السراويل، باك: تم إنشاء كلتا الأداتين وتطويرهما من قِبل موظفي Google السابقين في Twitter وفورسكوير وFacebook على التوالي. تم تصميم هذه النماذج على طراز Bazel، ولكن مجموعات ميزاتها مختلفة، وبالتالي ليست بديلاً صالحًا لنا.

من أين تأتي بازل؟

البازل هو نكهة للأداة التي تستخدمها Google لإنشاء برامج الخادم الخاصة بها داخليًا. وقد توسّعت لإتاحة برامج أخرى أيضًا، مثل التطبيقات المتوافقة مع الأجهزة الجوّالة (iOS وAndroid) التي تتصل بخوادمنا.

هل أعدت كتابة أداتك الداخلية كبرنامج مفتوح المصدر؟ هل هي شوكة؟

تشارك Bazel معظم رموزها مع الأداة الداخلية، وتُستخدم قواعدها لملايين الإصدارات كل يوم.

لماذا أنشأت Google شركة Bazel؟

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

هل تحتاج Bazel إلى مجموعة بنية؟

وتعمل Bazel على تنفيذ عمليات الإصدار محليًا بشكل تلقائي. ومع ذلك، يمكن لأداة Bazel أيضًا الاتصال بمجموعة إصدارات لإصدارات واختبارات أسرع. راجِع مستنداتنا عن التشغيل عن بُعد والتخزين المؤقت والتخزين المؤقت عن بُعد للتعرُّف على المزيد من التفاصيل.

كيف تتم عملية تطوير Google؟

بالنسبة إلى قاعدة رمز الخادم، نستخدم سير عمل التطوير التالي:

  • تتوفّر جميع رموز خوادمنا في نظام واحد للتحكّم في الإصدار.
  • ينشئ الجميع برامجهم باستخدام Bazel.
  • وتمتلك الفرق المختلفة أقسامًا مختلفة من الشجرة المصدر وتجعل مكوّناتها متاحة كأهداف BUILD.
  • ويتم استخدام الفرع في المقام الأول لإدارة الإصدارات، لذلك يعمل كل شخص على تطوير برامجه عند مراجعة العنوان.

تُعدّ Bazel أساسًا لهذه الفلسفة، حيث تتطلّب Bazel تحديد جميع الارتباطات التي تعتمد عليها بشكل كامل، حيث يمكننا توقّع البرامج والاختبارات المتأثرة بالتغيير وفحصها قبل إرسالها.

يمكن العثور على مزيد من المعلومات الأساسية عن عملية التطوير في Google على مدونة أدوات eng.

لماذا فتحت Bazel؟

يجب أن يكون تصميم البرنامج ممتعًا وسهلاً. إنشاءات بطيئة وغير متوقعة تجعل المرح ممتعًا في البرمجة.

لماذا أريد استخدام Bazel؟

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

هل يمكنني الاطّلاع على أمثلة؟

نَعَمْ الاطّلاع على مثال بسيط أو قراءة رمز مصدر Bareel للحصول على مثال أكثر تعقيدًا

ما هو أفضل أداء في Bazel؟

تتميّز البازل في مشاريع البناء واختبارها بالخصائص التالية:

  • مشاريع بقاعدة رموز كبيرة
  • المشاريع المكتوبة بلغات متعددة (متعددة)
  • المشاريع التي يتم نشرها على أنظمة أساسية متعددة
  • المشاريع التي تحتوي على اختبارات شاملة

أين يمكنني تشغيل Bazel؟

تعمل Bazel على نظام التشغيل Linux وmacOS (OS X) وWindows.

يجب أن يكون النقل إلى أنظمة UNIX الأخرى أمرًا سهلاً نسبيًا، ما دام JDK متاحًا للمنصة.

ماذا يجب أن لا أستخدم Bazel؟

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

ما مدى ثبات مجموعة ميزات Bazel؟

يتمتّع الميزات الأساسية (C++ وJava وقواعد التنفيذ) باستخدامًا مكثفًا في Google، لذلك يتم اختبارها جيدًا بدون أي تغيير يُذكر. بالمثل، نختبر إصدارات جديدة من البازل في مئات الآلاف من الأهداف كل يوم للعثور على التراجع، كما نطرح إصدارات جديدة عدة مرات كل شهر.

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

ما مدى استقرار برنامج Bazel كبرنامج ثنائي؟

داخل Google، نتأكد من أن أعطال Bazel نادرة جدًا. يجب أن يتوافق ذلك أيضًا مع قاعدة الرموز المفتوحة المصدر.

كيف يمكنني بدء استخدام Bazel؟

يُرجى الاطّلاع على البدء.

هل لا يحُل تطبيق docker مشاكل التكرار

باستخدام docker، يمكنك إنشاء وضع الحماية بسهولة مع إصدارات نظام التشغيل الثابتة، مثل Ubuntu 12.04 وFedora 21. ويحل هذا مشكلة تكرار التكرار في بيئة النظام، بمعنى "ما إصدار /usr/bin/c++ الذي أحتاج إليه؟"

لا تعالج أداة docker إمكانية إعادة الإنتاج في ما يتعلق بالتغييرات التي تطرأ على رمز المصدر. يمكن أن يؤدي تشغيل أداة Makebook باستخدام Makefile بشكل غير صحيح داخل حاوية docker إلى نتائج غير متوقعة.

داخل Google، نتحقّق من الأدوات للتحكّم في المصدر من أجل إعادة الإنتاج. وبهذه الطريقة، يمكننا فحص التغييرات التي تم إجراؤها على الأدوات ("ترقية GCC إلى 4.6.1") باستخدام الآلية نفسها التي تعمل بها التغييرات على المكتبات الأساسية ("إصلاح فحص الحدود في OpenSSL").

هل يمكنني إنشاء برامج ثنائية لنشرها على docker؟

باستخدام Bazel، يمكنك إنشاء برامج ثنائية مستقلة وثابتة في C/C++ وملفات جرّة قائمة بذاتها للغة Java. يتم تشغيل هذه الخدمات مع الاعتماد على القليل من العناصر على أنظمة UNIX العادية، ومن ثم يجب تثبيتها بسهولة في حاوية حاوية الإرساء.

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

هل يمكنني إنشاء صور docker باستخدام Bazel؟

نعم، يمكنك استخدام قواعد Docker لإنشاء صور docker قابلة للتكرار.

هل سيُعيد تطبيق Bazel إنشاء تصاميمي تلقائيًا؟

بالنسبة إلى برامج ثنائية Java وC++، نعم، نفترض أنك لم تغير سلسلة الأدوات. إذا كان لديك خطوات إصدار تتضمن وصفات مخصصة (على سبيل المثال، تنفيذ برامج ثنائية من خلال نص برمجي برمجي داخل قاعدة)، فستحتاج إلى توخي الحذر الإضافي:

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

هل لديك إصدارات ثنائية؟

نعم، يمكنك العثور على أحدث برنامجات ثنائية ومراجعة سياسة الإصدار.

أستخدم Eclipse/IntelliJ/XCode. كيف تتعاون Bazel مع IDE؟

بالنسبة إلى IntelliJ، يُرجى الاطّلاع على المكوّن الإضافي IntelliJ with Bazel.

بالنسبة إلى XCode، تحقق من Tulsi.

بالنسبة إلى Eclipse، يمكنك الاطّلاع على المكوّن الإضافي E4B.

بالنسبة إلى IDE الأخرى، يمكنك الاطّلاع على مشاركة المدونة حول آلية عمل هذه المكوّنات الإضافية.

أستخدم Jenkins/CircleCI/TravisCI. كيف تُدير البازل نظام التشغيل CI؟

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

ويتوفّر المزيد من التفاصيل حول رموز الخروج في دليل المستخدم.

ما الميزات المستقبلية التي يمكننا توقعها في Bazel؟

اطّلِع على خرائط الطريق.

هل يمكنني استخدام Bazel لمشروعي INSERT LANGUAGE HERE؟

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

وإذا كنت تريد تطوير إضافات أو التعرُّف على آلية عملها، يُرجى الاطّلاع على وثائق تمديد Bazel.

هل يمكنني المساهمة في قاعدة رموز Bazel؟

يمكنك الاطّلاع على إرشادات المساهمة.

لماذا لم يتم إجراء كل عمليات التطوير علنًا؟

وما زال علينا إعادة ضبط الواجهات بين الرمز العام في Bazel والإضافات الداخلية بشكل متكرر. وهذا يجعل من الصعب تنفيذ المزيد من التطويرات.

هل أنجزتَ الحلّ المفتوح المصدر "بازل"؟

مفتوح المصدر: Bazel هو عمل قيد التنفيذ. وعلى وجه الخصوص، لا نزال نعمل على توفير إصدار مفتوح المصدر:

  • العديد من اختبارات الوحدات والدمج (التي من المفترض أن تسهّل رموز التصحيح).
  • دمج IDE الكامل.

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

هل هناك أجزاء من Bazel لن تكون مفتوحة المصدر مطلقًا؟

نعم، تندمج بعض قواعد الرموز مع التكنولوجيا الخاصة بـ Google أو كنا نبحث عن عذر للتخلص منها (أو مزيج منها). ولا تتوفر هذه الأجزاء من قاعدة الرموز على GitHub ومن المحتمل ألا تكون متوفّرة على الإطلاق.

كيف يمكنني التواصل مع الفريق؟

يمكنك التواصل معنا على العنوان bazel-talk@googlegroups.com.

أين يمكنني الإبلاغ عن الأخطاء؟

افتح مشكلة على GitHub.

ما المشكلة في كلمة "Blaze" في قاعدة الترميز؟

يكون هذا اسمًا داخليًا للأداة. يرجى الإشارة إلى Bazel باسم Bazel.

لماذا تستخدم مشاريع Google الأخرى (Android وChrome) أدوات الإصدار الأخرى؟

لم يكن Bazel متاحًا خارجيًا حتى الإصدار الأول (Alpha)، لذا لم يتمكن Chromium من استخدام أي مشاريع مفتوحة المصدر مثل Chromium أو Android. بالإضافة إلى ذلك، كان النقص الأصلي في دعم نظام التشغيل Windows يمثل مشكلة في إنشاء تطبيقات Windows، مثل Chrome. بما أن المشروع قد نضج وأصبح أكثر استقرارًا، فإن مشروع مفتوح المصدر لنظام Android قيد عملية النقل إلى Bazel.

كيف نلفظ "بازل"؟

وبالطريقة نفسها التي تستخدم بها كلمة "ريحان" (الأعشاب) باللغة الإنجليزية الأمريكية: "BAY-zel". وتوالي مع "البندق". IPA: /‡beɪz጗l/