En esta página, se proporcionan detalles sobre el contenido del contenedor de Bazel, cómo compilar el proyecto abseil-cpp con Bazel dentro del contenedor de Bazel y cómo compilar este proyecto directamente desde la máquina host con el contenedor de Bazel y el montaje de directorios.
Compila el proyecto de Abseil desde tu máquina host con la activación del directorio
Las instrucciones de esta sección te permiten compilar con el contenedor de Bazel y las fuentes extraídas en tu entorno de host. Se inicia un contenedor para cada comando de compilación que ejecutas. Los resultados de la compilación se almacenan en caché en tu entorno host para que se puedan reutilizar en diferentes compilaciones.
Clona el proyecto en un directorio de tu máquina host.
git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git /src/workspace
Crea una carpeta que tendrá los resultados almacenados en caché que se compartirán entre las compilaciones.
mkdir -p /tmp/build_output/
Usa el contenedor de Bazel para compilar el proyecto y hacer que los resultados de la compilación estén disponibles en la carpeta de salida de tu máquina host.
docker run \
-e USER="$(id -u)" \
-u="$(id -u)" \
-v /src/workspace:/src/workspace \
-v /tmp/build_output:/tmp/build_output \
-w /src/workspace \
gcr.io/bazel-public/bazel:latest \
--output_user_root=/tmp/build_output \
build //absl/...
Compila el proyecto con sanitizadores. Para ello, agrega la marca de compilación --config=asan|tsan|msan
para seleccionar AddressSanitizer (asan), ThreadSanitizer (tsan) o MemorySanitizer (msan) según corresponda.
docker run \
-e USER="$(id -u)" \
-u="$(id -u)" \
-v /src/workspace:/src/workspace \
-v /tmp/build_output:/tmp/build_output \
-w /src/workspace \
gcr.io/bazel-public/bazel:latest \
--output_user_root=/tmp/build_output \
build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test
Compila el proyecto de Abseil desde el interior del contenedor
Las instrucciones de esta sección te permiten compilar con el contenedor de Bazel y las fuentes dentro del contenedor. Si inicias un contenedor al comienzo de tu flujo de trabajo de desarrollo y realizas cambios en el espacio de trabajo dentro del contenedor, se almacenarán en caché los resultados de la compilación.
Inicia una shell en el contenedor de Bazel:
docker run --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
Cada ID de contenedor es único. En las instrucciones que se incluyen a continuación, el contenedor era 5a99103747c6.
Clona el proyecto.
ubuntu@5a99103747c6:~$ git clone --depth 1 --branch 20220623.1 https://github.com/abseil/abseil-cpp.git && cd abseil-cpp/
Realiza una compilación normal.
ubuntu@5a99103747c6:~/abseil-cpp$ bazel build //absl/...
Compila el proyecto con sanitizadores agregando la marca de compilación --config=asan|tsan|msan
para seleccionar AddressSanitizer (asan), ThreadSanitizer (tsan) o MemorySanitizer (msan) según corresponda.
ubuntu@5a99103747c6:~/abseil-cpp$ bazel build --config={asan | tsan | msan} -- //absl/... -//absl/types:variant_test
Explora el contenedor de Bazel
Si aún no lo hiciste, inicia una shell interactiva dentro del contenedor de Bazel.
docker run -it --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
ubuntu@5a99103747c6:~$
Explora el contenido del contenedor.
ubuntu@5a99103747c6:~$ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ubuntu@5a99103747c6:~$ java -version openjdk version "1.8.0_362" OpenJDK Runtime Environment (build 1.8.0_362-8u372-ga~us1-0ubuntu1~20.04-b09) OpenJDK 64-Bit Server VM (build 25.362-b09, mixed mode)
ubuntu@5a99103747c6:~$ python -V Python 3.8.10
ubuntu@5a99103747c6:~$ bazel version WARNING: Invoking Bazel in batch mode since it is not invoked from within a workspace (below a directory having a WORKSPACE file). Extracting Bazel installation... Build label: 6.2.1 Build target: bazel-out/k8-opt/bin/src/main/java/com/google/devtools/build/lib/bazel/BazelServer_deploy.jar Build time: Fri Jun 2 16:59:58 2023 (1685725198) Build timestamp: 1685725198 Build timestamp as int: 1685725198
Explora el Dockerfile de Bazel
Si quieres verificar cómo se compila la imagen de Docker de Bazel, puedes encontrar su Dockerfile en bazelbuild/continuous-integration/bazel/oci.