شروع کار با Bazel Docker Container

در این صفحه جزئیاتی در مورد محتویات ظرف Bazel، نحوه ساخت پروژه abseil-cpp با استفاده از Bazel در داخل ظرف Bazel، و نحوه ساخت این پروژه به طور مستقیم از دستگاه میزبان با استفاده از ظرف Bazel با نصب دایرکتوری ارائه می شود.

پروژه Abseil را از دستگاه میزبان خود با نصب دایرکتوری بسازید

دستورالعمل های این بخش به شما امکان می دهد با استفاده از ظرف Bazel با منابع بررسی شده در محیط میزبان خود بسازید. برای هر دستور ساختی که اجرا می کنید یک کانتینر راه اندازی می شود. نتایج ساخت در محیط میزبان شما ذخیره می‌شوند تا بتوان از آن‌ها دوباره در ساخت‌ها استفاده کرد.

پروژه را به دایرکتوری در دستگاه میزبان خود کلون کنید.

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

پوشه ای ایجاد کنید که دارای نتایج ذخیره شده در حافظه پنهان باشد تا در بین ساخت ها به اشتراک گذاشته شود.

mkdir -p /tmp/build_output/

از ظرف Bazel برای ساخت پروژه استفاده کنید و خروجی های ساخت را در پوشه خروجی در دستگاه میزبان خود در دسترس قرار دهید.

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 پروژه را با ضدعفونی کننده ها بسازید --config= asan | tsan | msan پرچم ساخت --config= asan | tsan | msan را برای انتخاب AddressSanitizer (asan)، ThreadSanitizer (tsan) یا MemorySanitizer (msan) انتخاب کنید.

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 را از داخل کانتینر بسازید

دستورالعمل های این بخش به شما امکان می دهد با استفاده از ظرف Bazel با منابع داخل ظرف بسازید. با راه‌اندازی یک کانتینر در ابتدای گردش کار توسعه و انجام تغییرات در فضای کاری درون کانتینر، نتایج ساخت در حافظه پنهان ذخیره می‌شوند.

یک پوسته را در ظرف بازل شروع کنید:

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

شناسه هر ظرف منحصر به فرد است. در دستورالعمل زیر، ظرف 5a99103747c6 بود.

پروژه را شبیه سازی کنید.

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

یک ساخت منظم انجام دهید.

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

با افزودن --config= asan | tsan | msan پروژه را با ضدعفونی کننده ها بسازید --config= asan | tsan | msan پرچم ساخت --config= asan | tsan | msan را برای انتخاب AddressSanitizer (asan)، ThreadSanitizer (tsan) یا MemorySanitizer (msan) انتخاب کنید.

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

ظرف بازل را کاوش کنید

اگر قبلاً این کار را نکرده اید، یک پوسته تعاملی را در داخل ظرف Bazel راه اندازی کنید.

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

محتویات ظرف را کاوش کنید.

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