SSS

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Sorularınız veya destek ihtiyacınız varsa Yardım Alma başlıklı makaleyi inceleyin.

Bazel nedir?

Bazel, yazılım derleme ve testlerini otomatikleştiren bir araçtır. Desteklenen derleme görevleri arasında, yürütülebilir programlar ve kitaplıklar oluşturmak için derleyiciler ve bağlayıcılar çalıştırma ve Android, iOS ve diğer hedef ortamlar için dağıtılabilir paketler oluşturma yer alır. Bazel, Make, Ant, Gradle, Buck, Pants ve Maven gibi diğer araçlara benzer.

Bazel'i özel kılan nedir?

Bazel, Google'da yazılım geliştirme şekline uygun olacak şekilde tasarlanmıştır. Aşağıdaki özelliklere sahiptir:

  • Çok dilli destek: Bazel birçok dili destekler ve herhangi bir programlama dilini desteklemek için genişletilebilir.
  • Üst düzey derleme dili: Projeler, BUILD dilinde açıklanır. Bu dil, bir projeyi birbirine bağlı küçük kitaplıklar, ikili dosyalar ve testler olarak açıklayan kısa bir metin biçimidir. Buna karşılık, Make gibi araçlarda her dosyayı ve derleyici çağrısını ayrı ayrı tanımlamanız gerekir.
  • Çok platformlu destek: Aynı araç ve aynı BUILD dosyaları, farklı mimariler ve hatta farklı platformlar için yazılım oluşturmak amacıyla kullanılabilir. Google'da, veri merkezlerimizdeki sistemlerde çalışan sunucu uygulamalarından cep telefonlarında çalışan istemci uygulamalarına kadar her şeyi oluşturmak için Bazel'i kullanırız.
  • Yeniden üretilebilirlik: BUILD dosyalarında her kitaplık, test ve ikili program, doğrudan bağımlılığını eksiksiz şekilde belirtmelidir. Bazel, bir kaynak dosyada değişiklik yaptığınızda nelerin yeniden oluşturulması gerektiğini ve hangi görevlerin paralel olarak çalışabileceğini öğrenmek için bu bağımlılık bilgilerini kullanır. Bu, 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.000 kaynak dosyaya sahip olması yaygındır ve hiçbir dosyanın değiştirilmediği derlemeler yaklaşık 200 ms sürer.

Google neden...

  • Make, Ninja: Bu araçlar, dosyaları derlemek için hangi komutların çağrılacağı konusunda çok hassas kontrol sağlar ancak doğru kuralları yazmak kullanıcıya bağlıdır.
    • Kullanıcılar Bazel ile daha üst düzeyde etkileşim kurar. Örneğin, Bazel'de "Java testi", "C++ ikili dosyası" ve "hedef platform" ile "ana makine platformu" gibi kavramlar için yerleşik kurallar vardır. Bu kurallar, hatasız olmaları için zorlu testlerden geçirilmiştir.
  • Ant ve Maven: Ant ve Maven temel olarak Java'ya yöneliktir. Bazel ise birden fazla dili destekler. Bazel, kod tabanlarının daha küçük ve yeniden kullanılabilir birimlere bölünmesini teşvik eder ve yalnızca yeniden derlenmesi gerekenleri yeniden derleyebilir. Bu, daha büyük kod tabanlarıyla çalışırken geliştirme sürecini hızlandırır.
  • Gradle: Bazel yapılandırma dosyaları, Gradle'den çok daha yapılandırılmış olduğundan Bazel her işlemin ne yaptığını tam olarak anlayabilir. Bu sayede daha fazla paralellik ve daha iyi yeniden üretilebilirlik elde edilir.
  • Pants, Buck: Her iki araç da sırasıyla Twitter ve Foursquare ile Facebook'taki eski Google çalışanları tarafından oluşturulup geliştirildi. Bunlar Bazel'i temel alan modellerdir ancak özellik kümeleri farklı olduğundan bizim için uygun alternatifler değildir.

Bazel nereden geldi?

Bazel, Google'ın sunucu yazılımını şirket içinde oluşturmak için kullandığı aracın bir çeşididir. Sunucularımıza bağlanan mobil uygulamalar (iOS, Android) gibi diğer yazılımları da geliştirmeye başladık.

Şirket içi aracınızı açık kaynak olarak yeniden yazdınız mı? Ç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'i geliştirdi?

Google, uzun zaman önce yazılımlarını büyük, oluşturulmuş Makefile'ler kullanarak oluşturuyordu. Bu durum, yavaş ve güvenilir olmayan derlemelere yol açtı. Bu da geliştiricilerimizin üretkenliğini ve şirketin çevikliğini etkilemeye başladı. 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. Ancak Bazel, daha da hızlı derlemeler ve testler için bir derleme kümesine de bağlanabilir. Daha fazla bilgi için uzaktan yürütme ve önbelleğe alma ve uzak önbelleğe alma ile ilgili dokümanlarımızı inceleyin.

Google'ın geliştirme süreci nasıl işler?

Sunucu kod tabanımız için aşağıdaki geliştirme iş akışını kullanırız:

  • Tüm sunucu kodumuz tek bir devasa sürüm kontrol sistemindedir.
  • Herkes yazılımını Bazel ile derliyor.
  • Kaynak ağacının farklı bölümleri farklı ekiplere aittir ve bu ekipler bileşenlerini BUILD hedefleri olarak kullanıma sunar.
  • Dallandırma, öncelikle sürümleri yönetmek için kullanılır. Bu nedenle, herkes yazılımını ana düzeltme sürümünde geliştirir.

Bazel bu felsefenin temel taşıdır: Bazel, tüm bağımlılıkların tam olarak belirtilmesini gerektirdiğinden, bir değişiklikten hangi programların ve testlerin etkileneceğini tahmin edebilir ve göndermeden önce bunları inceleyebiliriz.

Google'daki geliştirme süreciyle ilgili daha fazla bilgiyi eng tools blogunda bulabilirsiniz.

Bazel'i neden açtınız?

Yazılım oluşturmak eğlenceli ve kolay olmalıdır. Yavaş ve tahmin edilemez derlemeler, programlamanın keyfini kaçırır.

Bazel'i neden kullanmalıyım?

  • Bazel, yalnızca yeniden derlenmesi gereken dosyaları yeniden derleyebildiğinden daha hızlı derleme süreleri sağlayabilir. Benzer şekilde, değişmediğini bildiği testlerin yeniden çalıştırılmasını atlayabilir.
  • Bazel, belirlenebilir sonuçlar verir. Bu sayede artımlı ve temiz derlemeler, dizüstü bilgisayar ve CI sistemi vb. arasındaki sapmalar ortadan kalkar.
  • Bazel, aynı çalışma alanından aynı araçla farklı istemci ve sunucu uygulamaları oluşturabilir. Örneğin, tek bir taahhütte bir istemci/sunucu protokolünü değiştirebilir ve güncellenen mobil uygulamanın güncellenen sunucuyla çalıştığını test edebilirsiniz. Bu işlem için her ikisini de aynı araçla derleyebilir ve Bazel'in yukarıda belirtilen tüm avantajlarından yararlanabilirsiniz.

Örnek görebilir miyim?

Evet. Daha karmaşık bir örnek için basit bir örneğe bakın veya Bazel kaynak kodunu okuyun.

Bazel'in en iyi olduğu alanlar nelerdir?

Bazel, aşağıdaki özelliklere sahip projeleri oluşturma ve test etme konusunda mükemmeldir:

  • Büyük kod tabanı olan projeler
  • Derlenmiş (birden fazla) dilde yazılmış projeler
  • Birden fazla platformda dağıtılan projeler
  • Kapsamlı testlere sahip projeler

Bazel'i nerede çalıştırabilirim?

Bazel; Linux, macOS (OS X) ve Windows'ta çalışır.

Platform için bir JDK mevcut olduğu sürece diğer UNIX platformlarına taşıma işlemi nispeten kolaydır.

Bazel'i ne için kullanmamalıyım?

  • Bazel, önbelleğe alma konusunda akıllı olmaya çalışır. 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'den çalıştırılmamalıdır:
    • İnternetten veri alan bir derleme adımı.
    • Sitenizin QA örneğine bağlanan bir test adımı.
    • Sitenizin bulut yapılandırmasını değiştiren bir dağıtım adımı.
  • Derlemeniz birkaç uzun ve sıralı adımdan oluşuyorsa Bazel çok fazla yardımcı olmayabilir. Uzun adımları, Bazel'in paralel olarak çalıştırabileceği daha küçük ve ayrı hedeflere ayırarak daha hızlı çalışırsınız.

Bazel'in özellik grubu ne kadar kararlı?

Temel özellikler (C++, Java ve kabuk kuralları) Google'da yaygın olarak kullanıldığı için ayrıntılı bir şekilde test edilir ve çok az değişiklik geçirir. Benzer şekilde, gerileme bulmak için Bazel'in yeni sürümlerini her gün yüz binlerce hedefte test eder ve her ay birden fazla kez yeni sürümler yayınlarız.

Özetlemek gerekirse, deneysel olarak işaretlenmiş özellikler dışında Bazel sorunsuz çalışır. Deneysel olmayan kurallarda yapılan değişiklikler geriye dönük olarak uyumlu olacaktır. Özellik destek durumlarının daha ayrıntılı bir listesini destek dokümanımızda bulabilirsiniz.

Bazel ikili olarak ne kadar kararlı?

Google'da Bazel kilitlenmelerinin çok nadir olmasını sağlıyoruz. Bu, açık kaynak kod tabanımız için de geçerlidir.

Bazel'i kullanmaya nasıl başlayabilirim?

Başlarken bölümüne bakın.

Docker, yeniden oluşturma sorunlarını çözmüyor mu?

Docker ile, sabit işletim sistemi sürümlerine (ör. Ubuntu 12.04, Fedora 21) sahip korumalı alanlar kolayca oluşturabilirsiniz. Bu, sistem ortamı için yeniden üretilebilirlik sorununu (yani "/usr/bin/c++'nin hangi sürümüne ihtiyacım var?") çözer.

Docker, kaynak koddaki değişikliklerle ilgili olarak yeniden üretilebilirliği ele almaz. Make'i, Docker kapsayıcısının içinde kusurlu bir Makefile ile çalıştırmak yine de tahmin edilemeyen sonuçlar verebilir.

Google'da, yeniden üretilebilirlik için araçları kaynak denetimine göndeririz. Bu sayede, araçlarda yapılan değişiklikleri ("GCC'yi 4.6.1 sürümüne yükseltme") temel kitaplıklarda yapılan değişikliklerle aynı mekanizmayla inceleyebiliriz ("OpenSSL'de sınır kontrolünü düzeltme").

Docker'da dağıtım için ikili dosyalar oluşturabilir miyim?

Bazel ile C/C++'ta bağımsız, statik olarak bağlı ikili dosyalar ve Java için kendi kendine yeten jar dosyaları oluşturabilirsiniz. Bunlar normal UNIX sistemlerinde az sayıda bağımlılıkla çalışır ve bu nedenle Docker kapsayıcısına yüklenmeleri kolaydır.

Bazel, daha karmaşık programları (ör. bir veri dosyası grubunu kullanan veya başka bir programı alt işlem olarak çalıştıran bir Java programı) yapılandırmayla ilgili kurallara sahiptir. Bu tür ortamları Docker görüntüleri de dahil olmak üzere farklı sistemlerde dağıtılabilmesi 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 üretilebilir Docker görüntüleri oluşturmak için Docker kurallarımızı kullanabilirsiniz.

Bazel, derlememin otomatik olarak yeniden üretilmesini sağlar mı?

Java ve C++ ikili dosyaları için, araç zincirini değiştirmediğiniz takdirde evet. Özel tarifler içeren derleme adımlarınız varsa (ör. bir kuralın içindeki kabuk komut dosyası aracılığıyla ikili dosyaları yürütme) daha fazla dikkat etmeniz gerekir:

  • Beyan edilmemiş bağımlılıkları kullanmayın. Korumalı alan yürütme (–spawn_strategy=sandboxed, yalnızca Linux'ta) bildirilmemiş bağımlılıkları bulmaya yardımcı olabilir.
  • Oluşturulan dosyalarda zaman damgaları ve kullanıcı kimlikleri depolamamaya çalışın. ZIP dosyaları ve diğer arşivler özellikle bu duruma eğilimlidir.
  • Ağa bağlanmaktan kaçının. Korumalı alanda yürütme de burada yardımcı olabilir.
  • Rastgele sayılar kullanan işlemlerden kaçının. Özellikle birçok programlama dilinde sözlükte gezinme işlemi rastgele yapılır.

İkili sürümleriniz var mı?

Evet, en son sürüm ikililerini bulabilir ve sürüm politikamızı inceleyebilirsiniz.

Eclipse/IntelliJ/XCode kullanıyorum. Bazel, IDE'lerle nasıl birlikte çalışır?

IntelliJ için Bazel eklentisi ile IntelliJ'e 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ına göz atın.

Jenkins/CircleCI/TravisCI kullanıyorum. Bazel, CI sistemleriyle nasıl birlikte çalışır?

Derleme veya test çağrısı başarısız olursa Bazel sıfır olmayan bir çıkış kodu döndürür. Bu, temel CI entegrasyonu için yeterlidir. Bazel'in doğruluk için temiz derlemelere ihtiyacı olmadığından, CI sistemi bir derleme/test çalıştırması başlatmadan önce temizleme yapacak şekilde yapılandırılmamalıdır.

Çıkış kodlarıyla ilgili daha fazla bilgiyi Kullanıcı Kılavuzu'nda bulabilirsiniz.

Bazel'de gelecekte hangi özellikleri göreceğiz?

Yol haritalarımızı inceleyin.

INSERT LANGUAGE HERE projem için Bazel'i kullanabilir miyim?

Bazel genişletilebilir. Herkes yeni diller için destek ekleyebilir. Birçok dil desteklenir: Öneriler listesi için build encyclopedia'ya, daha kapsamlı bir liste için awesomebazel.com'a bakın.

Uzantı geliştirmek veya bunların nasıl çalıştığını öğrenmek istiyorsanız Bazel'i genişletme ile ilgili dokümanları inceleyin.

Bazel kod tabanına katkıda bulunabilir miyim?

Katkı yönergelerimize bakın.

Neden tüm geliştirmeler herkese açık olarak yapılmıyor?

Bazel'deki herkese açık kod ile dahili uzantılarımız arasındaki arayüzleri sık sık yeniden yapılandırmamız gerekiyor. Bu da açık alanda çok fazla geliştirme yapmayı zorlaştırır.

Bazel'i açık kaynak haline getirmeyi tamamladınız mı?

Bazel'i açık kaynak haline getirme çalışmaları devam etmektedir. Özellikle açık kaynak üzerinde çalışmaya devam ediyoruz:

  • Birim ve entegrasyon testlerimizin çoğu (yama katkıda bulunmayı kolaylaştırır).
  • Tam IDE entegrasyonu.

Kodun yanı sıra tüm kod incelemelerinin, hata izlemenin ve tasarım kararlarının Bazel topluluğunun katılımıyla herkese açık olarak yapılmasını istiyoruz. Henüz bu aşamaya ulaşmadık. Bu nedenle, bazı değişiklikler Bazel deposunda net bir açıklama olmadan görünecek. Bu şeffaflık eksikliğine rağmen, harici geliştiricileri desteklemek ve onlarla ortak çalışmalar yapmak istiyoruz. Bu nedenle, geliştirmenin bir kısmı hâlâ Google'da devam etse de kodu açık kaynak olarak kullanıma sunuyoruz. Açık bir modele geçiş yaparken net olmayan veya haksız olduğunu düşündüğünüz bir durum varsa lütfen bize bildirin.

Bazel'in hiçbir zaman açık kaynak olmayacak bölümleri var mı?

Evet, kod tabanının bir kısmı Google'a özgü teknolojiyle entegre edilmiş veya bu koddan kurtulmak için bir bahane aradığımız kodlardan (veya her ikisinin bir kombinasyonundan) oluşuyor. Kod tabanının bu bölümleri GitHub'da mevcut değildir ve muhtemelen hiçbir zaman mevcut olmayacaktır.

Ekibi nasıl arayabilirim?

Bize bazel-discuss@googlegroups.com adresinden ulaşabilirsiniz.

Yazılım hatalarını nereden bildirebilirim?

GitHub'da bir sorun kaydı açın.

Kod tabanındaki "Blaze" kelimesiyle ilgili sorun nedir?

Bu, aracın dahili adıdır. Lütfen Blaze'ı Bazel olarak adlandırın.

Diğer Google projeleri (Android, Chrome) neden farklı derleme araçları kullanıyor?

İlk (Alfa) sürüme kadar Bazel harici olarak kullanılamadığından Chromium ve Android gibi açık kaynak projeler tarafından kullanılamıyordu. Ayrıca, başlangıçta Windows desteğinin olmaması Chrome gibi Windows uygulamalarının geliştirilmesi için bir sorundu. Proje olgunlaşarak daha kararlı hale geldiğinden Android Açık Kaynak Projesi Bazel'e geçiş sürecindedir.

"Bazel" nasıl telaffuz edilir?

ABD İngilizcesinde "fesleğen" (bitki) ile aynı şekilde: "BAY-zel". "Hazel" ile kafiyelidir. IPA: /ˈbeɪzˌəl/