Bazel Docker Container'ını Kullanmaya Başlama

Bu sayfada, Bazel container'ının içeriği, Bazel container'ında Bazel kullanarak abseil-cpp projesinin nasıl oluşturulacağı ve dizin bağlama ile Bazel container'ı kullanılarak bu projenin doğrudan ana makineden nasıl oluşturulacağı hakkında ayrıntılı bilgi verilmektedir.

Abseil projesini dizin bağlama ile ana makinenizden oluşturma

Bu bölümdeki talimatlar, ana makine ortamınızda kaynakları kontrol ederek Bazel container'ını kullanarak derleme yapmanıza olanak tanır. Yürüttüğünüz her derleme komutu için bir container başlatılır. Derleme sonuçları, derlemeler arasında yeniden kullanılabilmeleri için ana makine ortamınızda önbelleğe alınır.

Projeyi ana makinenizdeki bir dizine klonlayın.

git clone https://github.com/abseil/abseil-cpp.git /src/workspace

Derlemeler arasında paylaşılacak, önbelleğe alınmış sonuçları içeren bir klasör oluşturun.

mkdir -p /tmp/build_output/

Projeyi oluşturmak ve derleme çıkışlarını ana makinenizdeki çıkış klasöründe kullanılabilir hale getirmek için Bazel container'ını kullanın.

docker run \
  -e USER="$(id -u)" \
  -u="$(id -u)" \
  -v /src/workspace:/src/workspace \
  -v /tmp/build_output:/tmp/build_output \
  -w /src/workspace \
  l.gcr.io/google/bazel:latest \
  --output_user_root=/tmp/build_output \
  build //absl/...

AddressSanitizer (asan), ThreadSanitizer (tsan) veya MemorySanitizer (msan) öğelerini uygun şekilde seçmek için --config=asan|tsan|msan build flag öğesini ekleyerek projeyi temizleyicilerle oluşturun.

docker run \
  -e USER="$(id -u)" \
  -u="$(id -u)" \
  -v /src/workspace:/src/workspace \
  -v /tmp/build_output:/tmp/build_output \
  -w /src/workspace \
  l.gcr.io/google/bazel:latest \
  --output_user_root=/tmp/build_output \
  build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test

Abseil projesini container'ın içinden oluşturma

Bu bölümdeki talimatlar, container'ın içindeki kaynaklarla Bazel container'ını kullanarak derleme yapmanıza olanak tanır. Geliştirme iş akışınızın başında bir container başlatıp değişiklikleri container içindeki çalışma alanında yaparak derleme sonuçlarını önbelleğe alabilirsiniz.

Bazel container'ında bir kabuk başlatın:

docker run --interactive --entrypoint=/bin/bash l.gcr.io/google/bazel:latest

Her container kimliği benzersizdir. Aşağıdaki talimatlarda container 5a99103747c6 olarak belirtilmiştir.

Projeyi klonlayın.

root@5a99103747c6:~# git clone https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/

Düzenli olarak derleme yapın.

root@5a99103747c6:~/abseil-cpp# bazel build //absl/...

AddressSanitizer (asan), ThreadSanitizer (tsan) veya MemorySanitizer (msan) seçeneklerinden uygun olanı belirlemek için --config=asan|tsan|msan build işaretini ekleyerek projeyi temizleyicilerle oluşturun.

root@5a99103747c6:~/abseil-cpp# bazel build --config=--config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test

Bazel container'ını keşfetme

Henüz yapmadıysanız Bazel container'ında etkileşimli bir kabuk başlatın.

docker run -it --entrypoint=/bin/bash l.gcr.io/google/bazel:latest
root@5a99103747c6:/#

Container içeriğini keşfedin.

root@5a99103747c6:/# clang --version
clang version 8.0.0 (trunk 340178)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
root@5a99103747c6:/# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.16.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
root@5a99103747c6:/# python -V
Python 2.7.12
root@5a99103747c6:/# python3 -V
Python 3.6.6
root@5a99103747c6:/# bazel version
Extracting Bazel installation...
Build label: 0.17.1
Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar
Build time: Fri Sep 14 10:39:25 2018 (1536921565)
Build timestamp: 1536921565
Build timestamp as int: 1536921565