إذا كانت لديك أسئلة أو كنت بحاجة إلى الدعم، يمكنك الاطّلاع على الحصول على المساعدة.
ما هو Bazel؟
Bazel هي أداة تتيح برمجة عمليات إنشاء البرامج واختبارها. وتتضمّن مهام الإصدار المتوافقة تشغيل برامج التجميع والروابط لإنشاء برامج ومكتبات قابلة للتنفيذ، فضلاً عن تجميع حزم قابلة للنشر لنظامَي التشغيل Android وiOS وبيئات الاستهداف الأخرى. تشبه Bazel أدوات أخرى، مثل Make وAnt وGrdle وBuck وسراويل وMaven.
ما هي ميزات Bazel؟
تم تصميم Bazel ليتناسب مع طريقة تطوير البرامج في Google. ونوفّر الميزات التالية:
- التوافق مع اللغات المتعددة: يدعم Bazel لغات متعددة، ويمكن توسيعه ليشمل لغات البرمجة العشوائية.
- لغة إصدار عالية المستوى: يتم وصف المشاريع باللغة
BUILD
، وهي تنسيق نصّي موجز يصف المشروع كمجموعات من المكتبات الصغيرة والبرامج الثنائية والاختبارات. وفي المقابل، باستخدام أدوات مثل "العلامة التجارية"، عليك وصف الملفات الفردية واستدعاءات برامج التجميع. - دعم الأنظمة الأساسية المتعددة: يمكن استخدام الأداة نفسها وملفات
BUILD
نفسها لإنشاء برامج لبنيات مختلفة، وحتى الأنظمة الأساسية المختلفة. في Google، نستخدم Bazel لإنشاء كل شيء بدءًا من تطبيقات الخادم التي تعمل على الأنظمة في مراكز بياناتنا حتى تطبيقات العملاء التي تعمل على الهواتف الجوّالة. - القابلية للتكرار: في ملفات
BUILD
، يجب أن تحدد كل مكتبة واختبار وإصدار ثنائيها العناصر التابعة المباشرة تمامًا. يستخدم Bazel معلومات الاعتمادية هذه لمعرفة ما يجب إعادة تصميمه عند إجراء تغييرات على ملف مصدر، والمهام التي يمكن تشغيلها بالتوازي. وهذا يعني أنّ جميع الإصدارات تكون تدريجيًا وستؤدي دائمًا إلى النتيجة نفسها. - قابلية التوسّع: يستطيع Bazel التعامل مع الإصدارات الكبيرة، وفي Google، من الشائع أن يتضمن البرنامج الثنائي للخادم 100 ألف ملف مصدر، كما أنّ الإصدارات التي لا يتم فيها تغيير أي ملفات تستغرق حوالى 200 ملّي ثانية.
لماذا لا تستخدم Google...؟
- ماركة النينجا: توفر هذه الأدوات تحكمًا دقيقًا للغاية في الأوامر التي يتم استدعاؤها لإنشاء ملفات، ولكن يرجع الأمر إلى المستخدم في كتابة القواعد الصحيحة.
- يتفاعل المستخدمون مع Bazel على مستوى أعلى. على سبيل المثال، لدى Bazel قواعد مضمّنة لكل من "اختبار Java" و"C++ " ومفاهيم مثل "منصّة مستهدفة" و"منصّة مضيف". وتم اختبار هذه القواعد لتكون غير مضمونة.
- تتولّى شركة Ant and Maven: الموجّهان أساسًا بلغة Java، في حين أنّ Bazel تعالج لغات متعدّدة. يشجع Bazel على تقسيم قواعد الرموز فرعيًا في وحدات أصغر قابلة لإعادة الاستخدام، ولا يمكنه إعادة إنشاء سوى الوحدات التي تحتاج إلى إعادة بناء. وذلك يؤدي إلى تسريع عملية التطوير عند التعامل مع قواعد الرموز الأكبر حجمًا.
- Gradle: تكون ملفات الإعداد في Bazel أكثر تنظيمًا من تطبيق Gradle، ما يتيح لها فهم ما يؤدي إليه كل إجراء على حدة. ويتيح ذلك المزيد من المتوازية وإعادة التكرار.
- السراويل، باك: تم إنشاء كلتا الأداتين وتطويرهما بواسطة موظفين سابقين في Google في Twitter وفورسكوير، وFacebook على التوالي. تم تصميم نماذج مثل Bazel، ولكن مجموعات الميزات الخاصة بها مختلفة، لذلك لا يمكن استخدامها كبدائل.
ما هو مصدر لعبة Bazel؟
Bazel هي نوع من الأدوات التي تستخدمها Google لإنشاء برامج الخادم داخليًا. وقد توسّعت هذه الخدمة لبناء برامج أخرى أيضًا، مثل التطبيقات المتوافقة مع الأجهزة الجوّالة (iOS وAndroid) التي تتصل بخوادمنا.
هل أعدت كتابة أداتك الداخلية على أنها مفتوحة المصدر؟ هل هي شوكة؟
تشارك Bazel معظم رموزها مع الأداة الداخلية وتُستخدم قواعدها لملايين الإصدارات كل يوم.
لماذا أنشأت Google Bazel؟
قبل فترة طويلة، أنشأت Google برامجها باستخدام ملفات تحديد الملفات الكبيرة التي تم إنشاؤها. وقد أدى ذلك إلى حدوث أرقام بطيئة وغير موثوق بها، بدءًا من التداخل في إنتاجية مطوّري البرامج وبراعة الشركة. شكّلت Bazel طريقة لحل هذه المشاكل.
هل يتطلب Bazel مجموعة إنشاء؟
تعمل Bazel على إدارة عمليات البناء محليًا بشكل تلقائي. ومع ذلك، يستطيع Bazel أيضًا الاتصال بمجموعة إنشاءات لإنشاء الإصدارات والاختبارات بشكل أسرع. اطّلِع على مستنداتنا عن التشغيل عن بُعد والتخزين المؤقت والتخزين المؤقت عن بُعد لمزيد من التفاصيل.
ما هي آلية عملية تطوير Google؟
بالنسبة إلى قاعدة رمز الخادم، نستخدم سير العمل التالي لتطوير البرامج:
- جميع رموز الخادم متوفرة في نظام تحكم واحد ضخم في الإصدار.
- ينشئ الجميع برامجهم باستخدام Bazel.
- تمتلك فِرق مختلفة أقسامًا مختلفة من العرض التدرّجي المصدر، وإتاحة مكوّناتها كأهداف
BUILD
. - ويتم استخدام الفرع بشكل أساسي لإدارة الإصدارات، لذلك يعمل الجميع على تطوير برامجهم عند مراجعة الرأس.
وتُعدّ Bazel أساسًا في هذه الفلسفة، فبما أنّ Bazel تتطلّب تحديد كل العناصر التابعة لها بالكامل، يمكننا توقّع البرامج والاختبارات المتأثرة بالتغيير وفحصها قبل إرسالها.
يمكن العثور على مزيد من المعلومات الأساسية حول عملية التطوير في Google على مدونة أدوات enging.
لماذا فتحت Bazel؟
يجب أن يكون إنشاء البرنامج ممتعًا وسهلاً. إنّ الإصدارات البطيئة والمتوقّعة لا تتطلّب سوى وقت ممتع في البرمجة.
لماذا عليّ استخدام Bazel؟
- قد تمنحك Bazel أوقات إنشاء أسرع لأنه لا يمكنها إعادة تجميع سوى الملفات التي تحتاج إلى إعادة التجميع. وبالمثل، يمكن أن يؤدي ذلك إلى تخطي إعادة إجراء الاختبارات التي يعلم أنها لم تتغير.
- ينتج عن Bazel نتائج تعريفية. يؤدي ذلك إلى استبعاد الانحراف بين الإصدارات المتزايدة والنظيفة والكمبيوتر المحمول ونظام CI وما إلى ذلك.
- يمكن لتطبيق Bazel إنشاء تطبيقات مختلفة لكل من الخادم والخادم باستخدام الأداة نفسها من مساحة العمل نفسها. على سبيل المثال، يمكنك تغيير بروتوكول العميل/الخادم في عملية التزام واحدة، واختبار أن التطبيق المتوافق مع الأجهزة الجوّالة المُعدَّل يعمل مع الخادم المُعدَّل، ويتم إنشاؤه بالأداة نفسها، ما يؤدي إلى الاستفادة من جميع مزايا Bazel المذكورة أعلاه.
هل يمكنني الاطّلاع على أمثلة؟
نعم، يمكنك الاطّلاع على مثال بسيط أو قراءة رمز مصدر Bazel للاطّلاع على مثال أكثر تعقيدًا.
ما الذي يفضّله مطعم Bazel؟
يضفي "بازل" الضوء على مشاريع البناء واختبارها باستخدام السمات التالية:
- المشروعات التي لها قاعدة رموز كبيرة
- المشاريع المكتوبة (عدة) بلغات مجمّعة
- المشروعات التي يتم نشرها على أنظمة أساسية متعددة
- المشروعات التي تحتوي على اختبارات شاملة
أين يمكنني إدارة Bazel؟
يعمل Bazel على نظامَي التشغيل Linux وmacOS (OS X) وWindows.
يجب أن يكون النقل إلى منصات UNIX الأخرى سهلاً نسبيًا، طالما أن JDK متاح للنظام الأساسي.
ما هي حالات عدم استخدام Bazel؟
- يحاول "بازل" أن يكون ذكيًا بشأن التخزين المؤقت. ويعني هذا أنّه لا يُعدّ مناسبًا لتشغيل عمليات الإصدار التي يجب عدم تخزين مخرجاتها في ذاكرة التخزين المؤقت. على سبيل المثال، يجب عدم تشغيل الخطوات التالية من Bazel:
- خطوة مجمّعة يتم خلالها جلب البيانات من الإنترنت
- خطوة اختبار ترتبط نسخة تأكيد الجودة لموقعك.
- خطوة نشر تغيّر إعدادات السحابة الإلكترونية لموقعك الإلكتروني.
- إذا كان تصميم تطبيقك يتألف من بضع خطوات تسلسلية طويلة، قد لا يتمكّن Bazel من تقديم المساعدة. ستحصل على المزيد من السرعة من خلال تقسيم الخطوات الطويلة إلى أهداف أصغر ومنفصلة، والتي يمكن أن يعمل بها Bazel بالتوازي.
ما مدى ثبات مجموعة ميزات Bazel؟
تستخدم الميزات الأساسية (++C وJava وقواعد واجهة النظام) داخل Google بشكل واسع، لذلك يتم اختبارها بشكل كامل ولا يتم استخدامها بشكل كبير. بالمثل، نختبر إصدارات جديدة من Bazel على مئات آلاف الأهداف يوميًا للعثور على تراجع، كما نُصدر إصدارات جديدة عدة مرات كل شهر.
باختصار، باستثناء الميزات التي تمّ وضع علامة "تجريبية" عليها، يجب أن تعمل Bazel على أنها تعمل فقط. وستكون التغييرات في القواعد غير التجريبية متوافقة مع الأنظمة القديمة. ويمكن العثور على قائمة أكثر تفصيلاً بحالات دعم الميزات في مستند الدعم.
ما مدى استقرار Bazel في البرنامج الثنائي؟
داخل Google، نتأكد من أن أعطال Bazel نادرة جدًا. يجب أن يندرج هذا الرمز أيضًا في قاعدة الرموز المفتوحة المصدر.
كيف يمكنني البدء باستخدام Bazel؟
يُرجى الاطّلاع على البدء.
هل لا يحل تطبيق الإرساء مشاكل التكرار؟
باستخدام Vaulter، يمكنك إنشاء أوضاع الحماية بسهولة مع إصدارات ثابتة لنظام التشغيل، على سبيل المثال، Ubuntu 12.04 وFedora 21. ويؤدي ذلك إلى حل مشكلة تكرار التكرار في بيئة النظام، أي "ما هو إصدار /usr/bin/c++ الذي أحتاج إليه؟"
لا تعالج مساحة الإرساء إمكانية تكرار التغييرات في ما يتعلق بالتغييرات في رمز المصدر. يمكن أن يؤدي تشغيل ماركة باستخدام ملف Makefile مكتوب بشكل غير صحيح داخل حاوية الإرساء إلى نتائج غير متوقعة.
داخل Google، نتحقّق من الأدوات المستخدَمة في "التحكّم في المصدر" لضمان إمكانية إعادة إنتاجها. وبهذه الطريقة، يمكننا فحص التغييرات التي تطرأ على الأدوات ("ترقية GCC إلى الإصدار 4.6.1") باستخدام الآلية نفسها التي تنطبق عليها التغييرات في المكتبات الأساسية ("إصلاح عمليات التحقّق من الحدود في OpenSSL").
هل يمكنني إنشاء برامج ثنائية لنشرها على الإرساء؟
باستخدام Bazel، يمكنك إنشاء برامج ثنائية مستقلّة ومترابطة بشكل ثابت في C/C++ ، وملفات برطمانات مستقلة في Java. تعمل هذه الأنظمة باستخدام عدد قليل من العناصر التابعة على أنظمة UNIX العادية، وبالتالي يجب تثبيتها بسهولة في حاوية الإرساء.
لدى Bazel اصطلاحات لتنظيم برامج أكثر تعقيدًا، مثل برنامج Java، الذي يستهلك مجموعة من ملفات البيانات أو يشغّل برنامجًا آخر كعملية فرعية. ويمكن تجميع هذه البيئات كأرشيفات مستقلة، بحيث يمكن نشرها على أنظمة مختلفة، بما في ذلك صور الإرساء.
هل يمكنني إنشاء صور الإرساء باستخدام Bazel؟
نعم، يمكنك استخدام قواعد Doker لإنشاء صور إرساء قابلة للتكرار.
هل سيعمل Bazel على إعادة إنشاء نماذجي تلقائيًا؟
بالنسبة إلى برامج ثنائية Java وC++ ، نعم، لنفترض أنك لم تغيّر سلسلة الأدوات. إذا كانت لديك خطوات إنشاء تتضمن وصفات مخصَّصة (على سبيل المثال، تنفيذ برامج ثنائية من خلال نص برمجي الأوامر في قاعدة)، ستحتاج إلى توخي الحذر الشديد:
- لا تستخدِم المهام التابعة التي لم يتم الإعلان عنها. يمكن أن يساعد التنفيذ المحمي باستخدام وضع الحماية (–spawn_strategy=sandboxed فقط، على نظام التشغيل Linux فقط) في العثور على تبعيات غير معلنة.
- تجنَّب تخزين الطوابع الزمنية وأرقام User-ID في الملفات التي تم إنشاؤها. تجدر الإشارة إلى أنّ ملفات ZIP والأرشيفات الأخرى تكون عرضةً لها على وجه الخصوص.
- تجنَّب الاتصال بالشبكة. ويمكن أن يساعد تنفيذ وضع الحماية في وضع الحماية هنا أيضًا.
- تجنَّب العمليات التي تستخدم أرقامًا عشوائية، وعلى وجه الخصوص يتم إجراء مسح عشوائي للقاموس بعدة لغات برمجة.
هل لديك إصدارات ثنائية؟
نعم، يمكنك العثور على أحدث إصدارات البرامج الثنائية ومراجعة سياسة الإصدار.
أستخدم Eclipse/IntelliJ/XCode. كيف يمكن دمج Bazel مع IDE؟
بالنسبة إلى IntelliJ، يمكنك الاطّلاع على المكوّن الإضافي IntelliJ مع Bazel.
بالنسبة إلى XCode، يمكنك الاطّلاع على Tulsi.
بالنسبة إلى Eclipse، يمكنك الاطّلاع على المكوّن الإضافي E4B.
ولمزيد من المعلومات في IDE الأخرى، يمكنك الاطّلاع على مشاركة المدونة حول آلية عمل هذه المكوّنات الإضافية.
أستخدم Jenkins/CircleCI/TravisCI. كيف يتعاون Bazel مع أنظمة CI؟
تعرض Bazel رمز خروج غير صفري عند تعذُّر الاستدعاء أو الاختبار، ويجب أن يكون ذلك كافيًا لدمج CI الأساسي. بما أن Bazel لا يحتاج إلى إصدارات سليمة من أجل التصحيح، يجب ألا يتم إعداد نظام CI للتنظيف قبل بدء تشغيل إصدار/اختبار.
وتتوفّر تفاصيل إضافية حول رموز الخروج في دليل المستخدم.
ما الميزات المستقبلية التي يمكننا توقعها في Bazel؟
يمكنك الاطّلاع على خرائط الطرق.
هل يمكنني استخدام Bazel لمشروعي لإدراج اللغة هنا؟
"بازل" قابل للامتداد ويمكن لأي مستخدم إضافة دعم للغات الجديدة. تتوفّر لغات متعددة: يمكنك الاطّلاع على موسوعة الإصدار للحصول على قائمة بالاقتراحات وawesomebazel.com للحصول على قائمة أكثر شمولاً.
إذا كنت تريد تطوير إضافات أو التعرّف على آلية عملها، يُرجى الاطّلاع على وثائق تمديد Bazel.
هل يمكنني المساهمة في قاعدة رموز Bazel؟
يمكنك الاطّلاع على إرشادات المساهمات.
لماذا لم يتم تنفيذ جميع عمليات التطوير بشكل علني؟
وما زلنا بحاجة إلى إعادة ضبط الواجهات بين الرمز العلني في Bazel والإضافات الداخلية بشكل متكرر. وهذا يجعل من الصعب إجراء العديد من التطويرات في الأماكن المفتوحة.
هل انتهيت من فتح مصدر Bazel؟
جارٍ العمل على Bazel مفتوح المصدر. وعلى وجه الخصوص، لا نزال نعمل على إتاحة مصدر مفتوح المصدر:
- العديد من اختبارات الوحدات والتكامل (التي ينبغي أن تسهّل تصحيحات المساهمة)
- دمج IDE الكامل
بالإضافة إلى ذلك، نودّ إجراء جميع عمليات مراجعة الرموز وتتبّع الأخطاء واتخاذ قرارات التصميم بشكل علني مع منتدى Bazel. وبما أننا لم نعدّ بعد، ستظهر بعض التغييرات في مستودع Bazel بدون تفسير واضح. على الرغم من عدم توفّر أي شفافية، نرغب في دعم مطوّري البرامج والتعاون في الخارج. ولهذا السبب، نعمل على فتح الرمز، على الرغم من أنّ بعض عمليات التطوير لا تزال داخلية في Google. يُرجى إعلامنا إذا كان أي شيء يبدو غير واضح أو غير مبرر خلال الانتقال إلى نموذج مفتوح.
هل هناك أقسام من Bazel لن تكون أبدًا مفتوحة المصدر؟
نعم، تتكامل بعض قواعد الرمز مع التكنولوجيا الخاصة بـ Google، أو نبحث عن عذر لتخليصنا (أو مزيج من الاثنين). وهذه الأجزاء من قاعدة الرموز غير متوفّرة على GitHub ولن تتوفّر على الأرجح.
كيف يمكنني التواصل مع الفريق؟
يمكنك التواصل معنا على bazel-conversation@googlegroups.com.
أين يمكنني الإبلاغ عن أخطاء؟
افتح مشكلة على GitHub.
ما هي كلمة "Blaze" في قاعدة الرموز؟
وهو اسم داخلي للأداة. يُرجى الإشارة إلى Bazel باسم Bazel.
لماذا تستخدم مشاريع Google الأخرى (Android وChrome) أدوات إنشاء أخرى؟
حتى الإصدار الأول (الإصدار الأولي)، لم يكن Bazel متاحًا خارجيًا، لذا لم تتمكّن المشاريع المفتوحة المصدر مثل Chromium وAndroid من استخدامه. بالإضافة إلى ذلك، كان النقص الأصلي في دعم Windows مشكلة في إنشاء تطبيقات Windows، مثل Chrome. بما أن المشروع قد نضج وأصبح أكثر ثباتًا، فإن مشروع Android مفتوح المصدر قيد النقل إلى Bazel.
كيف نلفظ "بازل"؟
نُقل إلى هذه اللغة بالطريقة نفسها التي تستخدم بها "الأعشاب" باللغة الإنجليزية الأمريكية، وهي "BAY-zel" (وهي "البندق"، وهي تؤدي إلى قوافي مع كلمة "بندق"{/3}