Puedes llamar a Bazel desde secuencias de comandos para realizar una compilación, ejecutar pruebas o realizar consultas. el gráfico de dependencia. Bazel se diseñó para permitir una escritura eficaz de secuencias de comandos, pero en esta sección se enumeran algunos detalles a tener en cuenta para hacer que las secuencias de comandos robustos.
Cómo elegir la base de salida
La opción --output_base
controla dónde debe escribir el proceso de Bazel el
los resultados de una compilación, así como varios archivos de trabajo utilizados internamente por
Bazel, uno de los cuales es un bloqueo que protege contra la mutación simultánea del
de salida por varios procesos de Bazel.
Elegir el directorio base de salida correcto para tu secuencia de comandos depende de varios
factores. Si necesitas colocar los resultados de la compilación en una ubicación específica,
la base de salida que debes usar. Si estás haciendo una campaña de “solo lectura” Llamar a
Bazel (como bazel query
), los factores de bloqueo serán más importantes. En
particular, si necesita ejecutar varias instancias
de su secuencia de comandos al mismo tiempo
deberás otorgarle a cada uno una base de salida diferente (o aleatoria).
Si usa el valor base de salida predeterminado, competirá por el mismo que usan los comandos interactivos de Bazel del usuario. Si el usuario genera comandos de larga duración, como compilaciones, tu secuencia de comandos deberá esperar comandos a completar antes de que pueda continuar.
Notas sobre el modo de servidor
De forma predeterminada, Bazel usa un proceso del servidor de larga duración como
la optimización de las conversiones. Cuando ejecutes Bazel en una secuencia de comandos, no olvides llamar a shutdown
.
cuando termines con el servidor, o especifica --max_idle_secs=5
para que
los servidores inactivos se apagan automáticamente.
¿Qué código de salida obtendré?
Bazel intenta diferenciar las fallas causadas por el código fuente en de errores externos que impiden que Bazel se ejecute correctamente. La ejecución de Bazel puede generar los siguientes códigos de salida:
Códigos de salida comunes a todos los comandos:
0
- Se completó correctamente2
: problema de línea de comandos, marcas incorrectas o ilegales, o combinación de comandos Variables de entorno incorrectas. Debes modificar tu línea de comandos.8
: Se interrumpió la compilación, pero finalizamos con un cierre ordenado.9
: Se mantiene el bloqueo del servidor y se pasó--noblock_for_lock
.32
: Hay una falla del entorno externo que no está en esta máquina.33
- Bazel se quedó sin memoria y falló. Debes modificar tu línea de comandos.34
: Reservado para uso interno de Google.35
: Reservado para uso interno de Google.36
: Problema ambiental local, se sospecha que es permanente.37
: Excepción no controlada o error interno de Bazel.38
: Reservado para uso interno de Google.39
: Los BLOB que requiere Bazel se expulsan de la caché remota.41-44
: Reservado para uso interno de Google.45
: Se produjo un error cuando se publicaban los resultados en el servicio de eventos de compilación.47
: Reservado para uso interno de Google.
Códigos de retorno para los comandos bazel build
, bazel test
:
1
. No se pudo completar la compilación.3
: Se completó la compilación correctamente, pero algunas pruebas fallaron o se agotó el tiempo de espera.4
: La compilación se realizó correctamente, pero no se encontraron pruebas a pesar de que las pruebas se realizaron solicitado.
Para bazel run
:
1
. No se pudo completar la compilación.- Si la compilación se realiza correctamente, pero el subproceso ejecutado muestra una salida distinta de cero código, también será el código de salida del comando.
Para bazel query
:
3
: Parcialmente correcto, pero la consulta encontró 1 o más errores en el de entrada de compilación y, por lo tanto, los resultados de la operación no son 100% confiables. Es probable que esto se deba a una opción--keep_going
en la línea de comandos.7
: Falla del comando.
Las versiones futuras de Bazel pueden agregar códigos de salida adicionales, lo que reemplaza las fallas genéricas.
el código de salida 1
con un valor diferente que no es cero con un significado particular.
Sin embargo, todos los valores de salida distintos de cero siempre constituirán un error.
Lee el archivo .bazelrc
De forma predeterminada, Bazel lee el archivo .bazelrc
de la base.
el directorio del espacio de trabajo
o el directorio principal del usuario. Si se trata de
deseable es una elección para tu guion; si el guion tiene que estar perfectamente
hermético (como cuando se hacen compilaciones de lanzamiento), se debe inhabilitar la lectura del
.bazelrc con la opción --bazelrc=/dev/null
. Si quieres realizar
una compilación con la configuración preferida del usuario, el comportamiento predeterminado es mejor.
Registro de comando
El resultado de Bazel también está disponible en un archivo de registro de comandos que puedes encontrar con el siguiente comando:
bazel info command_log
El archivo de registro de comandos contiene las transmisiones stdout y stderr intercaladas de la
comando de Bazel más reciente. Ten en cuenta que, si ejecutas bazel info
, se reemplazará el
el contenido de este archivo, ya que se convierte en el comando de Bazel más reciente.
Sin embargo, la ubicación del archivo de registro del comando no cambiará, a menos que cambies
la configuración de las opciones --output_base
o --output_user_root
Resultado del análisis
El resultado de Bazel es bastante fácil de analizar por muchos propósitos. Dos opciones que pueden
útiles para tu secuencia de comandos son --noshow_progress
, que suprimen el progreso
mensajes, y --show_result n
, que controla si
y no “actualizarlo” se imprimen los mensajes. estos mensajes se pueden analizar
descubrir qué destinos se compilaron correctamente y la ubicación de la salida
archivos que crearon. Asegúrate de especificar un valor muy grande de n si dependes de
estos mensajes.
Cómo solucionar problemas de rendimiento mediante la generación de perfiles
Consulta la sección Generación de perfiles de rendimiento.