Sorunuz veya desteğe ihtiyacınız olursa Yardım Alma başlıklı makaleyi inceleyin.
Bazel nedir?
Bazel, yazılım derlemelerini ve testleri otomatikleştiren bir araçtır. Desteklenen derleme görevleri arasında yürütülebilir programlar ve kitaplıklar üretmek için derleyiciler ve bağlayıcılar çalıştırmanın yanı sıra Android, iOS ve diğer hedef ortamlar için dağıtılabilir paketler oluşturma yer alır. Bazel; Make, Ant, Gradle, Buck, Pantolon ve Maven gibi diğer araçlara benzer.
Bazel'ın özel özelliği nedir?
Bazel, yazılımın Google'da geliştirilme şekline uygun şekilde tasarlanmıştır. Aşağıdaki özelliklere sahiptir:
- Çok dilli destek: Bazel birçok dili destekler ve rastgele programlama dillerini desteklemek için genişletilebilir.
- Üst düzey derleme dili: Projeler;
BUILDarabiriminde kitaplık, ikili program ve test grupları olarak tanımlanan kısa ve öz bir metin biçiminde tanımlanır. Öte yandan, Make gibi araçlarda, dosyaları ve derleyici çağrılarını tek tek açıklamanız gerekir.
- Çoklu platform desteği: Farklı mimariler, hatta farklı platformlar için yazılım oluşturmak amacıyla aynı araç ve aynı
BUILDdosyaları kullanılabilir. Google'da biz, veri merkezlerimizdeki sistemlerde çalışan sunucu uygulamalarından cep telefonlarında çalışan istemci uygulamalarına kadar her şeyi derlemek için Bazel'ı kullanıyoruz.
- Yeniden oluşturulabilirlik:
BUILDdosyalarında her kitaplık, test ve ikili program doğrudan bağımlılıklarını tamamen belirtmelidir. Bazel, kaynak dosyada değişiklik yaptığınızda nelerin yeniden oluşturulacağını ve hangi görevlerin paralel olarak çalıştırılabileceğini öğrenmek için bu bağımlılık bilgilerini kullanır. Bu da tüm derlemelerin artımlı olduğu ve her zaman aynı sonucu vereceği anlamına gelir.
- Ölçeklenebilir: Bazel büyük derlemeleri işleyebilir. Google'da bir sunucu ikili programının 100 bin kaynak dosyasına sahip olması yaygın bir durumdur ve hiçbir dosyanın değiştirilmediği derlemeler yaklaşık 200 ms sürer.
Google neden kullanmıyor?
- Make Ninja
- Kullanıcılar Bazel ile daha üst düzeyde etkileşimde bulunurlar. Örneğin, Bazel "Java testi", "C++ ikili" ve "hedef platform" ve "ana makine platformu" gibi kavramlar için yerleşik kurallar içerir. Bu kurallar, dayanıklılık açısından test edilmiştir.
- Karınca ve Maven: Ağırlıklı olarak Java'ya yöneliktirler ve Bazel birden fazla dili işler. Bazel, kod depolarını yeniden kullanılabilir küçük birimler halinde alt gruplara ayırmaya teşvik ediyor ve yalnızca yeniden geliştirme gerekenleri yeniden derleyebiliyor. Bu özellik, daha büyük kod tabanlarıyla çalışırken geliştirme sürecini hızlandırır.
- Gradle: Bazel yapılandırma dosyaları, Gradle'dan çok daha yapılandırılmıştır. Bu da Bazel'ın her işlemin tam olarak ne yaptığını anlamasını sağlar. Böylece daha fazla paralellik ve yeniden oluşturulabilirlik elde edilebilir.
- Pants, Buck: Her iki araç da sırasıyla Google ve Twitter'daki eski Google çalışanları ve Facebook tarafından geliştirildi ve geliştirildi. Bu modeller Bazel'dan sonra modellenmiştir, ancak özellik grupları farklı olduğundan bunlar bizim için uygun alternatifler değildir.
Bazel nereden geldi?
Bazel, Google'ın sunucu yazılımını dahili olarak oluşturmak için kullandığı bir araçtır. Ayrıca, sunucularımıza bağlanan mobil uygulamalar (iOS, Android) gibi başka yazılımlar da geliştirmek için kullanılmaya başlandı.
Dahili aracınızı açık kaynak olarak yeniden mi yazdınız? Bu bir çatal mı?
Bazel, kodunun çoğunu dahili araçla paylaşır ve kuralları her gün milyonlarca derleme için kullanılır.
Google neden Bazel'ı geliştirdi?
Google uzun zaman önce, oluşturduğu büyük MakeMakes yazılımını kullanarak yazılımını geliştirdi. Bunlar, geliştiricilerin üretkenliğini ve şirketin çevikliğini engellemeye başlayan yavaş ve güvenilir olmayan derlemelere yol açtı. Bazel bu sorunları çözmenin bir yoluydu.
Bazel için derleme kümesi gerekir mi?
Bazel, derleme işlemlerini varsayılan olarak yerel olarak çalıştırır. Bununla birlikte, Bazel daha hızlı derlemeler ve testler için derleme kümesine de bağlanabilir. Daha fazla ayrıntı için uzaktan yürütme ve önbelleğe alma ve uzaktan önbelleğe alma dokümanlarını inceleyin.
Google geliştirme süreci nasıl işler?
Sunucu kodu tabanımız için aşağıdaki geliştirme iş akışını kullanırız:
- Tüm sunucu kodumuz tek ve devasa bir sürüm kontrol sisteminde sunulur.
- Herkes Bazel ile yazılımını geliştirir.
- Farklı ekipler kaynak ağacının farklı bölümlerine sahiptir ve bileşenlerini
BUILDhedefleri olarak kullanılabilir hale getirir.
- Dallara ayırma esasen sürümleri yönetmek için kullanıldığından, herkes yazılımını revizyon sırasında geliştirir.
Bazel bu felsefenin temel taşlarından biridir: Bazel tüm bağımlılıkların tam olarak belirtilmesini gerektirdiğinden, bir değişiklikten hangi programların ve testlerin etkilendiğini tahmin edebilir ve göndermeden önce bunları inceleyebiliriz.
Google'daki geliştirme süreciyle ilgili daha fazla temel bilgiyi eng araçları blogunda bulabilirsiniz.
Bazel'ı neden açtınız?
Bina yazılımı eğlenceli ve kolay olmalıdır. Yavaş ve öngörülemez derlemeler, programlamanın eğlenceli yanını ortadan kaldırır.
Neden Bazel kullanmalıyım?
- Yalnızca yeniden derlenmesi gereken dosyaları yeniden derleyebileceğinden Bazel size daha hızlı derleme süreleri sağlayabilir. Benzer şekilde, değişmediğini bildiği yeniden çalıştırma testlerini atlayabilir.
- Bazel belirleyici sonuçlar üretir. Bu, artımlı ve temiz derlemeler, dizüstü bilgisayar ve CI sistemi vb. arasındaki sapmayı ortadan kaldırır.
- Bazel, aynı çalışma alanından aynı aracı kullanarak farklı istemci ve sunucu uygulamaları oluşturabilir. Örneğin, istemci/sunucu protokolünü tek bir işlemde değiştirebilir ve güncellenen mobil uygulamanın, güncellenen sunucuyla çalışıp çalışmadığını, her ikisini de aynı araçla test ederek Bazel'ın yukarıda bahsedilen tüm avantajlarından yararlanabilirsiniz.
Örnek görebilir miyim?
Bazel'ın en iyisi hangisi?
Bazel, aşağıdaki özelliklere sahip projeleri geliştirip test ediyor.
- Geniş bir kod tabanına sahip projeler
- Derlenen dillerde (birden çok dilde) yazılan projeler
- Birden fazla platformda dağıtım yapan projeler
- Geniş kapsamlı testler içeren projeler
Bazel'ı nerede çalıştırabilirim?
Bazel; Linux, macOS (OS X) ve Windows'da çalışır.
JDK'nin platformda yer alabilmesi koşuluyla, diğer UNIX platformlarına geçiş nispeten kolay olmalıdır.
Bazel'ı ne için kullanmalıyım?
- Bazel, önbelleğe alma konusunda akıllı davranmaya çalışıyor. Bu, çıkışlarının önbelleğe alınmaması gereken derleme işlemlerini çalıştırmak için uygun olmadığı anlamına gelir. Örneğin, aşağıdaki adımlar Bazel'dan çalıştırılmamalıdır:
- İnternetten veri getiren bir derleme adımıdır.
- Sitenizin QA örneğine bağlanan bir test adımıdır.
- Sitenizin bulut yapılandırmasını değiştiren bir dağıtım adımı.
- Derlemeniz birkaç uzun art arda adımdan oluşuyorsa Bazel size çok yardımcı olmayabilir. Bazel'ın paralel olarak çalıştırabileceği daha küçük, ayrı ayrı hedeflere bölünerek daha fazla hız kazanın.
Bazel'ın özellik grubu ne kadar kararlı?
Temel özellikler (C++, Java ve kabuk kuralları) Google'da çok fazla kullanıldığından, bunlar ayrıntılı bir şekilde test edilir ve çok az kayıp olur. Benzer şekilde, regresyonları bulmak için her gün yüz binlerce hedefle Bazel'ın yeni sürümlerini test ediyoruz ve her ay yeni sürümlerini birden fazla kez yayınlıyoruz.
Kısacası, Bazel "İşe Gel" olarak tanımlanan özellikler hariç, deneysel olmalıdır. Deneysel olmayan kurallarda yapılan değişiklikler geriye dönük uyumluluğa sahip olacaktır. Özellik desteği durumlarının daha ayrıntılı listesini destek belgemizde bulabilirsiniz.
İkili olarak Bazel ne kadar stabil?
Google'da, Bazel kilitlenmelerinin çok nadir yaşanmasını sağlıyoruz. Bu özellik, açık kaynak kod tabanımız için de geçerli olmalıdır.
Bazel'ı kullanmaya nasıl başlayabilirim?
Başlarken başlıklı makaleyi inceleyin.
Docker, yeniden oluşturulabilirlik sorunlarını çözmez mi?
Docker ile sabit işletim sistemi sürümleriyle (ör. Ubuntu 12.04, Fedora 21) korumalı alan oluşturabilirsiniz. Bu, sistem ortamı için yeniden oluşturulabilirlik sorununu (yani "/usr/bin/c++ hangi sürümüne ihtiyacım var?" sorununu çözer.)
Docker, kaynak kodundaki değişikliklerle ilgili olarak yeniden oluşturulabilirlik sorununu ele almaz. Bir Docker container'ında kusursuz şekilde yazılmış bir Makefile ile Make çalıştırıldığında yine de öngörülemeyen sonuçlar ortaya çıkabilir.
Google'da, yeniden oluşturulabilirlik için kaynak kontrolünü kontrol ederiz. Bu şekilde, araçlarda yapılan değişiklikleri ("GCC'yi 4.6.1"e yükseltip) temel kitaplıklardaki değişikliklerle aynı mekanizmayla ("OpenSSL'te düzeltme sınırları kontrolü") inceleyebiliriz.
Docker'da dağıtım için ikili program oluşturabilir miyim?
Bazel ile C/C++ ürününde bağımsız, statik olarak bağlanmış ikili programlar ve Java için kendi bağımsız jar dosyaları oluşturabilirsiniz. Bunlar, normal UNIX sistemlerine çok az bağımlı olarak çalışır ve bu nedenle bir Docker container'ına basit bir şekilde yüklenebilir.
Bazel, daha karmaşık programların yapılandırılmasına ilişkin kurallara sahiptir (ör. bir veri dosyası grubu tüketen veya başka bir programı alt işlem olarak çalıştıran Java programı). Bu tür ortamları, arşiv görüntüleri de dahil olmak üzere farklı sistemlere dağıtabilmek için bağımsız arşivler olarak paketlemek mümkündür.
Bazel ile Docker görüntüleri oluşturabilir miyim?
Evet, yeniden oluşturulabilir Docker görüntüleri derlemek için Docker kurallarımızı kullanabilirsiniz.
Bazel, kullandığım yapıları otomatik olarak yeniden oluşturulabilir mi?
Java ve C++ ikili programları için evet, araç zincirini değiştirmediğiniz varsayılır. Özel tarifler içeren derleme adımlarınız varsa (örneğin, bir kuralın içindeki kabuk komut dosyası aracılığıyla ikili programları yürütme) biraz daha dikkatli olmanız gerekir:
- Bildirilmemiş bağımlılıkları kullanmayın. Korumalı alana alınan yürütme (–spawn_strategy=sandbox, yalnızca Linux'ta) tanımlanmamış bağımlılıkların bulunmasına yardımcı olabilir.
- Zaman damgalarını ve User-ID'leri oluşturulan dosyalarda depolamaktan kaçının. ZIP dosyaları ve diğer arşivler de buna özellikle açıktır.
- Ağa bağlanmaktan kaçının. Korumalı alana alınan yürütme burada da işe yarayabilir.
- Sözlük geçişi, özellikle birçok programlama dilinde rastgele hale getirilmiş rastgele sayılar kullanan işlemlerden kaçının.
İkili sürümleriniz var mı?
Eclipse/IntelliJ/XCode kullanıyorum. Bazel, IDE'ler ile nasıl birlikte çalışır?
IntelliJ için IntelliJ with Bazel eklentisine göz atın.
XCode için Tulsi'ye göz atın.
Eclipse için E4B eklentisine göz atın.
Diğer IDE'ler için bu eklentilerin işleyiş şekliyle ilgili blog yayınını inceleyin.
Jenkins/CircleCI/TravisCI kullanıyorum. Bazel, CI sistemleriyle nasıl birlikte çalışıyor?
Bazel, derleme veya test çağrısı başarısız olursa sıfır olmayan bir çıkış kodu döndürür ve bu, temel CI entegrasyonu için yeterli olacaktır. Bazel'ın doğru olması için temiz derlemelere ihtiyacı olmadığından, CI sistemi bir derleme/test çalıştırması başlatmadan önce temizlenecek şekilde yapılandırılmamalıdır.
Çıkış kodlarıyla ilgili daha fazla bilgiyi Kullanıcı Kılavuzu'nda bulabilirsiniz.
Bazel'da gelecekte neler olabilir?
Yol haritalarımıza bakın.
Bazel'ı INSERT LANGUAGE HERE projem için kullanabilir miyim?
Bazel genişletilebilir. Herkes yeni diller için destek ekleyebilir. Birçok dil desteklenir: Öneri listesi için ansiklopedi oluşturma ve daha kapsamlı liste için awesomebazel.com adresini ziyaret edin.
Uzantıları geliştirmek veya nasıl çalıştıklarını öğrenmek istiyorsanız Bazel'ı genişletme dokümanlarını inceleyin.
Bazel kod tabanına katkıda bulunabilir miyim?
Katkı yönergelerimizi inceleyin.
Neden geliştirme aşaması açık değil?
Bazel'daki herkese açık kod ile dahili uzantılarımız arasındaki arayüzleri sık sık yeniden düzenlememiz gerekiyor. Bu da açık alanda çok sayıda geliştirme yapmayı zorlaştırır.
Bazel'ı açık kaynak haline getirdiniz mi?
Bazel olarak devam eden açık kaynak çalışması devam ediyor. Özellikle, açık kaynak kullanımı üzerinde çalışmaya devam ediyoruz:
- Birim ve entegrasyon testlerimizin çoğu (yamalarla katkıda bulunmak daha kolay hale gelir).
- Tam IDE entegrasyonu.
Kodun ötesinde, tüm kod incelemeleri, hata izleme ve tasarım kararlarının Bazel topluluğuyla birlikte herkese açık olmasını istiyoruz. Henüz bu değişiklikler yapılmamıştır. Bu nedenle bazı değişiklikler, net bir açıklama yapmadan Bazel veri havuzunda görünür. Bu şeffaflık olmamasına rağmen, harici geliştiricileri desteklemek ve ortak çalışmalar yapmak istiyoruz. Bu nedenle, geliştirme sürecinin bir kısmı Google'da devam ediyor olsa da kodu açıyoruz. Açık modele geçiş yaparken net olmayan veya haksız bir şey görürseniz lütfen bize bildirin.
Bazel'ın açık kaynaklı olmayacak bölümleri var mı?
Evet, kod tabanının bir kısmı Google'a özgü teknolojiyle entegre olabilir veya kurtulmak için bir bahane arıyor (veya bu ikisinin bir kombinasyonu.) Kod tabanının bu bölümleri GitHub'da kullanılamamaktadır ve muhtemelen hiçbir zaman kullanılamayacaktır.
Ekiple nasıl iletişime geçebilirim?
Bize bazel-Tartışma@googlegroups.com adresinden ulaşabilirsiniz.
Yazılım hatalarını nereden bildirebilirim?
GitHub'da bir sorun açın.
Kod tabanındaki "Blaze" kelimesinin anlamı nedir?
Bu, aracın dahili bir adıdır. Lütfen Blaze olarak Bazel'a bakın.
Diğer Google projeleri (Android, Chrome) neden diğer derleme araçlarını kullanıyor?
Bazel, ilk (Alfa) sürüme kadar harici olarak kullanılamadığından Chromium ve Android gibi açık kaynak projeleri bu platformu kullanamadı. Ayrıca, Windows desteğinin olmaması, Chrome gibi Windows uygulamalarının oluşturulmasında bir sorundu. Proje olgunlaşıp daha kararlı hale geldiğinden, Android Açık Kaynak Projesi Bazel'a geçiş sürecindedir.
"Bazel" nasıl telaffuz edilir?
ABD İngilizcesinde "basil" (bitki) kelimesiyle aynıdır: "BAY-zel". "Hazel" ile kafiyelidir. IPA: /«