Bazel Docker Container'ını Kullanmaya Başlama

Bu sayfada Bazel container'ının içeriği, Bazel container içinde Bazel kullanarak abseil-cpp projesinin nasıl oluşturulacağı ve dizin ekleme ile Bazel container'ını kullanarak bu projenin doğrudan ana makineden nasıl oluşturulacağı anlatılmaktadır.

Dizin ekleme ile ana makinenizden Abseil projesi derleme

Bu bölümdeki talimatlar, barındırma ortamınızda kontrol edilen kaynaklarla Bazel kapsayıcısı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ı, ana makine ortamınızda önbelleğe alınır. Böylece, derlemeler arasında yeniden kullanılabilir.

Projeyi ana makine 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 derlemek ve derleme çıkışlarını ana makine 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/...

--config=asan|tsan|msan derleme işaretini ekleyerek ProjectSanitizer (asan), ThreadSanitizer (tsan) veyaMemorySanitizer'ı (msan) uygun şekilde seçerek 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

Container'ın içinden Abseil projesi oluşturma

Bu bölümdeki talimatlar, kapsayıcı içindeki kaynaklarla birlikte Bazel kapsayıcısını kullanarak derleme yapmanıza olanak tanır. Bir container'ı geliştirme iş akışınızın başında başlatıp kapsayıcı içindeki en kötü hızda değişiklikler yaptığınızda derleme sonuçları önbelleğe alınır.

Bazel kapsayıcısında bir kabuk başlatın:

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

Her kapsayıcı kimliği benzersizdir. Aşağıdaki talimatlarda kapsayıcı 5a99103747c6'ydı.

Projeyi klonlayın.

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

Düzenli bir derleme yapın.

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

--config=asan|tsan|msan derleme işaretini ekleyerek ProjectSanitizer (asan), ThreadSanitizer (tsan) veyaMemorySanitizer'ı (msan) uygun şekilde seçerek projeyi temizleyicilerle oluşturun.

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

Bazel kapsayıcısını keşfedin

Henüz yapmadıysanız Bazel kapsayıcısının içinde etkileşimli bir kabuk başlatın.

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

Kapsayıcı içeriğini inceleyin.

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