Skip to main content

Resumen

De forma predeterminada, cada compilación de instantánea es una compilación completa: parte de una imagen base limpia, clona todos los repositorios y ejecuta cada blueprint desde cero. Esto garantiza un entorno completamente reproducible, pero puede resultar lento cuando solo cambiaste un blueprint entre muchos. Las compilaciones diferenciales optimizan este proceso reutilizando la instantánea de la compilación anterior que se completó correctamente como punto de partida. Solo se recompilan los workspaces cuyos blueprints realmente cambiaron; los workspaces sin cambios se heredan tal cual de la compilación de origen. Esto puede reducir significativamente los tiempos de compilación, especialmente en organizaciones con muchos repositorios.

Habilitar compilaciones diferenciales

1

Ve a la configuración del entorno

Ve a Settings > Environment > Advanced.
2

Activa el interruptor

Activa el interruptor compilación diferencial. La descripción dice: “Compilaciones más rápidas al reutilizar workspaces sin cambios.”
3

Inicia una compilación

Guarda un cambio en el blueprint o haz clic en Build snapshot. La siguiente compilación intentará ejecutarse como una compilación diferencial si existe una compilación padre válida.
Habilitar las compilaciones diferenciales no fuerza una compilación completa. Si ya existe una compilación previa con éxito o parcial para la misma plataforma y Machine Configuration, la siguiente compilación puede usarla como padre y heredar su estado. La siguiente compilación se ejecuta como compilación completa solo en las situaciones indicadas en Cuándo se ejecuta una compilación completa en su lugar. Para partir de una base limpia, selecciona compilación completa en el dropdown de Build snapshot.

Cómo funciona

Cuando se inicia una compilación con las compilaciones diferenciales habilitadas, el sistema sigue este proceso:

1. Encontrar una compilación padre

El sistema busca la compilación exitosa más reciente (status success o partial) que tenga una imagen de instantánea para la misma plataforma y machine configuration para usarla como padre. Si no existe ninguna compilación padre que cumpla los requisitos, se recurre automáticamente a una compilación completa.

2. Comparar blueprints

La configuración de cada workspace se compara con la compilación padre. El sistema calcula un hash de las entradas de cada workspace —incluidos el contenido del blueprint, los archivos adjuntos y los secretos— y comprueba qué cambió.

3. Asignar acciones al workspace

Según la comparación, a cada workspace se le asigna una de estas tres acciones:
Para los workspaces heredados, initialize no se ejecuta de nuevo. Escribe maintenance de modo que sea autocontenido y pueda ejecutarse de forma independiente después de obtener el código más reciente. Puede usar herramientas y runtimes ya instalados en la instantánea padre, pero no debe requerir que initialize se ejecute inmediatamente antes ni depender de variables de entorno que initialize haya escrito previamente en $ENVRC.

4. Ejecuta la compilación

La compilación parte de la imagen de instantánea de la compilación padre, en lugar de una base limpia. Esto significa lo siguiente:
  • Workspaces heredados ya tienen instaladas sus herramientas, runtimes y dependencias. El sistema descarga el código más reciente (git pull) y ejecuta los comandos de maintenance para actualizar las dependencias.
  • Workspaces recompilados se configuran desde cero: se vuelven a clonar y pasan por la secuencia completa de initialize + maintenance.
  • Workspaces eliminados tienen sus directorios limpiados.
Los blueprints de organización y de Enterprise omiten initialize durante las compilaciones diferenciales (ya que esas herramientas ya están presentes en la imagen principal) y ejecutan solo maintenance.
$ENVRC se restablece al inicio de cada compilación, incluidas las compilaciones diferenciales. Las variables de entorno y las entradas de PATH escritas en $ENVRC por una compilación anterior no se heredan. Si maintenance las necesita, debe configurarlas por su cuenta.

Cuándo se ejecuta una compilación completa en su lugar

Incluso con las compilaciones diferenciales habilitadas, una compilación se ejecuta como compilación completa en estas situaciones:
  • Solicitas una compilación completa — seleccionas compilación completa en el menú desplegable Build snapshot
  • La compilación completa más reciente es demasiado antigua — una compilación automática, como la que se activa al guardar un blueprint, se ejecuta como compilación completa cuando no existe ninguna compilación completa para su plataforma o cuando la más reciente supera el intervalo de Full build refresh en Settings > Environment > Advanced (cada 7 días de forma predeterminada)
  • No existe una compilación padre reutilizable — no hay ninguna compilación success o partial con una imagen de instantánea para la misma plataforma y machine configuration
  • La compilación padre es incompatible — la plataforma, la machine configuration, la imagen base o el ajuste Clone repositories on all platforms cambiaron desde la compilación padre, o la compilación padre no tiene un baseline de secretos con el que comparar
  • Cambió la configuración de la organización o del enterprise — un blueprint de organización o enterprise, un archivo de blueprint o un secreto cambiaron desde la compilación padre
Los cambios acotados a repositorios individuales mantienen el carácter diferencial de la compilación. Los repositorios nuevos, los cambios de blueprint o de secretos de un repositorio y los repositorios que fallaron en la compilación padre se vuelven a compilar dentro de la compilación diferencial. Reordenar los repositorios no activa una compilación completa. Cuando una compilación solicitada como diferencial se ejecuta como compilación completa, el tooltip Build kind de la página de detalle de la compilación indica el motivo.

Ver el tipo de compilación

Después de que se complete una compilación, puedes ver si se ejecutó como una compilación diferencial o completa:
  1. Ve a Settings > Environment > Snapshots
  2. Haz clic en una compilación del historial
  3. La etiqueta Build kind muestra Differential (azul) o Full build (predeterminado)
Pasa el cursor sobre la etiqueta para ver una información sobre herramientas que explica qué significa cada tipo:
  • Differential: “Solo se vuelven a compilar los workspaces modificados; los que no han cambiado se heredan de la última compilación exitosa con la misma configuración”
  • Full build: “Todos los workspaces se compilan desde cero”

Beneficios

Iniciar manualmente una compilación completa

Incluso con las compilaciones diferenciales habilitadas, puedes forzar una compilación completa desde el botón Build snapshot. Usa el menú desplegable para seleccionar Compilación completa en lugar de la opción diferencial predeterminada. Recomendamos ejecutar una compilación completa periódicamente para descartar el estado heredado y verificar que tus blueprints aún puedan crear el Environment desde cero. Ejecuta también una después de eliminar o reemplazar la configuración que pueda haber dejado archivos, herramientas o dependencias obsoletos en la instantánea. Una compilación completa vuelve a ejecutar todos los pasos de initialize y maintenance.

Preguntas frecuentes

No. Las sesiones siempre se inician desde la instantánea final, independientemente de cómo se haya realizado la compilación. La única diferencia es la velocidad de compilación.
Fija una compilación anterior que sepas que funciona desde Settings > Environment > Snapshots y luego desencadena una compilación completa para obtener una instantánea limpia. También puedes desactivar por completo las compilaciones diferenciales para volver a las compilaciones completas.
Sí. Una compilación con estado partial (algunos workspaces se completaron correctamente y otros fallaron) puede servir como compilación principal. El sistema hereda solo de los workspaces que se completaron correctamente en la compilación principal.