FAQ

Laporkan masalah Lihat sumber

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

Apa itu Bazel?

Bazel adalah alat yang mengotomatiskan pengujian dan pembuatan software. Tugas build yang didukung meliputi menjalankan compiler dan linker 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 lainnya seperti Make, Ant, Gradle, Buck, Pants, dan Maven.

Apa yang spesial dari Bazel?

Bazel dirancang agar sesuai dengan cara software dikembangkan di Google. Layanan ini memiliki fitur berikut:

  • Dukungan multibahasa: Bazel mendukung banyak bahasa, dan dapat diperluas untuk mendukung bahasa pemrograman arbitrer.
  • Bahasa build tingkat tinggi: Project dijelaskan dalam bahasa BUILD, format teks ringkas yang mendeskripsikan project sebagai kumpulan library, biner, dan pengujian kecil yang saling terhubung. Sebaliknya, dengan alat seperti Make, Anda harus mendeskripsikan file individual dan pemanggilan compiler.
  • Dukungan multi-platform: Alat yang sama dan file BUILD yang sama dapat digunakan untuk membuat software untuk arsitektur yang berbeda, dan bahkan platform yang berbeda. Di Google, kami menggunakan Bazel untuk mem-build segala sesuatu mulai dari aplikasi server yang berjalan pada sistem di pusat data kami hingga aplikasi klien yang berjalan di ponsel.
  • Produktivitas: 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 apa yang dapat berjalan secara paralel. Artinya, 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 sekitar ~200 md.

Mengapa Google tidak menggunakan...?

  • Make, Ninja: Alat-alat ini memberikan kontrol yang sangat akurat terhadap perintah yang dipanggil untuk membuat file, tetapi pengguna dapat menulis aturan yang benar.
    • Pengguna berinteraksi dengan Bazel di level yang lebih tinggi. Misalnya, Bazel memiliki aturan bawaan untuk “uji Java”, “biner C++”, dan gagasan seperti “platform target” dan “platform host”. Aturan ini telah diuji coba menjadi sangat mudah.
  • Ant dan Maven: Ant dan Maven ditujukan terutama untuk Java, sedangkan Bazel menangani beberapa bahasa. Bazel mendorong pembagian codebase dalam unit yang lebih kecil dan dapat digunakan kembali, serta hanya dapat membuat ulang yang perlu dibangun ulang. Hal ini mempercepat pengembangan saat Anda bekerja dengan codebase yang lebih besar.
  • Gradle: File konfigurasi Bazel jauh lebih terstruktur daripada Gradle, memungkinkan Bazel memahami dengan tepat apa yang dilakukan setiap tindakan. Hal ini memungkinkan paralelisme dan kemampuan reproduksi yang lebih baik.
  • Pants, Buck: Kedua alat tersebut dibuat dan dikembangkan oleh mantan Googler di Twitter dan Foursquare, serta Facebook. Keduanya telah dimodelkan setelah Bazel, tetapi set fiturnya berbeda, sehingga bukan alternatif yang baik bagi kami.

Dari mana asal Bazel?

Bazel adalah ragam alat yang digunakan Google untuk mem-build software servernya secara internal. Protokol ini telah diperluas untuk membuat software lainnya juga, seperti aplikasi seluler (iOS, Android) yang terhubung ke server kami.

Apakah Anda menulis ulang alat internal sebagai open source? Apakah ini garpu?

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

Mengapa Google membuat Bazel?

Sejak lama, Google membuat software-nya menggunakan Makefile besar yang dihasilkan. Hal ini menyebabkan build yang lambat dan tidak dapat diandalkan, yang mulai mengganggu produktivitas developer kami dan kelincahan perusahaan. Bazel adalah cara untuk mengatasi 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 penyimpanan dalam cache jarak jauh untuk detail selengkapnya.

Bagaimana cara kerja proses pengembangan Google?

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

  • Semua kode server kami berada dalam satu sistem kontrol versi yang sangat besar.
  • Semua orang membuat software-nya dengan Bazel.
  • Tim yang berbeda memiliki bagian yang berbeda dari hierarki sumber, dan menyediakan komponennya sebagai target BUILD.
  • Cabang terutama digunakan untuk mengelola rilis, sehingga semua orang mengembangkan software mereka saat 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 dikirimkan.

Informasi selengkapnya tentang proses pengembangan di Google dapat ditemukan di blog alat berbahasa Inggris.

Mengapa Anda membuka Bazel?

Membuat software harus menyenangkan dan mudah. Build yang lambat dan tidak dapat diprediksi akan membuat pemrograman menjadi menyenangkan.

Mengapa saya ingin menggunakan Bazel?

  • Bazel dapat memberi Anda waktu build yang lebih cepat karena hanya dapat mengompilasi ulang file yang perlu dikompilasi ulang. Demikian pula, pengujian ini dapat melewati pengujian yang berjalan kembali yang telah diketahui tidak berubah.
  • Bazel memberikan hasil yang deterministik. Dengan demikian, Anda tidak perlu membedakan build inkremental dan clean, laptop dan sistem CI, dll.
  • Bazel dapat membuat 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, serta menguji apakah aplikasi seluler yang diupdate berfungsi dengan server yang telah diupdate, dengan mem-build keduanya dengan alat yang sama, 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.

Seberapa baik Bazel?

Bazel berupaya membangun dan menguji project dengan properti berikut:

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

Di mana saya dapat menjalankan Bazel?

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

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

Apa sebaiknya saya tidak menggunakan Bazel?

  • Bazel berusaha cerdas untuk menyimpan ke cache. Ini berarti bahwa tidak bagus untuk menjalankan operasi build yang outputnya 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 QA situs Anda.
    • Langkah deployment yang mengubah konfigurasi cloud situs Anda.
  • Jika build Anda terdiri dari beberapa langkah panjang dan berurutan, Bazel mungkin tidak dapat banyak membantu. Anda akan mendapatkan kecepatan yang lebih tinggi dengan membagi langkah-langkah panjang menjadi target terpisah yang lebih kecil, yang dapat dijalankan Bazel secara paralel.

Seberapa stabil set fitur Bazel?

Fitur inti (aturan C++, Java, dan shell) telah digunakan secara ekstensif di dalam Google, sehingga telah diuji secara menyeluruh dan memiliki sedikit churn. Demikian pula, kami menguji Bazel versi baru 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 Berhasil. Perubahan pada aturan non-eksperimental akan kompatibel dengan versi lama. 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 kami.

Bagaimana cara mulai menggunakan Bazel?

Lihat Memulai.

Apakah Docker tidak dapat memecahkan masalah reproduksi?

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

Docker tidak dapat mereproduksi ulang sehubungan dengan perubahan kode sumber. Menjalankan Make dengan Makefile yang ditulis dengan tidak sempurna di dalam container Docker masih dapat memberikan hasil yang tidak dapat diprediksi.

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

Dapatkah saya membuat biner untuk deployment di Docker?

Dengan Bazel, Anda dapat mem-build biner mandiri yang ditautkan secara statis di C/C++, dan file jar mandiri untuk Java. Ini berjalan dengan sedikit dependensi pada sistem UNIX normal, dan oleh karena itu harus mudah diinstal di dalam container Docker.

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

Dapatkah saya membuat 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 memiliki langkah-langkah build yang melibatkan resep khusus (misalnya, mengeksekusi biner melalui skrip shell di dalam aturan), Anda harus lebih berhati-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 di file yang dihasilkan. File ZIP dan arsip lain sangat rentan terhadap hal ini.
  • Hindari menyambungkan ke jaringan. Eksekusi dengan sandbox dapat membantu di sini juga.
  • 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 berinteroperasi 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 saling bertukar dan menggunakan data 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 untuk kebenaran, sistem CI tidak boleh dikonfigurasi untuk membersihkan sebelum memulai build/pengujian.

Detail lebih lanjut tentang kode keluar ada di Panduan Pengguna.

Fitur apa yang akan datang di Bazel?

Lihat Jalan kami.

Dapatkah saya menggunakan Bazel untuk project INSERT IntelliJ HERE?

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

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

Dapatkah saya berkontribusi ke code base Bazel?

Lihat pedoman kontribusi kami.

Mengapa tidak semua pengembangan dilakukan secara terbuka?

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

Apakah Anda berhasil menjadikannya open source Bazel?

Bazel open source masih dalam proses. Secara khusus, kami masih mengupayakan open source:

  • Banyak dari pengujian unit dan integrasi kami (yang akan membuat kontribusi patch menjadi lebih mudah).
  • Integrasi IDE lengkap.

Selain kode, kami pada akhirnya ingin semua peninjauan kode, pelacakan bug, dan keputusan desain dilakukan secara publik, dengan melibatkan komunitas Bazel. Belum ada perubahan, jadi beberapa perubahan hanya akan muncul di repositori Bazel tanpa penjelasan yang jelas. Meskipun kurangnya transparansi ini, kami ingin mendukung developer eksternal dan berkolaborasi. Karena itu, kami membuka kode ini, meskipun beberapa pengembangan masih terjadi secara internal untuk Google. Harap beri tahu kami jika ada yang terlihat tidak jelas atau tidak dapat dibenarkan saat kami beralih ke model terbuka.

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

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

Bagaimana cara menghubungi tim ini?

Kami dapat dihubungi 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. Silakan merujuk ke Blaze sebagai Bazel.

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

Hingga rilis pertama (Alfa), Bazel tidak tersedia secara eksternal, sehingga project open source seperti Chromium dan Android tidak dapat menggunakannya. Selain itu, kurangnya dukungan asli di Windows adalah masalah untuk mem-build aplikasi Windows, seperti Chrome. Karena project tersebut telah 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”. Ini berima dengan “hazel”. IPA: /koreksi lènko