FAQ

Jika Anda memiliki pertanyaan lain atau membutuhkan dukungan, lihat Mendapatkan Bantuan.

Apa itu Bazel?

Bazel adalah alat yang mengotomatiskan build dan pengujian software. Tugas build yang didukung mencakup menjalankan compiler dan penaut untuk menghasilkan program dan library yang dapat dieksekusi, serta merakit paket yang dapat di-deploy untuk Android, iOS, dan lingkungan target lainnya. Bazel mirip dengan alat lain seperti Make, Ant, Gradle, Buck, Pants, dan Maven.

Apa yang istimewa dari Bazel?

Bazel didesain agar sesuai dengan cara software dikembangkan di Google. Privacy Sandbox memiliki fitur berikut:

  • Dukungan multibahasa: Bazel mendukung banyak bahasa, dan dapat diperluas untuk mendukung sembarang bahasa pemrograman.
  • Bahasa build tingkat tinggi: Project dijelaskan dalam bahasa BUILD, yaitu format teks ringkas yang menjelaskan project sebagai set library, biner, dan pengujian kecil yang saling terhubung. Sebaliknya, dengan alat seperti Make, Anda harus mendeskripsikan file individual dan pemanggilan compiler.
  • Dukungan multiplatform: Alat yang sama dan file BUILD yang sama dapat digunakan untuk mem-build software untuk arsitektur yang berbeda, dan bahkan platform yang berbeda. Di Google, kami menggunakan Bazel untuk membangun semuanya, mulai dari aplikasi server yang berjalan pada sistem di pusat data kami hingga aplikasi klien yang berjalan di ponsel.
  • Reproduksi: Dalam file BUILD, setiap library, pengujian, dan biner harus menentukan dependensi langsungnya sepenuhnya. Bazel menggunakan informasi dependensi ini untuk mengetahui apa yang harus dibuat ulang saat Anda membuat perubahan pada file sumber, dan tugas mana yang dapat berjalan secara paralel. Ini berarti bahwa semua build bersifat inkremental dan akan selalu memberikan hasil yang sama.
  • Skalabel: Bazel dapat menangani build besar; di Google, biner server biasanya memiliki 100 ribu file sumber, dan build yang tidak memiliki file diubah memerlukan waktu sekitar 200 md.

Mengapa Google tidak menggunakan...?

  • Make, Ninja: Alat-alat ini memberikan kontrol yang sangat tepat atas perintah apa yang dipanggil untuk mem-build file, namun pengguna dapat memilih untuk menulis aturan yang benar.
    • Pengguna berinteraksi dengan Bazel di level yang lebih tinggi. Misalnya, Bazel memiliki aturan bawaan untuk “Pengujian Java”, “biner C++”, dan gagasan seperti “platform target” dan “platform host”. Aturan ini telah diuji coba agar sangat terjamin.
  • Ant dan Maven: Ant dan Maven ditujukan terutama untuk Java, sedangkan Bazel menangani banyak bahasa. Bazel mendorong pembagian codebase dalam unit lebih kecil yang dapat digunakan kembali, dan hanya dapat membuat kembali unit yang perlu dibangun kembali. Hal ini akan mempercepat pengembangan saat bekerja dengan codebase yang lebih besar.
  • Gradle: File konfigurasi Bazel jauh lebih terstruktur daripada Gradle, sehingga Bazel dapat memahami dengan tepat fungsi setiap tindakan. Hal ini memungkinkan lebih banyak paralelisme dan reproduksi yang lebih baik.
  • Pants, Buck: Kedua alat tersebut dibuat dan dikembangkan masing-masing oleh mantan Googler di Twitter dan Foursquare, dan Facebook. Keduanya dibuat sesuai model Bazel, tetapi rangkaian fiturnya berbeda, sehingga ini bukan alternatif yang cocok bagi kita.

Dari mana asal Bazel?

Bazel adalah fitur yang digunakan Google untuk mem-build software servernya secara internal. Google telah berkembang untuk membangun software lain juga, seperti aplikasi seluler (iOS, Android) yang terhubung ke server kami.

Apakah Anda menulis ulang alat internal Anda sebagai {i>open-source<i}? Apakah itu garpu?

Bazel membagikan sebagian besar kodenya dengan alat internal, dan aturannya digunakan untuk jutaan build setiap hari.

Mengapa Google membuat Bazel?

Dahulu kala, Google membuat perangkat lunaknya menggunakan Makefile yang besar dan dihasilkan. Hal ini menyebabkan build yang lambat dan tidak dapat diandalkan, yang mulai mengganggu produktivitas developer dan ketangkasan perusahaan. Bazel adalah cara untuk menyelesaikan masalah ini.

Apakah Bazel memerlukan cluster build?

Bazel menjalankan operasi build secara lokal secara default. Namun, Bazel juga dapat terhubung ke cluster build untuk build dan pengujian yang lebih cepat. Lihat dokumentasi kami tentang eksekusi jarak jauh dan cache serta cache jarak jauh untuk detail lebih lanjut.

Bagaimana cara kerja proses pengembangan Google?

Untuk code base server, kita menggunakan alur kerja pengembangan berikut:

  • Semua kode server berada dalam sistem kontrol versi yang sangat besar.
  • Semua orang membuat perangkat lunak mereka dengan Bazel.
  • Tim yang berbeda memiliki bagian yang berbeda dari hierarki sumber, dan menyediakan komponennya sebagai target BUILD.
  • Percabangan terutama digunakan untuk mengelola rilis, sehingga setiap orang mengembangkan perangkat lunak mereka pada revisi utama.

Bazel adalah landasan filosofi ini: karena Bazel mengharuskan semua dependensi ditentukan sepenuhnya, kita dapat memprediksi program dan pengujian mana yang terpengaruh oleh perubahan, dan memeriksanya sebelum pengiriman.

Latar belakang selengkapnya tentang proses pengembangan di Google dapat ditemukan di blog alat teknik.

Kenapa kamu membuka Bazel?

Membuat perangkat lunak seharusnya menyenangkan dan mudah. Versi yang lambat dan tidak dapat diprediksi membuat pemrograman menjadi lebih menyenangkan.

Mengapa saya perlu menggunakan Bazel?

  • Bazel dapat memberi Anda waktu build yang lebih cepat karena hanya dapat mengompilasi ulang file yang perlu dikompilasi ulang. Demikian pula, aplikasi dapat melewati pengujian yang diketahui belum berubah.
  • Bazel memberikan hasil deterministik. Hal ini menghilangkan kemiringan antara build inkremental dan clean, laptop dan sistem CI, dll.
  • Bazel dapat membangun aplikasi klien dan server yang berbeda dengan alat yang sama dari ruang kerja yang sama. Misalnya, Anda dapat mengubah protokol klien/server dalam satu commit, dan menguji apakah aplikasi seluler yang diupdate berfungsi dengan server yang diupdate, membangun keduanya dengan alat yang sama, dan menuai semua manfaat Bazel yang disebutkan di atas.

Dapatkah saya melihat contoh?

Ya; lihat contoh sederhana atau baca kode sumber Bazel untuk contoh yang lebih kompleks.

Apa yang terbaik dari Bazel?

Bazel berhasil membuat dan menguji project dengan properti berikut:

  • Project dengan codebase besar
  • Project yang ditulis dalam (beberapa) bahasa kompilasi
  • Project yang di-deploy di berbagai platform
  • Project yang memiliki pengujian ekstensif

Di mana aku bisa menjalankan Bazel?

Bazel berjalan di Linux, macOS (OS X), dan Windows.

Porting ke platform UNIX lain seharusnya relatif mudah, selama JDK tersedia untuk platform tersebut.

Apa sebaiknya saya tidak menggunakan Bazel?

  • Bazel mencoba melakukan cache dengan cerdas. Ini berarti API tersebut tidak baik untuk menjalankan operasi build yang output-nya tidak boleh di-cache. Misalnya, langkah-langkah berikut tidak boleh dijalankan dari Bazel:
    • Langkah kompilasi yang mengambil data dari internet.
    • Langkah pengujian yang terhubung ke instance UM (Uji Mutu) situs Anda.
    • Langkah deployment yang mengubah konfigurasi cloud situs Anda.
  • Jika build Anda terdiri dari beberapa langkah panjang yang berurutan, Bazel mungkin tidak dapat banyak membantu. Anda akan mendapatkan lebih banyak kecepatan dengan memecah langkah-langkah panjang menjadi target yang lebih kecil dan terpisah yang dapat dijalankan Bazel secara paralel.

Seberapa stabil set fitur Bazel?

Fitur inti (aturan C++, Java, dan shell) banyak digunakan di dalam Google, sehingga diuji secara menyeluruh dan memiliki sangat sedikit churn. Demikian pula, kami menguji versi baru Bazel di ratusan ribu target setiap hari untuk menemukan regresi, dan kami merilis versi baru beberapa kali setiap bulan.

Singkatnya, kecuali untuk fitur yang ditandai sebagai eksperimental, Bazel seharusnya Just Work. Perubahan pada aturan non-eksperimental akan memiliki kompatibilitas mundur. Daftar status dukungan fitur yang lebih mendetail dapat ditemukan di dokumen dukungan kami.

Seberapa stabil Bazel sebagai biner?

Di dalam Google, kami memastikan bahwa error Bazel sangat jarang terjadi. Hal ini juga harus berlaku untuk codebase open source kita.

Bagaimana cara mulai menggunakan Bazel?

Lihat Memulai.

Bukankah Docker menyelesaikan masalah reproduksi?

Dengan Docker, Anda dapat dengan mudah membuat sandbox dengan rilis OS tetap, misalnya, Ubuntu 12.04, Fedora 21. Hal ini memecahkan masalah reproduksi lingkungan sistem – yaitu, “versi /usr/bin/c++ mana yang saya perlukan?”

Docker tidak menangani reproduksibilitas yang terkait dengan perubahan kode sumber. Menjalankan Make dengan Makefile yang ditulis tidak sempurna di dalam container Docker masih dapat memberikan hasil yang tidak dapat diprediksi.

Di dalam Google, kami memeriksa alat ke dalam kontrol sumber untuk kemampuan reproduksi. Dengan cara ini, kita dapat memeriksa perubahan pada alat (“upgrade GCC ke 4.6.1”) dengan mekanisme yang sama seperti perubahan pada library dasar (“memperbaiki pemeriksaan batas di OpenSSL”).

Dapatkah saya membangun biner untuk deployment di Docker?

Dengan Bazel, Anda dapat mem-build biner mandiri yang tertaut secara statis di C/C++, dan file jar mandiri untuk Java. Library ini berjalan dengan sedikit dependensi pada sistem UNIX normal, sehingga mudah diinstal di dalam container Docker.

Bazel memiliki konvensi untuk menata program yang lebih kompleks, misalnya, program Java yang menggunakan sekumpulan file data, atau menjalankan program lain sebagai subproses. Anda dapat mengemas lingkungan tersebut sebagai arsip mandiri, sehingga dapat di-deploy di berbagai sistem, termasuk image Docker.

Bisakah saya mem-build image Docker dengan Bazel?

Ya, Anda dapat menggunakan aturan Docker kami untuk mem-build image Docker yang dapat direproduksi.

Apakah Bazel akan membuat build saya dapat direproduksi secara otomatis?

Untuk biner Java dan C++, ya, dengan asumsi Anda tidak mengubah toolchain. Jika Anda memiliki langkah-langkah build yang melibatkan urutan langkah khusus (misalnya, menjalankan biner melalui skrip shell di dalam aturan), Anda harus ekstra hati-hati:

  • Jangan gunakan dependensi yang tidak dideklarasikan. Eksekusi dengan sandbox (–spawn_strategy=sandboxed, hanya di Linux) dapat membantu menemukan dependensi yang tidak dideklarasikan.
  • Hindari menyimpan stempel waktu dan User-ID dalam file yang dibuat. file .ZIP dan arsip lainnya sangat rentan terhadap hal ini.
  • Hindari menghubungkan ke jaringan. Eksekusi dengan sandbox juga dapat membantu hal ini.
  • Hindari proses yang menggunakan angka acak, khususnya, traversal kamus diacak dalam banyak bahasa pemrograman.

Apakah Anda memiliki rilis biner?

Ya, Anda dapat menemukan biner rilis terbaru dan meninjau kebijakan rilis kami

Saya menggunakan Eclipse/IntelliJ/XCode. Bagaimana Bazel berinteraksi dengan IDE?

Untuk IntelliJ, lihat plugin IntelliJ dengan Bazel.

Untuk XCode, lihat Tulsi.

Untuk Eclipse, lihat plugin E4B.

Untuk IDE lainnya, lihat postingan blog tentang cara kerja plugin ini.

Saya menggunakan Jenkins/CircleCI/TravisCI. Bagaimana Bazel berinteroperasi dengan sistem CI?

Bazel menampilkan kode keluar selain nol jika pemanggilan build atau pengujian gagal, dan ini seharusnya cukup untuk integrasi CI dasar. Karena Bazel tidak memerlukan clean build agar akurat, sistem CI tidak boleh dikonfigurasi untuk dibersihkan sebelum memulai build/pengujian.

Detail lebih lanjut tentang kode keluar tersedia di Panduan Pengguna.

Fitur mendatang apa yang akan tersedia di Bazel?

Lihat Roadmap kami.

Dapatkah saya menggunakan Bazel untuk project INSERT LANGUAGE HERE?

Bazel dapat diperluas. Siapa pun dapat menambahkan dukungan untuk bahasa baru. Banyak bahasa yang didukung: lihat ensiklopedia build untuk daftar rekomendasi dan awesomebazel.com untuk daftar yang lebih lengkap.

Jika Anda ingin mengembangkan ekstensi atau mempelajari cara kerjanya, lihat dokumentasi untuk memperluas Bazel.

Dapatkah saya berkontribusi pada code base Bazel?

Lihat panduan kontribusi kami.

Mengapa tidak semua pengembangan dilakukan secara terbuka?

Kami tetap harus memfaktorkan ulang antarmuka antara kode publik di Bazel dan ekstensi internal kami secara rutin. Hal ini menyulitkan untuk melakukan banyak pengembangan di tempat terbuka.

Apakah Anda sudah selesai menjadi {i>open source<i} Bazel?

Sumber terbuka Bazel masih dalam pengembangan. Secara khusus, kami masih mengupayakan open source:

  • Banyak pengujian unit dan integrasi kami (yang akan mempermudah kontribusi patch).
  • Integrasi IDE penuh.

Selain kode, kami pada akhirnya ingin semua peninjauan kode, pelacakan bug, dan keputusan desain dilakukan secara publik, dengan melibatkan komunitas Bazel. Kita belum sampai di sana, jadi beberapa perubahan hanya akan muncul di repositori Bazel tanpa penjelasan yang jelas. Terlepas dari kurangnya transparansi ini, kami ingin mendukung developer eksternal dan berkolaborasi. Dengan demikian, kami membuka kode tersebut, meskipun beberapa pengembangan masih dilakukan secara internal oleh Google. Harap beri tahu kami jika ada hal yang tidak jelas atau tidak dapat dibenarkan selagi kami beralih ke model terbuka.

Apakah ada bagian dari Bazel yang tidak akan pernah menjadi open source?

Ya, beberapa code base terintegrasi dengan teknologi khusus Google atau kami mencari alasan untuk menghilangkannya (atau merupakan kombinasi dari keduanya). Bagian-bagian code base ini tidak tersedia di GitHub dan mungkin tidak akan pernah tersedia.

Bagaimana cara menghubungi tim?

Anda dapat menghubungi kami di bazel-discuss@googlegroups.com.

Di mana saya dapat melaporkan bug?

Buka masalah di GitHub.

Ada apa dengan kata “Blaze” di codebase?

Ini adalah nama internal untuk alat. Rujuk Bazel sebagai Bazel.

Mengapa project Google lainnya (Android, Chrome) menggunakan alat build yang lain?

Hingga rilis pertama (Alfa), Bazel tidak tersedia secara eksternal, sehingga project open source seperti Chromium dan Android tidak dapat menggunakannya. Selain itu, kurangnya dukungan Windows merupakan masalah dalam membangun aplikasi Windows, seperti Chrome. Karena project ini sudah matang dan menjadi lebih stabil, Project Open Source Android sedang dalam proses migrasi ke Bazel.

Bagaimana cara mengucapkan “Bazel”?

Cara yang sama seperti “basil” (ramuan) dalam bahasa Inggris AS: “BAY-zel”. Ia berima dengan “hazel”. IPA: /berisiko/