Ejecución de compilaciones en lotes
Es posible utilizar AWS CodeBuild para ejecutar compilaciones simultáneas y coordinadas de un proyecto con compilaciones por lotes.
Rol de seguridad
Las compilaciones por lotes introducen un nuevo rol de seguridad en la configuración por lotes. Este nuevo rol es obligatorio, ya que CodeBuild debe poder llamar a las acciones StartBuild, StopBuild y RetryBuild en su nombre para ejecutar compilaciones como parte de un lote. Los clientes deberían utilizar un nuevo rol, y no el mismo rol que utilizan para su compilación, por dos motivos:
-
Al asignar los permisos de
StartBuild,StopBuildyRetryBuilden el rol de compilación, una sola compilación podría iniciar más compilaciones a través de la especificación de compilación. -
Las compilaciones por lotes de CodeBuild proporcionan restricciones que limitan la cantidad de compilaciones y los tipos de computación que se pueden usar para las compilaciones del lote. Si la función de compilación tiene estos permisos, es posible que las propias compilaciones puedan eludir estas restricciones.
Tipos de compilación por lotes
CodeBuild admite los tipos de compilación por lotes siguientes:
Tipos de compilación por lotes
Grafo de compilación
Un grafo de compilación define un conjunto de tareas que dependen de otras tareas del lote.
En el siguiente ejemplo, se define un grafo de compilación que crea una cadena de dependencias.
batch: fast-fail: false build-graph: - identifier: build1 env: variables: BUILD_ID: build1 ignore-failure: false - identifier: build2 buildspec: build2.yml env: variables: BUILD_ID: build2 depend-on: - build1 - identifier: build3 env: variables: BUILD_ID: build3 depend-on: - build2 - identifier: build4 env: compute-type: ARM_LAMBDA_1GB - identifier: build5 env: fleet: fleet_name
En este ejemplo:
-
build1se ejecuta primero porque no tiene dependencias. -
build2depende debuild1, por lo quebuild2se ejecuta después de completarbuild1. -
build3depende debuild2, por lo quebuild3se ejecuta después de completarbuild2.
Para obtener más información acerca de la sintaxis del grafo de especificación de compilación, consulte batch/build-graph.
Lista de compilación
Una lista de compilación define una serie de tareas que se ejecutan en paralelo.
En el ejemplo siguiente se define una lista de compilación. Las compilaciones build1 y build2 se ejecutarán en paralelo.
batch: fast-fail: false build-list: - identifier: build1 env: variables: BUILD_ID: build1 ignore-failure: false - identifier: build2 buildspec: build2.yml env: variables: BUILD_ID: build2 ignore-failure: true - identifier: build3 env: compute-type: ARM_LAMBDA_1GB - identifier: build4 env: fleet: fleet_name - identifier: build5 env: compute-type: GENERAL_LINUX_XLAGRE
Para obtener más información acerca de la sintaxis de la lista de especificación de compilación, consulte batch/build-list.
Matriz de compilación
Una matriz de compilación define tareas con distintas configuraciones que se ejecutan en paralelo. CodeBuild crea una compilación aparte para cada combinación de configuración posible.
El ejemplo siguiente muestra una matriz de compilación con dos archivos de especificaciones de compilación y tres valores de una variable de entorno.
batch: build-matrix: static: ignore-failure: false dynamic: buildspec: - matrix1.yml - matrix2.yml env: variables: MY_VAR: - VALUE1 - VALUE2 - VALUE3
En este ejemplo, CodeBuild genera seis compilaciones:
-
matrix1.ymlcon$MY_VAR=VALUE1 -
matrix1.ymlcon$MY_VAR=VALUE2 -
matrix1.ymlcon$MY_VAR=VALUE3 -
matrix2.ymlcon$MY_VAR=VALUE1 -
matrix2.ymlcon$MY_VAR=VALUE2 -
matrix2.ymlcon$MY_VAR=VALUE3
Cada compilación tendrá la configuración siguiente:
-
ignore-failureesfalse. -
env/typeesLINUX_CONTAINER. -
env/imageesaws/codebuild/amazonlinux-x86_64-standard:4.0 -
env/privileged-modeestrue.
Estas compilaciones se ejecutan en paralelo.
Para obtener más información acerca de la sintaxis de la matriz de especificación de compilación, consulte batch/build-matrix.
Distribución ramificada de compilación
Una distribución ramificada de compilación define una tarea que se dividirá en varias compilaciones en el lote. Se puede utilizar para ejecutar pruebas paralelas. CodeBuild crea una compilación independiente para cada partición de casos de prueba en función del valor establecido en el campo parallelism.
En el siguiente ejemplo, se define una distribución ramificada de compilación que crea cinco compilaciones que se ejecutan en paralelo.
version: 0.2 batch: fast-fail: false build-fanout: parallelism: 5 ignore-failure: false phases: install: commands: - npm install build: commands: - mkdir -p test-results - cd test-results - | codebuild-tests-run \ --test-command 'npx jest --runInBand --coverage' \ --files-search "codebuild-glob-search '**/test/**/*.test.js'" \ --sharding-strategy 'equal-distribution'
En este ejemplo, suponiendo que hay 100 pruebas que deben ejecutarse, CodeBuild crea cinco compilaciones, cada una de las cuales ejecuta 20 pruebas paralelas.
Para obtener más información acerca de la sintaxis del grafo de especificación de compilación, consulte batch/build-fanout.
Modo de informe por lotes
Si el proveedor de fuentes del proyecto es Bitbucket, GitHub o GitHub Enterprise y el proyecto está configurado para informar de los estados de compilación al proveedor de fuentes, puede seleccionar cómo desea que se envíen los estados de compilación por lotes al proveedor de fuentes. Es posible seleccionar que los estados se envíen como un único informe de estado agregado para el lote o que se notifique el estado de cada compilación de lote por separado.
Para obtener más información, consulte los temas siguientes:
Más información
Para obtener más información, consulte los temas siguientes: