SSS

Sorunuz veya desteğe ihtiyacınız varsa Yardım alma başlıklı makaleye göz atın.

Bazel nedir?

Bazel, yazılım derlemelerini ve testlerini otomatikleştiren bir araçtır. Desteklenen derleme görevleri arasında yürütülebilir program ve kitaplıklar oluşturmak 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 birleştirilir. Bazel; Make, Ant, Gradle, Buck, Pantolon ve Maven gibi diğer araçlara benzer.

Bazel'ın özel özelliği nedir?

Bazel, Google'da yazılım geliştirme biçimine uyacak şekilde tasarlandı. Aşağıdaki özelliklere sahiptir:

  • Çok dilli destek: Bazel, birçok dili desteklemektedir ve isteğe bağlı programlama dillerini destekleyecek şekilde uzatılabilir.
  • Üst düzey yapı dili: Projeler, BUILD dilinde açıklanır. Bir proje, birbirine bağlı küçük kitaplıklar, ikili programlar ve testler olarak tanımlanan kısa ve öz bir metin biçimidir. Buna karşılık, Yapma gibi araçlarla, 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 geliştirmek amacıyla aynı araç ve aynı BUILD dosyası kullanılabilir. Google'da biz, veri merkezlerimizdeki sistemlerde çalışan sunucu uygulamalarından cep telefonlarında çalışan istemci uygulamalarına kadar her şeyi oluşturmak için Bazel'ı kullanıyoruz.
  • Yeniden oluşturulabilirlik: BUILD dosyalarında her kitaplık, test ve ikili program, doğrudan bağımlılıklarını tamamen belirtmelidir. Bazel, kaynak dosyasında değişiklik yaptığınızda nelerin yeniden oluşturulması gerektiğini ve hangi görevlerin paralel olarak çalıştırılabileceğini öğrenmek için bu bağımlılık bilgilerini kullanır. Yani tüm derlemeler artımlı olur ve her zaman aynı sonucu verir.
  • Ölçeklenebilir: Bazel büyük yapıları işleyebilir; Google'da bir sunucu ikili dosyasının 100.000 kaynak dosyası 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: Bu araçlar, dosya oluşturmak için hangi komutların çalıştırılacağı konusunda tam 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şimde bulunur. Örneğin, Bazel "Java testi", "C++ ikili" ve "hedef platform" ve "barındırma platformu" gibi ifadeler için yerleşik kurallar içerir. Bu kuralların şaşkınlığa karşı korumalı olduğu test edilmiştir.
  • Ant ve Maven: Ant ve Maven birincil olarak Java'ya yönelikken, Bazel birden çok dili ele alıyor. Bazel, kod tabanlarını daha küçük yeniden kullanılabilir birimler halinde alt bölümlere ayırmaya teşvik eder ve yalnızca yeniden kurulması gerekenleri yeniden oluşturabilir. 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'ınkinden çok daha yapılandırılmıştır. Bu da Bazel'ın her bir işlemin tam olarak ne yaptığını anlamasına olanak tanır. Bu, daha fazla paralellik ve daha iyi tekrarlanabilirlik sağlar.
  • Pants, Buck: Twitter ve Foursquare ile Facebook ve Facebook'un eski Google çalışanları tarafından her iki araç da oluşturuldu ve geliştirildi. Modelleri Bazel'den sonra modellendi, ancak özellik grupları farklı olduğu için bizim için yararlı bir alternatif değiller.

Bazel nereden geldi?

Bazel, Google'ın sunucu yazılımını dahili olarak oluşturmak için kullandığı bir araçtır. Sunucularımıza bağlanan mobil uygulamalar (iOS, Android) gibi başka yazılımlar da geliştirildi.

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şıyor ve kuralları her gün milyonlarca derleme için kullanılıyor.

Google neden Bazel'ı geliştirdi?

Google uzun zaman önce yazılımını büyük, üretilmiş Makefile dosyaları kullanarak oluşturmuştur. Bunlar, geliştiricilerin üretkenliğini ve şirketin çevikliğini etkilemeye başlayan yavaş ve güvenilir olmayan derlemelere yol açtı. Bazel bu sorunları çözmenin bir yoluydu.

Bazel derleme kümesi gerektirir mi?

Bazel varsayılan olarak derleme işlemlerini yerel olarak çalıştırır. Ancak Bazel, daha hızlı derlemeler ve testler için bir derleme kümesine de bağlanabilir. Daha ayrıntılı bilgi için uzaktan yürütme ve önbelleğe alma ve uzaktan önbelleğe alma konulu dokümanlarımıza bakın.

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 bir devasa sürüm kontrol sistemindedir.
  • Herkes yazılımlarını Bazel ile oluşturur.
  • Farklı ekiplerin kaynak ağacının farklı bölümleri vardır ve bileşenleri BUILD hedefleri olarak kullanıma sunar.
  • Dallara ayırma, esasen sürümleri yönetmek için kullanılmaktadır. Bu nedenle herkes, kendi yazılımını revizyonda geliştirir.

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

Google'daki geliştirme süreciyle ilgili daha fazla bilgiyi engin araçları blogunda bulabilirsiniz.

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

Bina yazılımı eğlenceli ve kolay olmalıdır. Yavaş ve öngörülemez derlemeler programlamayı eğlenceli hale getirir.

Neden Bazel'ı kullanmak isteyeyim?

  • 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 yeniden çalıştırılan testleri de atlayabilir.
  • Bazel kesin sonuçlar verir. Bu, artımlı ve temiz derlemeler, dizüstü ve CI sistemi vb. arasındaki sapmayı ortadan kaldırır.
  • 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üncellenmiş mobil uygulamanın güncellenmiş 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?

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

Bazel en iyisini söylüyor mu?

Bazel aşağıdaki mülklerde proje derleme ve testlere önem veriyor:

  • Geniş bir kod tabanına sahip projeler
  • Derlenen (birden çok) dilde yazılmış projeler
  • Birden fazla platformda dağıtılan projeler
  • Kapsamlı testler içeren projeler

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

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

Platformda bir JDK mevcut olduğu sürece diğer UNIX platformlarına taşıma işlemi nispeten kolay olmalıdır.

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

  • Bazel önbelleğe alma konusunda akıllı davranmaya çalışıyor. Bu, çıkışlarının önbelleğe alınmaması gereken derleme işlemlerinin çalıştırılması için uygun olmadığı anlamına gelir. Örneğin, aşağıdaki adımlar Bazel'den çalıştırılmamalıdır:
    • İnternetten veri getiren 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ı.
  • Yapınız birkaç uzun, sıralı adımlardan oluşuyorsa Bazel size yardımcı olmayabilir. Uzun adımları Bazel'ın paralel olarak çalıştırabileceği daha küçük, ayrı hedeflere ayırarak daha fazla hız elde edersiniz.

Bazel'ın özelliği ne kadar kararlı?

Temel özellikler (C++, Java ve kabuk kuralları) Google'ın içinde yaygın bir şekilde kullanıldığından, ayrıntılı olarak test edilirler ve çok az uygulamayı kullanmayı bırakırlar. Benzer şekilde, regresyonları bulmak için her gün yüz binlerce hedef genelinde Bazel'ın yeni sürümlerini test ediyoruz ve her ay birden çok kez yeni sürümler yayınlıyoruz.

Kısacası, Bazel How to Work özelliği, deneysel olarak işaretlenen özellikler hariçtir. Deneysel olmayan kurallarda yapılan değişiklikler geriye dönük olarak uyumlu olacaktır. Özellik desteği durumlarının daha ayrıntılı bir listesini destek belgemizde 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çerli olmalıdır.

Bazel'ı kullanmaya nasıl başlayabilirim?

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

Docker, yeniden oluşturulabilme sorunlarını çözmez mi?

Docker ile sabit işletim sistemi sürümleriyle kolayca korumalı alan oluşturabilirsiniz. Örneğin, Ubuntu 12.04, Fedora 21. Bu, sistem ortamı için yeniden oluşturulabilme sorununu çözer: Yani, "Hangi /usr/bin/c++ sürümüne ihtiyacım olur?"

Docker, kaynak kodundaki değişikliklerle ilgili olarak yeniden oluşturulabilirlik konusunu ele almaz. Kusursuz şekilde yazılmış bir Makefile ile Docker container'ında çalışan Makest'in çalıştırılması yine de öngörülemeyen sonuçlar doğurabilir.

Google'da, araçların yeniden oluşturulabilmesi için kaynak kontrolüne tabi olup olmadığını kontrol ederiz. Bu şekilde, araçlardaki değişiklikleri (GCC'yi 4.6.1 sürümüne geçirme), temel kitaplıklardaki değişiklikler ile (OpenSSL'de düzeltme sınırları kontrolü) birlikte 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 bağımsız bağımsız jar dosyaları oluşturabilirsiniz. Bunlar, normal UNIX sistemlerine çok az bağımlıdır ve Docker container'ına kolayca yüklenebilir.

Bazel, daha karmaşık programların yapılandırılmasına ilişkin kurallara sahiptir. Örneğin, bir veri kümesi tüketen veya başka bir programı alt işlem olarak çalıştıran bir Java programı. Bu tür ortamları bağımsız arşivler olarak paketlemek mümkündür. Böylece, Docker görüntüleri de dahil olmak üzere farklı sistemlere dağıtılabilirler.

Bazel ile Docker görüntüleri oluşturabilir miyim?

Evet, yeniden oluşturulabilir Docker görüntüleri oluşturmak için Docker kurallarımızı kullanabilirsiniz.

Bazel, derlemelerimi otomatik olarak yeniden oluşturulabilir mi?

Java ve C++ ikili programları için evet, araç zincirini değiştirmediğiniz varsayılır. Özel yemek tarifleri içeren derleme adımlarınız varsa (örneğin, bir kural 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ınmış yürütme işlemi (–spawn_strategy=sandboxed, yalnızca Linux'ta) bildirilmemiş bağımlılıkları bulmanıza yardımcı olabilir.
  • Zaman damgalarını ve User-ID'leri oluşturulan dosyalarda depolamaktan kaçının. ZIP dosyaları ve diğer arşivler özellikle buna açıktır.
  • Ağa bağlanmaktan kaçının. Korumalı alana alınmış yürütme işlemleri de burada yardımcı olabilir.
  • Rastgele sayı kullanan işlemlerden kaçının. Özellikle de sözlük geçişi birçok programlama dilinde rastgele hale getirilmiştir.

İkili sürümleriniz var mı?

Evet, sürüm ikili programlarını bulabilirsiniz ve yayın politikamızı inceleyebilirsiniz

Eclipse/IntelliJ/XCode kullanıyorum. Bazel, IDE'lerle nasıl ç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 eklentisi konusuna göz atın.

Diğer IDE'ler için bu eklentilerin nasıl çalıştığıyla 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 doğruluk için temiz derlemelere ihtiyaç duymadığından, CI sistemi derleme/test çalıştırmaya başlamadan önce temizlenecek şekilde yapılandırılmamış olmalıdır.

Çıkış kodlarıyla ilgili daha fazla ayrıntı için Kullanıcı Kılavuzu'na bakın.

Bazel'da gelecekte kullanıma sunulacak özellikler nelerdir?

Yol haritalarımıza göz atın.

INSERT LANGUAGE HERE projem için Bazel kullanabilir miyim?

Bazel genişletilebilir. Herkes yeni diller için destek ekleyebilir. Birçok dil desteklenmektedir. Öneri listesi için ansiklopedi oluşturma, daha kapsamlı liste için awesomebazel.com adresini ziyaret edin.

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

Bazel kod tabanına katkıda bulunabilir miyim?

Katkı kurallarımıza bakın.

Neden geliştirme aşaması açık bir süreç 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 fazla geliştirme yapmayı zorlaştırıyor.

Bazel'ı açık kaynaklı hale getirmeyi bitirdiniz mi?

Açık kaynak olarak kullanılan Bazel devam ediyor. Özellikle açık kaynak kullanımı üzerinde çalışıyoruz:

  • Birim ve entegrasyon testlerimizin birçoğu (eklenen yamalar daha kolay hâle gelir).
  • Tam IDE entegrasyonu.

Kodların ötesinde, tüm kod incelemeleri, hata izleme ve tasarım kararlarının Bazel topluluğuyla birlikte herkese açık olarak olmasını istiyoruz. Henüz bu değişiklikler yapılmamış olduğundan bazı değişiklikler, açık bir açıklama olmadan Bazel veri havuzunda görünecektir. 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çerken net olmayan veya haksız görünen bir şey olursa lütfen bize bildirin.

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

Evet, kod tabanının bir kısmı Google’a özel teknolojiyle entegre oluyor veya bundan kurtulmak için bahane arıyorduk (ya da ikisinin bir kombinasyonu da var). 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şim kurabilirim?

bazel-Tartışma@@groups.com adresinden bize ulaşabilirsiniz.

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

GitHub'da bir sorun açın.

Kod tabanında "Blaze" kelimesi ne olacak?

Bu, aracın dahili bir adıdır. Lütfen Bazel olarak Bazel'i belirtin.

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

İlk (Alfa) sürüme kadar Bazel harici olarak kullanılamadığından Chromium ve Android gibi açık kaynak projeleri bu platformu kullanamıyordu. Ayrıca, orijinal Windows desteğinin olmaması, Chrome gibi Windows uygulamaları oluştururken bir sorun teşkil etti. Proje olgunlaşmış ve daha kararlı hale geldiğinden Android Açık Kaynak Projesi Bazel'a geçiş sürecindedir.

"Bazel" nasıl telaffuz edilir?

ABD İngilizcesinde "basil" (ot) bitkisiyle aynı şekilde: "BAY-zel". "Hazel" ile kafiyeli. IPA: /bezl/