Puedes llamar a Bazel desde secuencias de comandos para realizar una compilación, ejecutar pruebas o consultar el gráfico de dependencias. Bazel se diseñó para habilitar secuencias de comandos eficaces, pero en esta sección, se enumeran algunos detalles que debes tener en cuenta para que tus secuencias de comandos sean más sólidas.
Elige la base de salida
La opción --output_base controla dónde debe escribir el proceso de Bazel los resultados de una compilación, así como varios archivos de trabajo que Bazel usa internamente, uno de los cuales es un bloqueo que protege contra la mutación simultánea de la base de salida por varios procesos de Bazel.
La elección del 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, esto determinará la base de salida que debes usar. Si realizas una llamada de "solo lectura" a Bazel (como bazel query), los factores de bloqueo serán más importantes. En particular, si necesitas ejecutar varias instancias de tu secuencia de comandos de forma simultánea, deberás asignarle a cada una una base de salida diferente (o aleatoria).
Si usas el valor predeterminado de la base de salida, competirás por el mismo bloqueo que usan los comandos interactivos de Bazel del usuario. Si el usuario emite comandos de larga duración, como compilaciones, tu secuencia de comandos deberá esperar a que se completen esos comandos antes de poder continuar.
Notas sobre el modo de servidor
De forma predeterminada, Bazel usa un proceso de servidor de larga duración como
optimización. Cuando ejecutes Bazel en una secuencia de comandos, no olvides llamar a shutdown cuando termines con el servidor o especificar --max_idle_secs=5 para que los servidores inactivos se apaguen de inmediato.
¿Qué código de salida obtendré?
Bazel intenta diferenciar las fallas debido al código fuente en consideración de los 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: Completada correctamente2- Problema de línea de comandos, marcas o combinación de comandos incorrectas o ilegales, o variables de entorno incorrectas Se debe modificar la línea de comandos.8: Se interrumpió la compilación, pero terminamos con un apagado ordenado.9: Se mantiene el bloqueo del servidor y se pasó--noblock_for_lock.32: Falla del entorno externo no en esta máquina33: Bazel se quedó sin memoria y falló Debes modificar la línea de comandos.34: Reservado para uso interno de Google35: Reservado para uso interno de Google36: Problema ambiental local, sospecha de permanente: Excepción no controlada o error interno de Bazel
3738: Reservado para uso interno de Google39- Los objetos binarios grandes que requiere Bazel se expulsan de la caché remota41-44: Reservado para uso interno de Google45: Error al publicar resultados en el servicio de evento de compilación47: Reservado para uso interno de Google
Códigos de retorno para comandos bazel build, bazel test:
1: Ocurrió un error en la compilación3: La compilación se realizó correctamente, pero algunas pruebas fallaron o se agotó el tiempo de espera.4- La compilación se realizó correctamente, pero no se encontraron pruebas, aunque se solicitó la prueba.
Para bazel run:
1: Ocurrió un error en la compilación- Si la compilación se realiza correctamente, pero el subproceso ejecutado muestra un código de salida distinto de cero, también será el código de salida del comando.
Para bazel query:
3- Éxito parcial, pero la consulta encontró 1 o más errores en el conjunto de archivos BUILD de entrada 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_goingen la línea de comandos.7: Error de comando
Las versiones futuras de Bazel pueden agregar códigos de salida adicionales, reemplazando el código de salida de falla genérico 1 por un valor distinto de 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 del directorio base
del espacio de trabajo o del directorio principal del usuario. Si esto es deseable o no es una opción para tu secuencia de comandos; si tu secuencia de comandos debe ser perfectamente hermética (como cuando se realizan compilaciones de lanzamiento), debes inhabilitar la lectura del archivo .bazelrc con la opción --bazelrc=/dev/null. Si deseas 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_logEl archivo de registro de comandos contiene las transmisiones stdout y stderr intercaladas del comando Bazel más reciente. Ten en cuenta que ejecutar bazel info anulará el contenido de este archivo, ya que se convertirá en el comando Bazel más reciente.
Sin embargo, la ubicación del archivo de registro de comandos no cambiará, a menos que cambies la configuración de las opciones --output_base o --output_user_root.
Analiza el resultado
El resultado de Bazel es bastante fácil de analizar para muchos propósitos. Dos opciones que pueden
ser útiles para tu secuencia de comandos son --noshow_progress que suprime los mensajes de progreso
, y --show_result n, que controla si se imprimen o
no los mensajes "compilación actualizada"; estos mensajes se pueden analizar para
descubrir qué destinos se compilaron correctamente y la ubicación de los archivos de salida
que crearon. Asegúrate de especificar un valor muy grande de n si dependes de estos mensajes.
Soluciona problemas de rendimiento mediante la generación de perfiles
Consulta la sección Generación de perfiles de rendimiento.