Configura Bazel CI a fin de probar reglas para la ejecución remota

Informa un problema Ver código fuente

Esta página es para propietarios y encargados del mantenimiento de repositorios de reglas de Bazel. Se describe cómo configurar el sistema de integración continua (CI) de Bazel para que el repositorio pruebe las reglas y la compatibilidad con una situación de ejecución remota. Las instrucciones de esta página se aplican a los proyectos almacenados en repositorios de GitHub.

Requisitos previos

Antes de completar los pasos que aparecen en esta página, asegúrese de lo siguiente:

Configura Bazel CI para realizar pruebas

  1. En el archivo .bazelci/presubmit.yml, haz lo siguiente:

    a. Agrega una configuración llamada rbe_ubuntu1604.

    b. En la configuración de rbe_ubuntu1604, agrega los destinos de compilación y de prueba que deseas probar en la ejecución remota.

  2. Agrega el repositorio de GitHub bazel-toolchains a tu archivo WORKSPACE, fijado en la versión más reciente. También agrega un destino rbe_autoconfig con el nombre buildkite_config. En este ejemplo, se crea la configuración de la cadena de herramientas para la ejecución remota con BuildKite CI para rbe_ubuntu1604.

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. Envía una solicitud de extracción con tus cambios al archivo presubmit.yml. (Consulta la solicitud de extracción de ejemplo).

  2. Si deseas ver los resultados de la compilación, haz clic en Detalles para la verificación de solicitud de extracción de RBE (Ubuntu 16.04) en GitHub, como se muestra en la siguiente figura. Este vínculo estará disponible después de que se combine la solicitud de extracción y se ejecuten las pruebas de CI. (Consulta los resultados de ejemplo).

    Resultados de ejemplo

  3. Configura la verificación de prueba de Bazel (RBE (Ubuntu 16.04)) como prueba necesaria para pasar a la combinación de reglas de protección (opcional). La configuración se encuentra en GitHub, en Configuración > Ramas > Reglas de protección de ramas, como se muestra en la siguiente figura.

    Configuración de reglas de protección de ramas

Soluciona problemas de compilaciones y pruebas con errores

Si tu compilación o pruebas fallan, es probable que se deba a los siguientes motivos:

  • Las herramientas de compilación o prueba obligatorias no están instaladas en el contenedor predeterminado. Las compilaciones que usan la configuración rbe_ubuntu1604 se ejecutan de forma predeterminada dentro de un contenedor rbe-ubuntu16-04, que incluye herramientas comunes a muchas compilaciones de Bazel. Sin embargo, si tus reglas requieren herramientas que no están presentes en el contenedor predeterminado, debes crear un contenedor personalizado basado en el contenedor rbe-ubuntu16-04 y, luego, incluir esas herramientas como se describe más adelante.

  • Los destinos de compilación o prueba usan reglas que no son compatibles con la ejecución remota. Consulta Adapta las reglas de Bazel para la ejecución remota a fin de obtener detalles sobre la compatibilidad con la ejecución remota.

Usa un contenedor personalizado en la configuración de CI de rbe_ubuntu1604

El contenedor rbe-ubuntu16-04 está disponible de forma pública en la siguiente URL:

http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04

Puedes extraerlo directamente de Container Registry o compilarlo desde la fuente. En las siguientes secciones, se describen ambas opciones.

Antes de comenzar, asegúrate de haber instalado gcloud, docker y git. Si compilas el contenedor desde la fuente, también debes instalar la versión más reciente de Bazel.

Extraer el rbe-ubuntu16-04 de Container Registry

Para extraer el contenedor rbe-ubuntu16-04 de Container Registry, ejecuta el siguiente comando:

gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum

Reemplaza sha256-checksum por el valor de suma de verificación SHA256 del contenedor más reciente.

Compila el contenedor rbe-ubuntu16-04 desde la fuente

Para compilar el contenedor rbe-ubuntu16-04 a partir del código fuente, haz lo siguiente:

  1. Clona el repositorio bazel-toolchains:

    git clone https://github.com/bazelbuild/bazel-toolchains
    
  2. Configura los destinos de contenedores de la cadena de herramientas y compila el contenedor como se explica en Contenedores de la cadena de herramientas.

  3. Extrae el contenedor recién compilado:

    gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
    

Ejecuta el contenedor personalizado

Para ejecutar el contenedor personalizado, realiza una de las siguientes acciones:

  • Si extrajiste el contenedor de Container Registry, ejecuta el siguiente comando:

    docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bash
    

    Reemplaza sha256-checksum por el valor de la suma de verificación SHA256 del contenedor más reciente.

  • Si creaste el contenedor desde la fuente, ejecuta el siguiente comando:

    docker run -it gcr.io/project-id/custom-container-name@sha256:sha256sum /bin/bash
    

Agrega recursos al contenedor personalizado

Usa Dockerfile o rules_docker para agregar recursos o versiones alternativas de los recursos originales al contenedor rbe-ubuntu16-04. Si es la primera vez que usa Docker, lea lo siguiente:

Por ejemplo, el siguiente fragmento de Dockerfile instala my_tool_package:

FROM gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
RUN apt-get update && yes | apt-get install -y my_tool_package

Envía el contenedor personalizado a Container Registry

Una vez que personalizaste el contenedor, compila la imagen del contenedor y envíala a Container Registry de la siguiente manera:

  1. Compila la imagen del contenedor:

    docker build -t custom-container-name.
    docker tag custom-container-name gcr.io/project-id/custom-container-name
    
  2. Envía la imagen de contenedor a Container Registry:

    gcloud docker -- push gcr.io/project-id/custom-container-name
    
  3. Navegue a la siguiente URL para verificar que se haya enviado el contenedor:

    https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name

  4. Tome nota de la suma de verificación SHA256 de su contenedor personalizado. Deberás proporcionarla en la definición de tu plataforma de compilación más adelante.

  5. Configura el contenedor para el acceso público como se describe en el documento accesible de forma pública, como se explica en Entrega imágenes de manera pública.

    Para obtener más información, consulta Envía y extrae imágenes.

Especifica la definición de la plataforma de compilación

Debes incluir una configuración de la plataforma de Bazel en tu configuración de la cadena de herramientas personalizada, que le permita a Bazel seleccionar una cadena de herramientas apropiada para la plataforma de hardware o software deseada. Para generar una plataforma válida de forma automática, puedes agregar a tu WORKSPACE un destino rbe_autoconfig con el nombre buildkite_config, que incluye asistentes adicionales para seleccionar tu contenedor personalizado. Para obtener detalles sobre esta configuración, consulta la documentación actualizada de rbe_autoconfig.