

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejemplos basados en casos de uso para CodeBuild
<a name="use-case-based-samples"></a>

Puede utilizar estos ejemplos basados en casos de uso para experimentar con AWS CodeBuild:

[Ejemplos entre servicios](cross-service-samples.md)  
Una lista de ejemplos de varios servicios para experimentar con AWS CodeBuild.

[Ejemplo de insignias de compilación](sample-build-badges.md)  
Muestra cómo configurar CodeBuild con insignias de compilación.

[Ejemplo para probar un informe](sample-test-report-cli.md)  
Utiliza la AWS CLI para crear, ejecutar y visualizar los resultados de un informe de pruebas.

[Muestras de Docker para CodeBuild](sample-docker-section.md)  
Muestra cómo usar imágenes de Docker personalizadas, publicar imágenes de Docker en un repositorio de Amazon ECR y usar imágenes de Docker en un registro privado.

[Alojar la salida de la compilación en un bucket de S3 ](sample-disable-artifact-encryption.md)  
Muestra cómo se crea un sitio web estático en un bucket de S3 con artefactos de compilación sin cifrar.

[ Ejemplo con varias entradas y salidas ](sample-multi-in-out.md)  
Muestra cómo utilizar varios orígenes de entrada y varios artefactos de salida en un proyecto de compilación.

[ Ejemplos de ejecución de pruebas paralelas ](sample-parallel-test.md)  
Muestra cómo utilizar el comando `codebuild-tests-run` de la CLI para dividir y ejecutar pruebas en entornos de ejecución en paralelo.

[ Versiones del entorno de ejecución en el ejemplo del archivo buildspec ](sample-runtime-versions.md)  
Muestra cómo especificar los tiempos de ejecución y sus versiones en el archivo buildspec.

[Ejemplo de versión de origen](sample-source-version.md)  
En esta página se muestra cómo utilizar una versión específica de su origen en un proyecto de compilación de CodeBuild.

[Muestras de repositorios fuente de terceros para CodeBuild](sample-third-party-source.md)  
Muestra cómo crear solicitudes de extracción de Bitbucket, GitHub Enterprise Server y GitHub con webhooks mediante CodeBuild.

[Establecimiento de nombres de artefacto en el momento de la compilación con control de versiones semánticas](sample-buildspec-artifact-naming.md)  
Muestra cómo utilizar el control de versiones semánticas para crear un nombre de artefacto en el momento de la compilación.

# Muestras de servicios cruzados para CodeBuild
<a name="cross-service-samples"></a>

Puede utilizar estos ejemplos de servicios cruzados para experimentar con: AWS CodeBuild

[Ejemplo de Amazon ECR](sample-ecr.md)  
Utiliza una imagen de Docker de un repositorio de Amazon ECR para usar Apache Maven para generar un único archivo JAR. Las instrucciones de ejemplo le mostrarán cómo crear y enviar una imagen de Docker a Amazon ECR, crear un proyecto de Go, compilar el proyecto, ejecutar el proyecto y configurar los permisos para permitir la conexión CodeBuild a Amazon ECR.

[Ejemplo de Amazon EFS](sample-efs.md)  
Muestra cómo configurar un archivo buildspec para que un CodeBuild proyecto se monte y se compile en un sistema de archivos Amazon EFS. Las instrucciones de ejemplo le mostrarán cómo crear una instancia de Amazon VPC, crear un sistema de archivos en la instancia de Amazon VPC, crear y compilar un proyecto que use la instancia de Amazon VPC y, después, revisar el archivo y las variables del proyecto generado. 

[AWS CodePipeline muestras](sample-codepipeline.md)  
Muestra cómo crear una compilación con compilaciones por lotes, así como con múltiples fuentes de entrada y múltiples artefactos de salida. AWS CodePipeline En esta sección se incluyen archivos JSON de ejemplo que muestran estructuras de canalización que crean compilaciones por lotes con artefactos individuales y artefactos combinados. Se incluye un ejemplo de JSON adicional que muestra la estructura de la canalización con varios orígenes de entrada y múltiples artefactos de salida.

[AWS Config muestra](how-to-integrate-config.md)  
Muestra cómo configurarlo AWS Config. Muestra CodeBuild los recursos a los que se hace un seguimiento y describe cómo buscar CodeBuild los proyectos en ellos AWS Config. Las instrucciones de ejemplo le mostrarán los requisitos previos para la integración AWS Config, los pasos para AWS Config configurarlos y los pasos para buscar CodeBuild proyectos y datos. AWS Config

[Ejemplo de notificaciones de compilación](sample-build-notifications.md)  
Utiliza Apache Maven para producir un único archivo JAR. Envía una notificación de compilación a los suscriptores de un tema de Amazon SNS Los ejemplos de instrucciones muestran cómo configurar los permisos para CodeBuild poder comunicarse con Amazon SNS y CloudWatch cómo crear e identificar CodeBuild temas en Amazon SNS, cómo suscribir a los destinatarios del tema y cómo configurar las reglas en. CloudWatch

# Ejemplo de Amazon ECR para CodeBuild
<a name="sample-ecr"></a>

En este ejemplo, se utiliza una imagen de Docker en un repositorio de imágenes Amazon Elastic Container Registry (Amazon ECR) para compilar un proyecto de Go de ejemplo.

**importante**  
Al ejecutar este ejemplo, es posible que se produzcan cargos en su AWS cuenta. Estos incluyen posibles cargos por AWS CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 AWS KMS, CloudWatch Logs y Amazon ECR. Para obtener más información, consulte [CodeBuild los precios, precios](https://aws.amazon.com/codebuild/pricing) de [Amazon S3, precios](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) de [Amazon y CloudWatch precios](https://aws.amazon.com/cloudwatch/pricing) de [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Ejecución del ejemplo de Amazon ECR](#sample-ecr-running)

## Ejecución del ejemplo de Amazon ECR
<a name="sample-ecr-running"></a>

Utilice las siguientes instrucciones para ejecutar el ejemplo de Amazon ECR para CodeBuild.

**Para ejecutar este ejemplo**

1. Para crear e insertar la imagen de Docker en su repositorio de imágenes de Amazon ECR, siga los pasos que se indican en la sección [Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md#sample-docker-running) de [Ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md).

1. Crear un proyecto de Go: 

   1. Cree los archivos tal y como se describe en las [Archivos de un proyecto de Go](#sample-ecr-go-project-files) secciones [Estructura de un proyecto de Go](#ecr-sample-go-project-file-structure) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un AWS CodeCommit GitHub repositorio de Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

   1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada.

      Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

      ```
      {
        "name": "sample-go-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
        },
        "artifacts": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-output-bucket",
          "packaging": "ZIP",
          "name": "GoOutputArtifact.zip"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/standard:5.0",
          "computeType": "BUILD_GENERAL1_SMALL"
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name",
        "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
      }
      ```

   1. Para obtener el artefacto de salida de la compilación, abra el bucket de salida de S3.

   1. Descargue el archivo `GoOutputArtifact.zip` en su equipo o instancia local y después extraiga el contenido del archivo . En el contenido extraído, obtenga el archivo `hello`. 

1.  Si se cumple una de las siguientes condiciones, debe añadir permisos a su repositorio de imágenes en Amazon ECR para que AWS CodeBuild pueda incorporar su imagen de Docker al entorno de compilación. 
   +  Su proyecto utiliza CodeBuild credenciales para extraer imágenes de Amazon ECR. Esto se especifica mediante el valor `CODEBUILD` del atributo `imagePullCredentialsType` de `ProjectEnvironment`. 
   +  Su proyecto utiliza una imagen de Amazon ECR entre más de una cuenta. En este caso, el proyecto debe utilizar su rol de servicio para extraer imágenes de Amazon ECR. Para habilitar este comportamiento, establezca el atributo `imagePullCredentialsType` de `ProjectEnvironment` en `SERVICE_ROLE`. 

   1. Abra la consola Amazon ECR en [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. En la lista de nombres de repositorio, elija el nombre del repositorio que ha creado o seleccionado.

   1. En el panel de navegación, elija **Permissions (Permisos)**, **Edit (Editar)** y **Add statement (Agregar instrucción)**.

   1. En **Statement name (Nombre de instrucción)**, introduzca un identificador (por ejemplo, **CodeBuildAccess**).

   1. En **Effect (Efecto)**, deje seleccionado **Allow (Permitir)**. Esto indica que desea permitir el acceso a otra cuenta de AWS .

   1. En **Principal**, realice una de las siguientes acciones:
      + Si su proyecto utiliza CodeBuild credenciales para extraer una imagen de Amazon ECR, introduzca **codebuild.amazonaws.com** en **Service principal**. 
      + Si tu proyecto utiliza una imagen de Amazon ECR multicuenta, para la **AWS cuenta IDs**, introduce IDs las AWS cuentas a las que quieres dar acceso.

   1. Omita la lista **Todas las entidades de IAM**.

   1. **En **Acción**, selecciona las acciones de solo extracción: ecr:GetDownloadUrlForLayer, **ecr:** y **ecr**:. BatchGetImage BatchCheckLayerAvailability**

   1. En **Condiciones**, añada lo siguiente:

      ```
      {
         "StringEquals":{
            "aws:SourceAccount":"<AWS-account-ID>",
            "aws:SourceArn":"arn:aws:codebuild:<region>:<AWS-account-ID>:project/<project-name>"
         }
      }
      ```

   1. Seleccione **Guardar**.

      Esta política aparece en **Permisos**. La entidad principal es la especificada en **Entidad principal** en el paso 3 de este procedimiento:
      + Si su proyecto utiliza CodeBuild credenciales para extraer una imagen de Amazon ECR, `"codebuild.amazonaws.com"` aparece en **Principios de servicio**.
      + **Si tu proyecto utiliza una imagen de Amazon ECR multicuenta, el ID de la AWS cuenta a la que quieres dar acceso aparece en AWS Cuenta. IDs**

        El siguiente ejemplo de política utiliza tanto CodeBuild las credenciales como una imagen de Amazon ECR multicuenta.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceArn": "arn:aws:codebuild:us-east-1:111122223333:project/MyProject",
                          "aws:SourceAccount": "111122223333"
                      }
                  }
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
      + Si sus proyectos utilizan CodeBuild credenciales y desea que tengan acceso abierto al repositorio de Amazon ECR, puede omitir `Condition` las claves y añadir la siguiente política de ejemplo. CodeBuild 

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "CodeBuildAccessPrincipal",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              },
              {
                  "Sid": "CodeBuildAccessCrossAccount",
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
                  ],
                  "Action": [
                      "ecr:GetDownloadUrlForLayer",
                      "ecr:BatchGetImage",
                      "ecr:BatchCheckLayerAvailability"
                  ]
              }
          ]
      }
      ```

------

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación.

   Si utiliza la AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

   ```
   {
     "name": "amazon-ecr-sample-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/GoSample.zip"
     },
     "artifacts": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-output-bucket",
       "packaging": "ZIP",
       "name": "GoOutputArtifact.zip"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "account-ID.dkr.ecr.region-ID.amazonaws.com/your-Amazon-ECR-repo-name:tag",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Para obtener el artefacto de salida de la compilación, abra el bucket de salida de S3.

1. Descargue el archivo `GoOutputArtifact.zip` en su equipo o instancia local y después extraiga el contenido del archivo `GoOutputArtifact.zip`. En el contenido extraído, obtenga el archivo `hello`.

### Estructura de un proyecto de Go
<a name="ecr-sample-go-project-file-structure"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

```
(root directory name)
├── buildspec.yml
└── hello.go
```

### Archivos de un proyecto de Go
<a name="sample-ecr-go-project-files"></a>

Este ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  install: 
   runtime-versions: 
     golang: 1.13 
  build:
    commands:
      - echo Build started on `date`
      - echo Compiling the Go code
      - go build hello.go 
  post_build:
    commands:
      - echo Build completed on `date`
artifacts:
  files:
    - hello
```

`hello.go` (in `(root directory name)`)

```
package main
import "fmt"

func main() {
  fmt.Println("hello world")
  fmt.Println("1+1 =", 1+1)
  fmt.Println("7.0/3.0 =", 7.0/3.0)
  fmt.Println(true && false)
  fmt.Println(true || false)
  fmt.Println(!true)
}
```

# Ejemplo de Amazon Elastic File System para AWS CodeBuild
<a name="sample-efs"></a>

 Es posible que desee crear sus AWS CodeBuild compilaciones en Amazon Elastic File System, un servicio de archivos compartidos y escalable para instancias de Amazon EC2. La capacidad de almacenamiento con Amazon EFS es elástica, por lo que aumenta o disminuye a medida que se añaden y eliminan archivos. Tiene una interfaz de servicios web sencilla que puede utilizar para crear y configurar sistemas de archivos. También administra automáticamente toda la infraestructura de almacenamiento de archivos, por lo que no tiene que preocuparse por la implementación, aplicación de parches o el mantenimiento de configuraciones del sistema de archivos. Para obtener más información, consulte [¿Qué es Amazon Elastic File System?](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) en la *Guía del usuario de Amazon Elastic File System*. 

 En este ejemplo se muestra cómo configurar un CodeBuild proyecto para que monte y, a continuación, cree una aplicación Java en un sistema de archivos Amazon EFS. Antes de empezar, debe tener una aplicación Java lista para ser compilada y cargada en un depósito de entrada de S3 o en un AWS CodeCommit GitHub repositorio de GitHub Enterprise Server o Bitbucket. 

Los datos en tránsito para su sistema de archivos están cifrados. Para cifrar los datos en tránsito con una imagen distinta, consulte [Cifrado de datos en tránsito](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html). 

**Topics**
+ [Uso AWS CodeBuild con Amazon Elastic File System](#sample-efs-high-level-steps)
+ [Solución de problemas de integración de Amazon EFS](sample-efs-troubleshooting.md)

## Uso AWS CodeBuild con Amazon Elastic File System
<a name="sample-efs-high-level-steps"></a>

En el ejemplo se describen los cuatro pasos de alto nivel necesarios para utilizar Amazon EFS con AWS CodeBuild. Son los siguientes: 

1. Cree una nube privada virtual (VPC) en su AWS cuenta. 

1. Crear un sistema de archivos que utilice esta VPC. 

1. Cree y cree un CodeBuild proyecto que utilice la VPC. El CodeBuild proyecto utiliza lo siguiente para identificar el sistema de archivos:
   +  Un identificador único del sistema de archivos. El identificador se elige al especificar el sistema de archivos en el proyecto de compilación.
   + El ID del sistema de archivos. El ID se muestra cuando ve el sistema de archivos en la consola de Amazon EFS.
   +  Un punto de montaje. Se trata de un directorio en el contenedor Docker que monta el sistema de archivos. 
   + Opciones de montaje. Incluyen detalles sobre cómo montar el sistema de archivos.

1. Revise el proyecto de compilación para asegurarse de que se han generado las variables y los archivos del proyecto correctos.

**nota**  
 Un sistema de archivos creado en Amazon EFS solo es compatible con las plataformas Linux. 

 

**Topics**
+ [Paso 1: Crear una VPC mediante CloudFormation](#sample-efs-create-vpc)
+ [Paso 2: creación de un sistema de archivos de Amazon Elastic File System con su VPC](#sample-efs-create-efs)
+ [Paso 3: Crear un CodeBuild proyecto para usarlo con Amazon EFS](#sample-efs-create-acb)
+ [Paso 4: revisión del proyecto de compilación](#sample-efs-summary)

### Paso 1: Crear una VPC mediante CloudFormation
<a name="sample-efs-create-vpc"></a>

 Cree su VPC con una CloudFormation plantilla. 

1.  Siga las instrucciones de uso [CloudFormationPlantilla de VPC de](cloudformation-vpc-template.md) para CloudFormation crear una VPC. 
**nota**  
 La VPC creada por esta CloudFormation plantilla tiene dos subredes privadas y dos subredes públicas. Solo debe utilizar subredes privadas cuando use AWS CodeBuild para montar el sistema de archivos que ha creado en Amazon EFS. Si utiliza alguna de las subredes públicas, la compilación genera un error. 

1. Inicie sesión en la consola de Amazon VPC Consola de administración de AWS y ábrala en. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1.  Elija la VPC con la que creó. CloudFormation

1. En la pestaña **Description (Descripción)**, anote el nombre de la VPC y su ID. Ambos serán necesarios cuando cree su proyecto de AWS CodeBuild más adelante en este ejemplo. 

### Paso 2: creación de un sistema de archivos de Amazon Elastic File System con su VPC
<a name="sample-efs-create-efs"></a>

 Cree un sistema de archivos sencillo de Amazon EFS de ejemplo utilizando la VPC que creó anteriormente. 

1. Inicie sesión en la consola de Amazon EFS Consola de administración de AWS y ábrala en [ https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/).

1.  Seleccione **Crear sistema de archivos**. 

1.  Desde **VPC**, elija el nombre de VPC que anotó anteriormente en este ejemplo. 

1.  Deje las zonas de disponibilidad asociadas a las subredes seleccionadas. 

1.  Elija **Paso siguiente**. 

1.  En **Añadir etiquetas**, para la clave **Nombre** predeterminada, en **Valor**, introduzca el nombre de su sistema de archivos de Amazon EFS. 

1.  Mantenga **Transmisión por ráfagas** y **Uso general** seleccionados como sus modos de desempeño y rendimiento predeterminados, y luego elija **Paso siguiente**. 

1. En **Configurar acceso de cliente**, seleccione **Paso siguiente**.

1.  Seleccione **Crear sistema de archivos**. 

1.  (Opcional) Le recomendamos añadir una política a su sistema de archivos de Amazon EFS que imponga el cifrado de los datos en tránsito. En la consola de Amazon EFS, elija **Política del sistema de archivos**, elija **Editar**, seleccione la casilla **Aplicar el cifrado en tránsito para todos los clientes** y, a continuación, seleccione **Guardar**.

### Paso 3: Crear un CodeBuild proyecto para usarlo con Amazon EFS
<a name="sample-efs-create-acb"></a>

 Cree un AWS CodeBuild proyecto que utilice la VPC que creó anteriormente en este ejemplo. Al ejecutar la compilación, se monta el sistema de archivos de Amazon EFS que se ha creado anteriormente. A continuación, se almacena el archivo .jar que la aplicación Java ha creado en el directorio de puntos de montaje del sistema de archivos.

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  En el panel de navegación, elija **Build projects (Proyectos de compilación)** y después **Create build project (Crear proyecto de compilación)**. 

1.  En **Nombre del proyecto**, introduzca un nombre para el proyecto. 

1.  En **Source provider (Proveedor de código fuente)**, elija el repositorio que contiene la aplicación Java que desea compilar. 

1.  Introduzca la información, como la URL del repositorio, que se CodeBuild utiliza para localizar la aplicación. Las opciones son diferentes para cada proveedor de código fuente. Para obtener más información, consulte [Choose source provider](create-project.md#create-project-source-provider). 

1.  En **Imagen de entorno**, elija **Imagen administrada**. 

1.  En **Sistema operativo**, elija **Amazon Linux 2**. 

1. En **Tiempo(s) de ejecución**, elija **Estándar**. 

1.  En **Imagen**, elija **aws/codebuild/amazonlinux-x86\$164-standard:4.0**. 

1.  En **Tipo de entorno**, elija **Linux**. 

1.  En **Rol de servicio**, elija **Nuevo rol de servicio**. En Nombre del **rol, introduzca un nombre** para el rol que cree para usted. CodeBuild 

1. Expanda **Configuración adicional**.

1.  Seleccione **Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Habilite este indicador si desea compilar imágenes de Docker o que sus compilaciones tengan privilegios elevados)**.
**nota**  
De forma predeterminada, el daemon de Docker está habilitado para compilaciones sin VPC. Si quiere usar contenedores de Docker para las compilaciones de VPC, consulte [Runtime Privilege and Linux Capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker Docs y habilite el modo privilegiado. Además, Windows no admite el modo privilegiado.

1.  En **VPC**, elija el ID de VPC. 

1.  En **Subredes**, elija una o varias subredes privadas asociadas con su VPC. Debe utilizar subredes privadas en una compilación que monta un sistema de archivos de Amazon EFS. Si utiliza una subred pública, la compilación genera un error. 

1.  En **Security groups (Grupos de seguridad)**, elija el grupo de seguridad predeterminado.

1.  En **File systems (Sistemas de archivos)**, escriba la siguiente información:
   + En **Identifier (Identificador)**, introduzca un identificador único del sistema de archivos. Debe tener menos de 129 caracteres y contener sólo caracteres alfanuméricos y guiones bajos. CodeBuild utiliza este identificador para crear una variable de entorno que identifica el sistema de archivos elástico. El formato de la variable de entorno es `CODEBUILD_<file_system_identifier>`, en mayúsculas. Por ejemplo, si introduce `my_efs`, la variable de entorno es `CODEBUILD_MY_EFS`. 
   + En **ID**, elija el ID del sistema de archivos. 
   + (Opcional) Introduzca un directorio en el sistema de archivos. CodeBuild monta este directorio. Si deja **Directory path (Ruta del directorio)** en blanco, CodeBuild monta todo el sistema de archivos. La ruta es relativa a la raíz del sistema de archivos. 
   + En **Punto de montaje**, introduzca la ruta absoluta del directorio en el contenedor de compilación donde se monta el sistema de archivos. Si este directorio no existe, lo CodeBuild crea durante la compilación. 
   + (Opcional) Introduzca las opciones de montaje. Si deja **las opciones de montaje** en blanco, CodeBuild utiliza sus opciones de montaje predeterminadas:

     ```
     nfsvers=4.1
     rsize=1048576
     wsize=1048576
     hard
     timeo=600
     retrans=2
     ```

     Para obtener más información, consulte [Opciones recomendadas de montaje NFS](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html) en la *Guía del usuario de Amazon Elastic File System*. 

1.  En **Build specification (Especificación de compilación)**, elija **Insert build commands (Insertar comandos de compilación)** y, a continuación, elija **Switch to editor (Cambiar a editor)**. 

1.  Introduzca los siguientes comandos de especificaciones de compilación en el editor. Reemplace `<file_system_identifier>` por el identificador que ha especificado en el paso 17. Use letras mayúsculas (por ejemplo, `CODEBUILD_MY_EFS`).

   ```
   version: 0.2
   phases:
     install:
       runtime-versions:
         java: corretto11    
     build:
       commands:
         - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
   ```

1.  Utilice los valores predeterminados para el resto de opciones y, a continuación, elija **Create build project (Crear proyecto de compilación)**. Cuando la compilación se haya completado, se muestra la página de la consola para su proyecto. 

1.  Seleccione **Iniciar la compilación**. 

### Paso 4: revisión del proyecto de compilación
<a name="sample-efs-summary"></a>



 Una vez creado el AWS CodeBuild proyecto: 
+  Tiene un archivo .jar creado por su aplicación Java que se integra en el sistema de archivos de Amazon EFS, en el directorio del punto de montaje. 
+  Se crea una variable de entorno que identifica el sistema de archivos con el identificador de sistema de archivos que especificó al crear el proyecto. 

 Para obtener más información, consulte [Montaje de sistemas de archivos](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html) en la *Guía del usuario de Amazon Elastic File System*. 

# Solución de problemas de integración de Amazon EFS
<a name="sample-efs-troubleshooting"></a>

Los siguientes son errores que puede encontrar al configurar Amazon EFS con CodeBuild.

**Topics**
+ [CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Permiso denegado.](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Un homólogo ha restablecido la conexión.](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR: Error de EC2 inesperado: UnauthorizedOperation](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Permiso denegado.
<a name="sample-efs-troubleshooting.permission-denied"></a>

No se admite la autorización de IAM para montar Amazon EFS con CodeBuild. Si utiliza una política personalizada del sistema de archivos de Amazon EFS, tendrá que conceder acceso de lectura y escritura a todas las entidades principales de IAM. Por ejemplo:

```
"Principal": {
  "AWS": "*"
}
```

## CLIENT\$1ERROR: no se ha podido montar '127.0.0.1: /'. Un homólogo ha restablecido la conexión.
<a name="sample-efs-troubleshooting.connection-reset"></a>

Existen dos causas posibles para este error:
+ La subred de CodeBuild VPC se encuentra en una zona de disponibilidad diferente a la del destino de montaje de Amazon EFS. Puede resolver este problema añadiendo una subred de VPC en la misma zona de disponibilidad que el destino de montaje de Amazon EFS.
+ El grupo de seguridad no tiene permisos para comunicarse con Amazon EFS. Puede resolver este problema añadiendo una regla de entrada que permita todo el tráfico procedente de la VPC (añada el bloque CIDR principal de la VPC) o del grupo de seguridad en sí.

## VPC\$1CLIENT\$1ERROR: Error de EC2 inesperado: UnauthorizedOperation
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

Este error se produce cuando todas las subredes de la configuración de VPC CodeBuild del proyecto son subredes públicas. Para garantizar la conectividad de la red, debe haber como mínimo una subred privada en la VPC. 

# AWS CodePipeline muestras para CodeBuild
<a name="sample-codepipeline"></a>

En esta sección se describen ejemplos de integraciones entre CodePipeline y CodeBuild.


| Muestra | Description (Descripción) | 
| --- | --- | 
|  [Ejemplos de CodePipeline/CodeBuild integraciones y compilaciones por lotes](#sample-pipeline-batch)  |  Estos ejemplos muestran cómo AWS CodePipeline crear un proyecto de compilación que utilice compilaciones por lotes.  | 
|  [Ejemplo de una CodePipeline/CodeBuild integración con múltiples fuentes de entrada y artefactos de salida](#sample-pipeline-multi-input-output)  |  En este ejemplo se muestra cómo AWS CodePipeline crear un proyecto de compilación que utilice varias fuentes de entrada para crear varios artefactos de salida.  | 

## Ejemplos de CodePipeline/CodeBuild integraciones y compilaciones por lotes
<a name="sample-pipeline-batch"></a>

AWS CodeBuild admite compilaciones por lotes. Los siguientes ejemplos muestran cómo AWS CodePipeline crear un proyecto de compilación que utilice compilaciones por lotes.

Puedes usar un archivo con formato JSON que defina la estructura de tu canalización y luego usarlo con él AWS CLI para crear la canalización. Para obtener más información, consulte [Referencia de la estructura de canalización de AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) en la *Guía del usuario de AWS CodePipeline *.

### Compilación por lotes con artefactos individuales
<a name="sample-pipeline-batch.separate-artifacts"></a>

Utilice el archivo JSON siguiente como ejemplo de una estructura de canalización que crea una compilación por lotes con artefactos individuales. Para habilitar las compilaciones por lotes CodePipeline, defina el `BatchEnabled` parámetro del objeto en`configuration`. `true`

```
{
  "pipeline": {
    "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
    "stages": [
      {
        "name": "Source",
        "actions": [
          {
            "inputArtifacts": [],
            "name": "Source1",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source1"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-input-bucket-name>",
              "S3ObjectKey": "my-source-code-file-name.zip"
            },
            "runOrder": 1
          },
          {
            "inputArtifacts": [],
            "name": "Source2",
            "actionTypeId": {
              "category": "Source",
              "owner": "AWS",
              "version": "1",
              "provider": "S3"
            },
            "outputArtifacts": [
              {
                "name": "source2"
              }
            ],
            "configuration": {
              "S3Bucket": "<my-other-input-bucket-name>",
              "S3ObjectKey": "my-other-source-code-file-name.zip"
            },
            "runOrder": 1
          }
        ]
      },
      {
        "name": "Build",
        "actions": [
          {
            "inputArtifacts": [
              {
                "name": "source1"
              },
              {
                "name": "source2"
              }
            ],
            "name": "Build",
            "actionTypeId": {
              "category": "Build",
              "owner": "AWS",
              "version": "1",
              "provider": "CodeBuild"
            },
            "outputArtifacts": [
              {
                "name": "build1"
              },
              {
                "name": "build1_artifact1"
              },
              {
                "name": "build1_artifact2"
              },
              {
                "name": "build2_artifact1"
              },
              {
                "name": "build2_artifact2"
              }
            ],
            "configuration": {
              "ProjectName": "my-build-project-name",
              "PrimarySource": "source1",
              "BatchEnabled": "true"
            },
            "runOrder": 1
          }
        ]
      }
    ],
    "artifactStore": {
      "type": "S3",
      "location": "<AWS-CodePipeline-internal-bucket-name>"
    },
    "name": "my-pipeline-name",
    "version": 1
  }
}
```

El siguiente es un ejemplo de un archivo CodeBuild buildspec que funcionará con esta configuración de canalización.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
  secondary-artifacts:
    artifact1:
      files:
        - output_file
    artifact2:
      files:
        - output_file
```

Los nombres de los artefactos de salida especificados en el archivo JSON de la canalización deben coincidir con el identificador de las compilaciones y los artefactos definidos en el archivo de especificación de la compilación. La sintaxis es *buildIdentifier* para los artefactos principales y *buildIdentifier* \$1 *artifactIdentifier* para los artefactos secundarios.

Por ejemplo, para el nombre del artefacto de salida`build1`, CodeBuild cargará el artefacto principal de en `build1` la ubicación de. `build1` Para el nombre de salida`build1_artifact1`, CodeBuild cargará el artefacto secundario `artifact1` de `build1` a la ubicación de`build1_artifact1`, y así sucesivamente. Si solo se especifica una ubicación de salida, el nombre debe ser *buildIdentifier* solo.

Una vez creado el archivo JSON, puede crear la canalización. Utilice el AWS CLI para ejecutar el comando **create-pipeline** y pasar el archivo al `--cli-input-json` parámetro. Para obtener más información, consulte [Creación de una canalización (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) en la *Guía del usuario de AWS CodePipeline *. 

### Compilación por lotes con artefactos combinados
<a name="sample-pipeline-batch.combined-artifacts"></a>

Utilice el archivo JSON siguiente como ejemplo de una estructura de canalización que crea una compilación por lotes con artefactos combinados. Para habilitar las compilaciones por lotes CodePipeline, defina el `BatchEnabled` parámetro del `configuration` objeto en. `true` Para combinar los artefactos de compilación en la misma ubicación, defina el parámetro `CombineArtifacts` del objeto `configuration` como `true`.

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-input-bucket-name>",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "<my-other-input-bucket-name>",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "output1 "
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1",
             "BatchEnabled": "true",
             "CombineArtifacts": "true"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "<AWS-CodePipeline-internal-bucket-name>"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

El siguiente es un ejemplo de un archivo CodeBuild buildspec que funcionará con esta configuración de canalización.

```
version: 0.2
batch:
  build-list:
    - identifier: build1
      env:
        compute-type: BUILD_GENERAL1_SMALL
    - identifier: build2
      env:
        compute-type: BUILD_GENERAL1_MEDIUM

phases:
  build:
    commands:
      - echo 'file' > output_file

artifacts:
  files:
    - output_file
```

Si los artefactos combinados están habilitados para la compilación por lotes, solo se permite una salida. CodeBuild combinará los artefactos principales de todas las compilaciones en un único archivo ZIP.

Una vez creado el archivo JSON, puede crear la canalización. Utilice el AWS CLI para ejecutar el comando **create-pipeline** y pasar el archivo al `--cli-input-json` parámetro. Para obtener más información, consulte [Creación de una canalización (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) en la *Guía del usuario de AWS CodePipeline *. 

## Ejemplo de una CodePipeline/CodeBuild integración con múltiples fuentes de entrada y artefactos de salida
<a name="sample-pipeline-multi-input-output"></a>

Un AWS CodeBuild proyecto puede tomar más de una fuente de entrada. También puede crear más de un artefacto de salida. En este ejemplo se muestra cómo AWS CodePipeline crear un proyecto de compilación que utilice varias fuentes de entrada para crear varios artefactos de salida. Para obtener más información, consulte [Ejemplo de varios orígenes de entrada y varios artefactos de salida](sample-multi-in-out.md).

Puedes usar un archivo con formato JSON que defina la estructura de tu canalización y luego usarlo con él AWS CLI para crear la canalización. Utilice el archivo JSON siguiente como ejemplo de una estructura de canalización que crea una compilación con más de un origen de entrada y más de un artefacto de salida. Más adelante en este ejemplo podrá ver cómo dicho archivo especifica las distintas entradas y salidas. *Para obtener más información, consulta la [referencia sobre la estructura de CodePipeline canalización](https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-pipeline-structure.html) en la Guía del AWS CodePipeline usuario.*

```
{
 "pipeline": {
  "roleArn": "arn:aws:iam::account-id:role/my-AWS-CodePipeline-service-role-name",
  "stages": [
    {
      "name": "Source",
      "actions": [
        {
          "inputArtifacts": [],
          "name": "Source1",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source1"
            }
          ],
          "configuration": {
            "S3Bucket": "my-input-bucket-name",
            "S3ObjectKey": "my-source-code-file-name.zip"
          },
          "runOrder": 1
        },
        {
          "inputArtifacts": [],
          "name": "Source2",
          "actionTypeId": {
            "category": "Source",
            "owner": "AWS",
            "version": "1",
            "provider": "S3"
          },
          "outputArtifacts": [
            {
              "name": "source2"
            }
          ],
          "configuration": {
            "S3Bucket": "my-other-input-bucket-name",
            "S3ObjectKey": "my-other-source-code-file-name.zip"
          },
          "runOrder": 1
        }
      ]
    },
    {
      "name": "Build",
      "actions": [
        {
          "inputArtifacts": [
            {
              "name": "source1"
            },
            {
              "name": "source2"
            }
          ],
          "name": "Build",
          "actionTypeId": {
            "category": "Build",
            "owner": "AWS",
            "version": "1",
            "provider": "AWS CodeBuild"
          },
          "outputArtifacts": [
            {
              "name": "artifact1"
            },
            {
              "name": "artifact2"
            }
          ],
          "configuration": {
            "ProjectName": "my-build-project-name",
            "PrimarySource": "source1"
          },
          "runOrder": 1
        }
      ]
    }
  ],
  "artifactStore": {
    "type": "S3",
    "location": "AWS-CodePipeline-internal-bucket-name"
  },
  "name": "my-pipeline-name",
  "version": 1
 }
}
```

 En este archivo JSON: 
+ Debe designar uno de los orígenes de entrada como `PrimarySource`. Esta fuente es el directorio en el que CodeBuild busca y ejecuta el archivo buildspec. La palabra clave `PrimarySource` se usa para especificar la fuente principal en la `configuration` sección de la CodeBuild etapa del archivo JSON. 
+ Cada origen de entrada se instala en su propio directorio. Este directorio se almacena en la variable de entorno integrado `$CODEBUILD_SRC_DIR` para el origen principal y `$CODEBUILD_SRC_DIR_yourInputArtifactName` para todos los demás orígenes. Para la canalización de este ejemplo, los dos directorios de origen de entrada son `$CODEBUILD_SRC_DIR` y `$CODEBUILD_SRC_DIR_source2`. Para obtener más información, consulte [Variables de entorno en los entornos de compilación](build-env-ref-env-vars.md). 
+ Los nombres de los artefactos de salida especificados en el archivo JSON de la canalización deben coincidir con los de los artefactos secundarios definidos en el archivo buildspec. Esta canalización utiliza el archivo buildspec siguiente. Para obtener más información, consulte [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax). 

  ```
  version: 0.2
  
  phases:
    build:
      commands:
        - touch source1_file
        - cd $CODEBUILD_SRC_DIR_source2
        - touch source2_file
  
  artifacts:
    files:
      - '**/*'
    secondary-artifacts:
      artifact1:
        base-directory: $CODEBUILD_SRC_DIR
        files:
          - source1_file
      artifact2:
        base-directory: $CODEBUILD_SRC_DIR_source2
        files:
          - source2_file
  ```

 Una vez creado el archivo JSON, puede crear la canalización. Utilice AWS CLI para ejecutar el comando **create-pipeline** y pasar el archivo al `--cli-input-json` parámetro. Para obtener más información, consulte [Creación de una canalización (CLI)](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-create.html#pipelines-create-cli) en la *Guía del usuario de AWS CodePipeline *. 

# AWS Config muestra con CodeBuild
<a name="how-to-integrate-config"></a>

AWS Config proporciona un inventario de sus AWS recursos y un historial de los cambios de configuración de estos recursos. AWS Config ahora es compatible AWS CodeBuild como AWS recurso, lo que significa que el servicio puede realizar un seguimiento de sus CodeBuild proyectos. Para obtener más información al respecto AWS Config, consulte [¿Qué es AWS Config?](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html) en la *Guía para AWS Config desarrolladores*.

Puedes ver la siguiente información sobre CodeBuild los recursos en la página **de inventario de recursos** de la AWS Config consola:
+ Un cronograma de los cambios CodeBuild de configuración.
+ Detalles de configuración de cada CodeBuild proyecto.
+ Relaciones con otros AWS recursos.
+ Una lista de cambios en sus CodeBuild proyectos.

**Topics**
+ [Úselo CodeBuild con AWS Config](#how-to-integrate-config-run)
+ [Paso 3: Ver AWS CodeBuild los datos en la AWS Config consola](#viewing-config-details)

## Úselo CodeBuild con AWS Config
<a name="how-to-integrate-config-run"></a>

Los procedimientos de este tema muestran cómo configurar AWS Config y buscar CodeBuild proyectos.

**Topics**
+ [Requisitos previos](#how-to-create-a-build-project)
+ [Paso 1: Configurar AWS Config](#setup-config)
+ [Paso 2: Busca AWS CodeBuild proyectos](#lookup-projects)

### Requisitos previos
<a name="how-to-create-a-build-project"></a>

Cree su AWS CodeBuild proyecto. Para obtener instrucciones, consulte [Creación de un proyecto de compilación](create-project.md).

### Paso 1: Configurar AWS Config
<a name="setup-config"></a>
+ [Configuración de AWS Config (consola)](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [Configuración de AWS Config (AWS CLI)](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

**nota**  
Una vez completada la configuración, es posible que pasen hasta 10 minutos antes de que puedas ver AWS CodeBuild los proyectos en la AWS Config consola.

### Paso 2: Busca AWS CodeBuild proyectos
<a name="lookup-projects"></a>

1. Inicie sesión en la consola AWS de administración y abra la AWS Config consola en [https://console.aws.amazon.com/config.](https://console.aws.amazon.com/config) 

1. En la página **de inventario de recursos**, seleccione **AWS CodeBuild Proyecto** en **Tipo de recurso**. Desplázate hacia abajo y selecciona la casilla **CodeBuilddel proyecto**.

1. Elija **Look up (Buscar)**.

1. Después de añadir la lista de CodeBuild proyectos, elige el enlace del nombre del CodeBuild proyecto en la columna **Config timeline**.

## Paso 3: Ver AWS CodeBuild los datos en la AWS Config consola
<a name="viewing-config-details"></a>

Al buscar recursos en la página de **inventario de recursos**, puede elegir el AWS Config cronograma para ver los detalles CodeBuild del proyecto. La página de detalles de un recurso proporciona información sobre la configuración, las relaciones y el número de cambios realizados en dicho recurso. 

Los bloques de la parte superior de la página se denominan colectivamente escala de tiempo. La escala de tiempo muestra la fecha y la hora a las que se realizó el registro.

Para obtener más información, consulta la sección [Visualización de los detalles de configuración en la AWS Config consola](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource-console.html) en la *Guía para AWS Config desarrolladores*.

# Ejemplo de creación de notificaciones para CodeBuild
<a name="sample-build-notifications"></a>

Amazon CloudWatch Events tiene soporte integrado para AWS CodeBuild. CloudWatch Los eventos son una secuencia de eventos del sistema que describen los cambios en sus AWS recursos. Con CloudWatch Events, se escriben reglas declarativas para asociar los eventos de interés con las acciones automatizadas que se van a llevar a cabo. En este ejemplo, se utilizan Amazon CloudWatch Events y Amazon Simple Notification Service (Amazon SNS) para enviar notificaciones de compilación a los suscriptores siempre que las compilaciones se realicen correctamente, fallen, pasen de una fase de creación a otra o cualquier combinación de estos eventos.

**importante**  
Si ejecuta este ejemplo, es posible que se le cobren cargos a su AWS cuenta. Estos incluyen posibles cargos por CodeBuild y por AWS los recursos y acciones relacionados con Amazon CloudWatch y Amazon SNS. Para obtener más información, consulte [CodeBuild los precios, los CloudWatch](https://aws.amazon.com/codebuild/pricing) [precios de Amazon](https://aws.amazon.com/cloudwatch/pricing) y los precios de [Amazon SNS.](https://aws.amazon.com/sns/pricing)

**Topics**
+ [Ejecución del ejemplo de notificaciones de compilación](#sample-build-notifications-running)
+ [Referencia del formato de entrada de las notificaciones de compilación](sample-build-notifications-ref.md)

## Ejecución del ejemplo de notificaciones de compilación
<a name="sample-build-notifications-running"></a>

Utilice el siguiente procedimiento para ejecutar el ejemplo de notificaciones de compilación.

**Para ejecutar este ejemplo**

1. Si ya tiene un tema configurado y suscrito a Amazon SNS que desee utilizar para este ejemplo, vaya directamente al paso 4. De lo contrario, si utiliza un usuario de IAM en lugar de una cuenta AWS raíz o un usuario administrador para trabajar con Amazon SNS, añada la siguiente declaración (*\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1*entre *\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1* y) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda utilizar una cuenta AWS raíz. Esta instrucción permite visualizar, crear, suscribir y probar el envío de notificaciones a temas de Amazon SNS. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política existente.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "sns:CreateTopic",
                   "sns:GetTopicAttributes",
                   "sns:List*",
                   "sns:Publish",
                   "sns:SetTopicAttributes",
                   "sns:Subscribe"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.  
Para obtener más información, consulte [Edición de políticas administradas por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) o la sección "Para editar o eliminar una política insertada de un grupo, un usuario o un rol" de [Uso de políticas insertadas (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) en la *Guía del usuario de IAM*.

1. Cree o identifique un tema en Amazon SNS. AWS CodeBuild usa CloudWatch Events para enviar notificaciones de compilación sobre este tema a través de Amazon SNS. 

   Para crear un tema:

   1. [Abra la consola de Amazon SNS en /sns. https://console.aws.amazon.com](https://console.aws.amazon.com/sns)

   1. Seleccione **Crear tema**. 

   1. En el cuadro de diálogo **Create new topic (Crear un nuevo tema)**, en **Topic name (Nombre del tema)**, escriba un nombre para el tema (por ejemplo, **CodeBuildDemoTopic**). Si elige otro nombre, sustitúyalo en todo este ejemplo. 

   1. Seleccione **Crear tema**.

   1. En la CodeBuildDemoTopic página **Detalles del tema:**, copie el valor del **ARN del tema**. Necesitará este valor para el siguiente paso. 

        
![\[El valor del ARN del tema.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/topic-arn.png)

      

   Para obtener más información, consulte [Crear un tema](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) en la *Guía para desarrolladores de Amazon SNS*.

1. Suscriba a uno o varios destinatarios al tema para que reciban notificaciones por correo electrónico. 

   Para suscribir a un destinatario a un tema:

   1. Con la consola de Amazon SNS abierta del paso anterior, en el panel de navegación, seleccione **Suscripciones** y, a continuación, elija **Crear suscripción**.

   1. En **Create subscription (Crear suscripción)**, en **Topic ARN (ARN del tema)**, pegue el ARN del tema que copió en el paso anterior.

   1. En **Protocolo**, elige **Correo electrónico**.

   1. En **Punto de conexión**, escriba la dirección de correo electrónico completa del destinatario. 

        
![\[La configuración de la suscripción.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/create-subscription.png)

      

   1. Elija **Create Subscription**.

   1. Amazon SNS envía un correo electrónico de confirmación de suscripción al destinatario. Para empezar a recibir notificaciones por correo electrónico, el destinatario debe elegir el enlace **Confirm subscription** en el mensaje de confirmación de la suscripción. Cuando el destinatario hace clic en el enlace, si se ha suscrito correctamente, Amazon SNS muestra un mensaje de confirmación en el navegador web.

   Para obtener más información, consulte [Suscribirse a un tema](https://docs.aws.amazon.com/sns/latest/dg/SubscribeTopic.html) en la *Guía del desarrollador de Amazon SNS*.

1. Si utiliza un usuario en lugar de una cuenta AWS raíz o un usuario administrador para trabajar con CloudWatch Events, añada la siguiente declaración (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* y*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda utilizar una cuenta AWS raíz. Esta declaración se utiliza para permitir al usuario trabajar con CloudWatch eventos. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política existente.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "events:*",
                   "iam:PassRole"
               ],
               "Resource": "arn:aws:iam::*:role/Service*"
           }
       ]
   }
   ```

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.  
Para obtener más información, consulte [Edición de políticas administradas por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html#edit-managed-policy-console) o la sección "Para editar o eliminar una política insertada de un grupo, un usuario o un rol" de [Uso de políticas insertadas (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) en la *Guía del usuario de IAM*.

1. Cree una regla en CloudWatch Eventos. Para ello, abre la CloudWatch consola en [https://console.aws.amazon.com/cloudwatch.](https://console.aws.amazon.com/cloudwatch)

1. En el panel de navegación, bajo **Events**, elija **Rules** y después elija **Create rule**. 

1. En la página **Step 1: Create rule (Paso 1: Crear regla)**, las opciones **Event Pattern (Patrón de eventos)** y **Build event pattern to match events by service (Crear un patrón de eventos para encontrar coincidencias de eventos por servicio)** ya deberían estar seleccionadas. 

1. En **Nombre de servicio**, elija **CodeBuild**. En **Event Type (Tipo de evento)**, la opción **All Events (Todos los eventos)** ya debería estar seleccionada.

1. El código siguiente debería aparecer en **Event Pattern Preview (Vista previa del patrón de eventos)**:

   ```
   {
     "source": [ 
       "aws.codebuild"
     ]
   }
   ```

1. Elija **Edit (Editar)** y sustituya el código de **Event Pattern Preview (Vista previa de patrón del eventos)** por uno de los dos patrones de reglas siguientes.

   Este primer patrón de reglas desencadena un evento siempre que se inicia o se completa una compilación en los proyectos de compilación especificados en AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build State Change"
     ],
     "detail": {
       "build-status": [
         "IN_PROGRESS",
         "SUCCEEDED", 
         "FAILED",
         "STOPPED" 
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   En la regla anterior, realice los siguientes cambios de código según sea necesario.
   + Para desencadenar un evento cuando se inicia o se completa una compilación, deje todos los valores tal y como se muestran en la matriz `build-status` o quite completamente la matriz `build-status`. 
   + Para activar un evento solo cuando se complete una compilación, elimine `IN_PROGRESS` de la matriz `build-status`. 
   + Para activar un evento solo cuando se inicie una compilación, elimine todos los valores a excepción de `IN_PROGRESS` de la matriz `build-status`.
   + Para activar eventos para todos los proyectos de compilación, elimine toda la matriz `project-name`.
   + Para activar eventos solo para proyectos de compilación individuales, especifique el nombre de cada proyecto de compilación en la matriz `project-name`. 

   Este segundo patrón de reglas desencadena un evento siempre que una compilación pasa de una fase a otra en los proyectos de compilación especificados en AWS CodeBuild.

   ```
   {
     "source": [ 
       "aws.codebuild"
     ], 
     "detail-type": [
       "CodeBuild Build Phase Change" 
     ],
     "detail": {
       "completed-phase": [
         "SUBMITTED",
         "PROVISIONING",
         "DOWNLOAD_SOURCE",
         "INSTALL",
         "PRE_BUILD",
         "BUILD",
         "POST_BUILD",
         "UPLOAD_ARTIFACTS",
         "FINALIZING"
       ],
       "completed-phase-status": [
         "TIMED_OUT",
         "STOPPED",
         "FAILED", 
         "SUCCEEDED",
         "FAULT",
         "CLIENT_ERROR"
       ],
       "project-name": [
         "my-demo-project-1",
         "my-demo-project-2"
       ]
     }  
   }
   ```

   En la regla anterior, realice los siguientes cambios de código según sea necesario.
   + Para desencadenar un evento con cada cambio de fase de compilación (lo que podría enviar hasta nueve notificaciones por cada compilación), deje todos los valores tal y como se muestran en la matriz `completed-phase` o elimine completamente la matriz `completed-phase`.
   + Para activar eventos solo para cambios de fase de compilación individuales, elimine el nombre de cada fase de compilación en la matriz `completed-phase` para el que no desee que se active un evento.
   + Para activar un evento para cada cambio de estado de fase de compilación, deje todos los valores tal y como se muestran en la matriz `completed-phase-status` o elimine completamente la matriz `completed-phase-status`.
   + Para activar eventos solo para cambios de estado de fase de compilación individuales, elimine el nombre de cada estado de fase de compilación en la matriz `completed-phase-status` para el que no desee que se active un evento.
   + Para activar eventos para todos los proyectos de compilación, elimine la matriz `project-name`.
   + Para activar eventos para proyectos de compilación individuales, especifique el nombre de cada proyecto de compilación en la matriz `project-name`. 

   Para obtener más información sobre los patrones de eventos, consulta [Patrones de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/filtering-examples-structure.html) en la Guía del EventBridge usuario de Amazon.

   Para obtener más información sobre el filtrado con patrones de eventos, consulta [Filtrado basado en contenido con patrones de eventos](https://docs.aws.amazon.com/eventbridge/latest/userguide/content-filtering-with-event-patterns.html) en la Guía del EventBridge usuario de Amazon.
**nota**  
Si desea desencadenar eventos con los cambios de estado de compilación y los cambios de fase de compilación, debe crear dos reglas distintas: una para los cambios de estado y otra para los cambios de fase. Si intenta combinar las dos reglas en una sola, la regla combinada podría producir resultados inesperados o dejar de funcionar.

   Cuando haya terminado de reemplazar el código, seleccione **Save**.

1. En **Targets**, seleccione **Add target**. 

1. En la lista de destinos, elija **SNS topic**. 

1. En **Topic**, elija el tema que identificó o creó anteriormente. 

1. Expanda **Configure input**, a continuación, elija **Input Transformer**. 

1. En el cuadro **Input Path (Ruta de entrada)**, escriba una de las siguientes rutas de entrada.

   Si en una regla el valor de `detail-type` es `CodeBuild Build State Change`, escriba lo siguiente.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","build-status":"$.detail.build-status"}
   ```

   Si en una regla el valor de `detail-type` es `CodeBuild Build Phase Change`, escriba lo siguiente.

   ```
   {"build-id":"$.detail.build-id","project-name":"$.detail.project-name","completed-phase":"$.detail.completed-phase","completed-phase-status":"$.detail.completed-phase-status"}
   ```

   Para obtener otros tipos de información, consulte la [Referencia del formato de entrada de las notificaciones de compilación](sample-build-notifications-ref.md).

1. En el cuadro **Input Template (Plantilla de entrada)**, escriba una de las siguientes plantillas de entrada.

   Si en una regla el valor de `detail-type` es `CodeBuild Build State Change`, escriba lo siguiente.

   ```
   "Build '<build-id>' for build project '<project-name>' has reached the build status of '<build-status>'."
   ```

   Si en una regla el valor de `detail-type` es `CodeBuild Build Phase Change`, escriba lo siguiente.

   ```
   "Build '<build-id>' for build project '<project-name>' has completed the build phase of '<completed-phase>' with a status of '<completed-phase-status>'."
   ```

1. Seleccione **Configurar los detalles**.

1. En la página **Step 2: Configure rule details (Página 2: Configurar detalles de la regla)**, escriba el nombre y una descripción opcional. En **State (Estado)**, deje seleccionado el valor **Enabled (Habilitado)**.

1. Seleccione **Creación de regla**. 

1. Cree proyectos de compilación, ejecute las compilaciones y consulte información sobre la compilación.

1. Confirma que ahora CodeBuild se están enviando correctamente las notificaciones de compilación. Por ejemplo, compruebe si hay correos electrónicos de notificación de compilación en su bandeja de entrada.

Para cambiar el comportamiento de una regla, en la CloudWatch consola, elige la regla que quieres cambiar, selecciona **Acciones** y, a continuación, selecciona **Editar**. Realice los cambios que correspondan en la regla y elija **Configure details (Configurar detalles)** y **Update rule (Actualizar regla)**.

Para dejar de usar una regla para enviar notificaciones de compilación, en la CloudWatch consola, elige la regla que quieres dejar de usar, selecciona **Acciones** y, a continuación, selecciona **Inhabilitar**.

Para eliminar una regla por completo, en la CloudWatch consola, elige la regla que quieres eliminar, selecciona **Acciones** y, a continuación, selecciona **Eliminar**.

# Referencia del formato de entrada de las notificaciones de compilación
<a name="sample-build-notifications-ref"></a>

CloudWatch entrega las notificaciones en formato JSON.

Las notificaciones de cambio de estado de compilación usan el siguiente formato:

```
{
  "version": "0",
  "id": "c030038d-8c4d-6141-9545-00ff7b7153EX",
  "detail-type": "CodeBuild Build State Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:28Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "build-status": "SUCCEEDED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
         {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]
    },
    "current-phase": "COMPLETED",
    "current-phase-context": "[]",
    "version": "1"
  }
}
```

Las notificaciones de cambio de fase de compilación usan el siguiente formato:

```
{
  "version": "0",
  "id": "43ddc2bd-af76-9ca5-2dc7-b695e15adeEX",
  "detail-type": "CodeBuild Build Phase Change",
  "source": "aws.codebuild",
  "account": "123456789012",
  "time": "2017-09-01T16:14:21Z",
  "region": "us-west-2",
  "resources":[
    "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX"
  ],
  "detail":{
    "completed-phase": "COMPLETED",
    "project-name": "my-sample-project",
    "build-id": "arn:aws:codebuild:us-west-2:123456789012:build/my-sample-project:8745a7a9-c340-456a-9166-edf953571bEX",
    "completed-phase-context": "[]",
    "additional-information": {
      "artifact": {
        "md5sum": "da9c44c8a9a3cd4b443126e823168fEX",
        "sha256sum": "6ccc2ae1df9d155ba83c597051611c42d60e09c6329dcb14a312cecc0a8e39EX",
        "location": "arn:aws:s3:::codebuild-123456789012-output-bucket/my-output-artifact.zip"
      },
      "environment": {
        "image": "aws/codebuild/standard:5.0",
        "privileged-mode": false,
        "compute-type": "BUILD_GENERAL1_SMALL",
        "type": "LINUX_CONTAINER",
        "environment-variables": []
      },
      "timeout-in-minutes": 60,
      "build-complete": true,
      "initiator": "MyCodeBuildDemoUser",
      "build-start-time": "Sep 1, 2017 4:12:29 PM",
      "source": {
        "location": "codebuild-123456789012-input-bucket/my-input-artifact.zip",
        "type": "S3"
      },
      "logs": {
        "group-name": "/aws/codebuild/my-sample-project",
        "stream-name": "8745a7a9-c340-456a-9166-edf953571bEX",
        "deep-link": "https://console.aws.amazon.com/cloudwatch/home?region=us-west-2#logEvent:group=/aws/codebuild/my-sample-project;stream=8745a7a9-c340-456a-9166-edf953571bEX"
      },
      "phases": [
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:12:29 PM",
          "duration-in-seconds": 0,
          "phase-type": "SUBMITTED",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:12:29 PM",
          "end-time": "Sep 1, 2017 4:13:05 PM",
          "duration-in-seconds": 36,
          "phase-type": "PROVISIONING",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:05 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 4,
          "phase-type": "DOWNLOAD_SOURCE",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "INSTALL",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:13:10 PM",
          "duration-in-seconds": 0,
          "phase-type": "PRE_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:13:10 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 70,
          "phase-type": "BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "POST_BUILD",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:21 PM",
          "duration-in-seconds": 0,
          "phase-type": "UPLOAD_ARTIFACTS",
          "phase-status": "SUCCEEDED"
        },
        {
          "phase-context": [],
          "start-time": "Sep 1, 2017 4:14:21 PM",
          "end-time": "Sep 1, 2017 4:14:26 PM",
          "duration-in-seconds": 4,
          "phase-type": "FINALIZING",
          "phase-status": "SUCCEEDED"
        },
        {
          "start-time": "Sep 1, 2017 4:14:26 PM",
          "phase-type": "COMPLETED"
        }
      ]  
    },
    "completed-phase-status": "SUCCEEDED",
    "completed-phase-duration-seconds": 4,
    "version": "1",
    "completed-phase-start": "Sep 1, 2017 4:14:21 PM",
    "completed-phase-end": "Sep 1, 2017 4:14:26 PM"
  }
}
```

# Cree una muestra de insignias con CodeBuild
<a name="sample-build-badges"></a>

AWS CodeBuild ahora admite el uso de insignias de compilación, que proporcionan una imagen (*insignia*) integrable y generada dinámicamente que muestra el estado de la última compilación de un proyecto. Se puede acceder a esta imagen a través de una URL disponible públicamente generada para tu proyecto. CodeBuild Esto permite a cualquier persona ver el estado de un CodeBuild proyecto. Las insignias de compilación no contienen información de seguridad, por lo que no requieren autenticación.

**Topics**
+ [Creación de un proyecto de compilación con insignias de compilación](#sample-build-badges-request-running)
+ [Accede a las insignias de AWS CodeBuild compilación](access-badges.md)
+ [Publica insignias de CodeBuild construcción](publish-badges.md)
+ [CodeBuild estados de insignias](badge-statuses.md)

## Creación de un proyecto de compilación con insignias de compilación
<a name="sample-build-badges-request-running"></a>

Utilice uno de los siguientes procedimientos para crear un proyecto de compilación con insignias de compilación habilitadas. Puede utilizar AWS CLI o el Consola de administración de AWS.

**Para crear un proyecto de compilación con insignias de compilación habilitadas (AWS CLI)**
+ Para obtener información acerca de cómo crear un proyecto de compilación, consulte [Crear un proyecto de compilación (AWS CLI)](create-project.md#create-project-cli). Para incluir las insignias de construcción en su AWS CodeBuild proyecto, debe especificarlas *badgeEnabled* con un valor de`true`.

**Para crear un proyecto de compilación con insignias de compilación habilitadas (consola)**

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Si aparece una página de CodeBuild información, elija **Crear** proyecto de compilación. De lo contrario, en el panel de navegación, expanda **Compilar**, elija **Proyectos de compilación** y, a continuación, elija **Crear proyecto de compilación**. 

1. En **Project name (Nombre de proyecto)**, escriba un nombre para este proyecto de compilación. Los nombres de los proyectos de compilación deben ser únicos en cada AWS cuenta. También puede introducir una descripción opcional del proyecto de compilación para ayudar a otros usuarios a entender para qué se utiliza el proyecto.

1. En **Source (Código fuente)**, para **Source provider (Proveedor de código fuente)**, elija el tipo de proveedor de código fuente y, a continuación, realice alguna de las siguientes operaciones:
**nota**  
 CodeBuild no admite insignias de compilación con el proveedor de código fuente de Amazon S3. Como AWS CodePipeline utiliza Amazon S3 para las transferencias de artefactos, las insignias de compilación no se admiten en proyectos de compilación que formen parte de una canalización creada en. CodePipeline 
   + Si eligió **CodeCommit**, en **Repository (Repositorio)**, elija el nombre del repositorio. Seleccione **Habilitar insignia de compilación** para convertir el estado de compilación del proyecto en visible e incrustable.
   + Si lo desea **GitHub**, siga las instrucciones para conectarse (o volver a conectarse) con. GitHub En la página GitHub **Autorizar la solicitud**, en **Acceso a la organización**, selecciona **Solicitar acceso** junto a cada repositorio AWS CodeBuild al que quieras acceder. Después de elegir **Authorize application (Autorizar aplicación)**, de vuelta en la consola de AWS CodeBuild , para **Repository (Repositorio)**, elija el nombre del repositorio que contiene el código fuente. Seleccione **Habilitar insignia de compilación** para convertir el estado de compilación del proyecto en visible e incrustable.
   + Si eligió **Bitbucket**, siga las instrucciones para conectarse (o volver a conectarse) a Bitbucket. En la página **Confirm access to your account** de Bitbucket, para **Organization access**, elija **Grant access**. Tras seleccionar **Conceder acceso**, en la AWS CodeBuild consola, en **Repositorio**, elige el nombre del repositorio que contiene el código fuente. Seleccione **Habilitar insignia de compilación** para convertir el estado de compilación del proyecto en visible e incrustable.
**importante**  
La actualización del código fuente del proyecto podría afectar a la precisión de las insignias de compilación del proyecto.

1. En **Environment (Entorno)**:

   En **Environment image (Imagen del entorno)**, realice alguna de las siguientes operaciones:
   + Para usar una imagen de Docker gestionada por AWS CodeBuild, selecciona **Imagen gestionada** y, a continuación, selecciona **Sistema operativo**, **Tiempo de ejecución**, **Imagen** y **Versión de la imagen**. Realice una selección en **Environment type (Tipo de entorno)** si está disponible.
   + Para usar otra imagen de Docker, elija **Custom image (Imagen personalizada)**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. Si elige **Otro registro**, en **URL de registro externo**, introduzca el nombre y etiqueta de la imagen de Docker en Docker Hub, usando el formato `docker repository/docker image name`. Si elige **Amazon ECR**, utilice el **repositorio de Amazon ECR** y la imagen de **Amazon ECR para elegir la imagen** de Docker en su cuenta. AWS 
   + Para usar una imagen de Docker privada, elija **Imagen personalizada**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. En **Image registry (Registro de imagen)**, elija **Other registry (Otro registro)** y, a continuación, introduzca el ARN de las credenciales para su imagen de Docker privada. Es necesario crear las credenciales con Secrets Manager. Para obtener más información, consulte [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) en la *Guía del usuario de AWS Secrets Manager *.

1. En **Service role (Rol de servicio)**, realice una de las operaciones siguientes:
   + **Si no tiene un rol de CodeBuild servicio, elija Nuevo rol de servicio.** Escriba un nombre para el nuevo rol en el campo **Role Name**.
   + Si tiene un rol CodeBuild de servicio, elija el **rol de servicio existente**. En **ARN de rol**, seleccione el rol de servicio.
**nota**  
Cuando utilizas la consola para crear o actualizar un proyecto de compilación, puedes crear un rol de CodeBuild servicio al mismo tiempo. De forma predeterminada, el rol funciona solamente con ese proyecto de compilación. Si utiliza la consola para asociar este rol de servicio a otro proyecto de compilación, el rol se actualizará para que funcione con el otro proyecto de compilación. Un rol de servicio puede funcionar con hasta diez proyectos de compilación.

1. En **Archivo de especificación de compilación**, realice alguna de las operaciones siguientes:
   + Seleccione **Usar un archivo de especificaciones de compilación** para utilizar el archivo buyildspec.yml que figura en el directorio raíz del código fuente.
   + Elija **Insertar comandos de compilación** para usar la consola para insertar comandos de compilación.

   Para obtener más información, consulte la [Referencia de la especificación de compilación](build-spec-ref.md).

1. En **Artifacts (Artefactos)**, en **Type (Tipo)**, realice una de las siguientes operaciones:
   + Si no desea crear ningún artefacto de salida de la compilación, elija **No artifacts (Sin artefactos)**.
   + Para almacenar la salida de la compilación en un bucket de S3, seleccione **Amazon S3** y, a continuación, haga lo siguiente:
     + Si desea utilizar su nombre de proyecto para el archivo ZIP o carpeta de salida de la compilación, deje en blanco **Nombre**. De lo contrario, escriba el nombre. De forma predeterminada, el nombre del artefacto es el nombre del proyecto. Si desea usar otro nombre, escríbalo en el cuadro de nombre de artefactos. Si desea producir un archivo ZIP, incluya la extensión zip.
     + En **Bucket name (Nombre del bucket)**, seleccione el nombre del bucket de salida.
     + Si eligió **Insert build commands (Insertar comandos de compilación)** anteriormente en este procedimiento, en **Output files (Archivos de salida)**, escriba las ubicaciones de los archivos de la compilación que desea incluir en el archivo ZIP o carpeta de salida de la compilación. Si hay varias ubicaciones, separe cada una de las ubicaciones con una coma (por ejemplo, `appspec.yml, target/my-app.jar`). Para obtener más información, consulte la descripción de `files` en [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax).

1. Expanda **Additional configuration (Configuración adicional)** y elija las opciones que correspondan.

1. Elija **Crear el proyecto de compilación**. En la página **Review (Revisar)**, elija **Start build (Comenzar compilación)** para ejecutar la compilación.

# Accede a las insignias de AWS CodeBuild compilación
<a name="access-badges"></a>

Puedes usar la AWS CodeBuild consola o la AWS CLI para acceder a las insignias de construcción.
+ En la CodeBuild consola, en la lista de proyectos de construcción, en la columna **Nombre**, elija el enlace que corresponda al proyecto de construcción. En la *project-name* página **Crear proyecto:**, en **Configuración**, selecciona **Copiar la URL de la insignia**. Para obtener más información, consulte [Ver los detalles de un proyecto de compilación (consola)](view-project-details.md#view-project-details-console).
+ En AWS CLI, ejecute el `batch-get-projects` comando. La URL de insignia de compilación se incluye en la sección de salida de detalles del entorno del proyecto. Para obtener más información, consulte [Ver los detalles de un proyecto de compilación (AWS CLI)](view-project-details.md#view-project-details-cli).

La URL de la solicitud de la insignia de compilación se genera con una ramificación común predeterminada, pero es posible especificar cualquier ramificación del repositorio de fuentes que haya usado para ejecutar una compilación. Por ejemplo:

```
https://codebuild.us-east-1.amazon.com/badges?uuid=...&branch=<branch>
```

También es posible especificar una etiqueta del repositorio de origen sustituyendo el parámetro `branch` por el parámetro `tag` en la URL de la insignia. Por ejemplo: 

```
https://codebuild.us-east-1.amazon.com/badges?uuid=...&tag=<tag>
```

# Publica insignias de CodeBuild construcción
<a name="publish-badges"></a>

Es posible mostrar el estado de la última compilación en un archivo de marcado utilizando la URL de la insignia de compilación en una imagen de marcado. Esto resulta útil para mostrar el estado de la compilación más reciente del archivo readme.md del repositorio de código fuente (por ejemplo, o). GitHub CodeCommit Por ejemplo:

```
![](<build badge URL>)
```

# CodeBuild estados de insignias
<a name="badge-statuses"></a>

La insignia de CodeBuild construcción puede tener uno de los siguientes estados.
+ **PASSING** La compilación más reciente en la ramificación especificada se ha realizado correctamente. 
+ **FAILING** Se ha agotado el tiempo de espera, se ha producido un error o se ha detenido la compilación más reciente en la ramificación especificada.
+ **IN\$1PROGRESS** La compilación más reciente en la ramificación especificada está en curso.
+ **UNKNOWN** El proyecto aún no ha ejecutado una compilación en la ramificación especificada o en ninguna otra. Además, la característica de insignia de compilación podría estar deshabilitada.

# «Informe de prueba utilizando la AWS CLI» muestra
<a name="sample-test-report-cli"></a>

Las pruebas que especifique en su archivo buildspec se ejecutan durante la compilación. En este ejemplo, se muestra cómo utilizarlos AWS CLI para incorporar las pruebas en las versiones integradas. CodeBuild Puede utilizarla JUnit para crear pruebas unitarias o puede utilizar otra herramienta para crear pruebas de configuración. Después, puede evaluar los resultados de las pruebas para solucionar problemas u optimizar la aplicación. 

Puede usar la CodeBuild API o la AWS CodeBuild consola para acceder a los resultados de las pruebas. En este ejemplo se muestra cómo configurar el informe para que los resultados de las pruebas se exporten a un bucket de S3. 

**Topics**
+ [Ejecución del ejemplo para probar un informe](#sample-test-report-cli-run)

## Ejecución del ejemplo para probar un informe
<a name="sample-test-report-cli-run"></a>

Realice los siguientes pasos a fin de ejecutar el ejemplo para probar un informe.

**Topics**
+ [Requisitos previos](#sample-test-report-cli-prerequisites)
+ [Paso 1: creación de un grupo de informes](#sample-test-report-cli-create-report)
+ [Paso 2: configuración de un proyecto con un grupo de informes](#sample-test-report-cli-create-project-with-report)
+ [Paso 3: ejecución y visualización de resultados de un informe](#sample-test-report-cli-run-and-view-report-results)

### Requisitos previos
<a name="sample-test-report-cli-prerequisites"></a>
+ Cree los casos de prueba. Esta muestra se escribe bajo el supuesto de que tiene casos de prueba para incluirlos en su informe de pruebas de muestra. Especifique la ubicación de los archivos de prueba en el archivo buildspec. 

  Se admiten los siguientes formatos de archivo de informe de prueba:
  + Cucumber JSON (.json)
  + JUnit XML (.xml)
  + NUnit XML (.xml)
  + NUnit3 XML (.xml)
  + TestNG XML (.xml)
  + Visual Studio TRX (.trx)
  + Visual Studio TRX XML (.xml)

  Cree sus casos de prueba con cualquier marco de pruebas que pueda crear archivos de informes en uno de estos formatos (por ejemplo, el JUnit complemento Surefire, TestNG o Cucumber).
+ Cree un bucket de S3 y anote su nombre. Para obtener más información, consulte [¿Cómo puedo crear un bucket de S3?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html) en la *Guía del usuario de Amazon S3*. 
+ Cree un rol de IAM y anote su ARN. Necesita el ARN cuando cree su proyecto de compilación. 
+ Si el rol no tiene los permisos siguientes, añádalos. 

  ```
  {
      "Effect": "Allow",
      "Resource": [
          "*"
      ],
      "Action": [
          "codebuild:CreateReportGroup",
          "codebuild:CreateReport",
          "codebuild:UpdateReport",
          "codebuild:BatchPutTestCases"
      ]
  }
  ```

   Para obtener más información, consulte [Permisos para las operaciones de informes de pruebas](test-permissions.md#test-permissions-related-to-reporting). 

### Paso 1: creación de un grupo de informes
<a name="sample-test-report-cli-create-report"></a>

1. Cree un archivo denominado `CreateReportGroupInput.json`. 

1. Cree una carpeta en el bucket de S3 donde se exportarán los resultados de las pruebas. 

1. Copie lo siguiente en `CreateReportGroupInput.json`. Para `<bucket-name>`, use el nombre del bucket de S3. Para `<path-to-folder>`, escriba la ruta de acceso a la carpeta en el bucket de S3. 

   ```
   {
     "name": "<report-name>",
     "type": "TEST",
     "exportConfig": {
       "exportConfigType": "S3",
       "s3Destination": {
         "bucket": "<bucket-name>",
         "path": "<path-to-folder>",
         "packaging": "NONE"
       }
     }
   }
   ```

1. Ejecute el siguiente comando en el directorio que contiene `CreateReportGroupInput.json`:

   ```
   aws codebuild create-report-group --cli-input-json file://CreateReportGroupInput.json
   ```

   El resultado es similar al siguiente. Anote el ARN de `reportGroup`. Se utiliza al crear un proyecto que utiliza este grupo de informes.

   ```
   {
     "reportGroup": {
       "arn": "arn:aws:codebuild:us-west-2:123456789012:report-group/<report-name>",
       "name": "<report-name>",
       "type": "TEST",
       "exportConfig": {
         "exportConfigType": "S3",
         "s3Destination": {
           "bucket": "<s3-bucket-name>",
           "path": "<folder-path>",
           "packaging": "NONE",
           "encryptionKey": "arn:aws:kms:us-west-2:123456789012:alias/aws/s3"
         }
       },
       "created": 1570837165.885,
       "lastModified": 1570837165.885
     }
   }
   ```

### Paso 2: configuración de un proyecto con un grupo de informes
<a name="sample-test-report-cli-create-project-with-report"></a>

Para ejecutar un informe, primero debe crear un proyecto de CodeBuild compilación que esté configurado con su grupo de informes. Los casos de prueba especificados para su grupo de informes se ejecutan cuando se ejecuta una compilación. 

1. Cree un archivo buildspec denominado `buildspec.yml`. 

1. Utilice el siguiente código YAML como plantilla para su archivo `buildspec.yml`. Asegúrese de incluir los comandos que ejecutan las pruebas. En la sección `reports`, especifique los archivos que contienen los resultados de los casos de prueba. Estos archivos almacenan los resultados de las pruebas a los que puede acceder CodeBuild. Caducan 30 días después de su creación. Estos archivos son distintos de los archivos de resultados de casos de prueba sin procesar que se exportan a un bucket de S3.

   ```
   version: 0.2
       phases:
       install:
           runtime-versions:
               java: openjdk8
       build:
         commands:
           - echo Running tests 
           - <enter commands to run your tests>
           
       reports:
         <report-name-or-arn>: #test file information
         files:
           - '<test-result-files>'
         base-directory: '<optional-base-directory>'
         discard-paths: false #do not remove file paths from test result files
   ```
**nota**  
En lugar del ARN de un grupo de informes existente, también puede especificar un nombre para un grupo de informes que no se haya creado. Si especifica un nombre en lugar de un ARN, CodeBuild crea un grupo de informes cuando ejecuta una compilación. Su nombre contiene el nombre de proyecto y el nombre especificado en el archivo buildspec en este formato: `project-name-report-group-name`. Para obtener más información, consulte [Creación de informes de pruebas](report-create.md) y [Nomenclatura de grupos de informes](test-report-group-naming.md). 

1. Cree un archivo denominado `project.json`. Este archivo contiene la entrada para el comando **create-project**. 

1. Copie el siguiente JSON en `project.json`. Para `source`, introduzca el tipo y la ubicación del repositorio que contiene los archivos de origen. Para `serviceRole`, especifique el ARN del rol que está utilizando. 

   ```
   {
     "name": "test-report-project",
     "description": "sample-test-report-project",
     "source": {
       "type": "CODECOMMIT|CODEPIPELINE|GITHUB|S3|BITBUCKET|GITHUB_ENTERPRISE|NO_SOURCE",
       "location": "<your-source-url>"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "cache": {
       "type": "NO_CACHE"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "small"
     },
     "serviceRole": "arn:aws:iam::<your-aws-account-id>:role/service-role/<your-role-name>"
   }
   ```

1. Ejecute el siguiente comando en el directorio que contiene `project.json`: De este modo se crea un proyecto llamado `test-project`. 

   ```
   aws codebuild create-project --cli-input-json file://project.json
   ```

### Paso 3: ejecución y visualización de resultados de un informe
<a name="sample-test-report-cli-run-and-view-report-results"></a>

En esta sección, se ejecuta una compilación del proyecto creado anteriormente. Durante el proceso de creación, CodeBuild crea un informe con los resultados de los casos de prueba. El informe se incluye en el grupo de informes especificado. 

1. Para iniciar una compilación, ejecute el comando siguiente. `test-report-project` es el nombre del proyecto de compilación creado anteriormente. Anote el ID de compilación que aparece en la salida. 

   ```
   aws codebuild start-build --project-name test-report-project
   ```

1. Ejecute el siguiente comando para obtener información sobre su compilación, incluido el ARN del informe. Para `<build-id>`, especifique su ID de compilación. Anote el ARN del informe en la propiedad `reportArns` de la salida. 

   ```
   aws codebuild batch-get-builds --ids <build-id>
   ```

1. Ejecute el comando siguiente para obtener detalles sobre su informe. Para `<report-arn>`, especifique el ARN del informe. 

   ```
   aws codebuild batch-get-reports --report-arns <report-arn>
   ```

   El resultado es similar al siguiente. Esta salida de muestra presenta cuántas pruebas fueron correctas, tuvieron errores, se omitieron, produjeron un error o devolvieron un estado desconocido.

   ```
   {
     "reports": [
       {
         "status": "FAILED",
         "reportGroupArn": "<report-group-arn>",
         "name": "<report-group-name>",
         "created": 1573324770.154,
         "exportConfig": {
           "exportConfigType": "S3",
           "s3Destination": {
             "bucket": "<amzn-s3-demo-bucket>",
             "path": "<path-to-your-report-results>",
             "packaging": "NONE",
             "encryptionKey": "<encryption-key>"
           }
         },
         "expired": 1575916770.0,
         "truncated": false,
         "executionId": "arn:aws:codebuild:us-west-2:123456789012:build/<name-of-build-project>:2c254862-ddf6-4831-a53f-6839a73829c1",
         "type": "TEST",
         "arn": "<report-arn>",
         "testSummary": {
           "durationInNanoSeconds": 6657770,
           "total": 11,
           "statusCounts": {
             "FAILED": 3,
             "SKIPPED": 7,
             "ERROR": 0,
             "SUCCEEDED": 1,
             "UNKNOWN": 0
           }
         }
       }
     ],
     "reportsNotFound": []
   }
   ```

1. Ejecute el comando siguiente para enumerar la información sobre los casos de prueba para su informe. Para `<report-arn>`, especifique el ARN del informe. Para el parámetro `--filter` opcional, puede especificar un resultado de estado (`SUCCEEDED`, `FAILED`, `SKIPPED`, `ERROR` o `UNKNOWN`). 

   ```
   aws codebuild describe-test-cases \
       --report-arn <report-arn> \
       --filter status=SUCCEEDED|FAILED|SKIPPED|ERROR|UNKNOWN
   ```

    El resultado es similar al siguiente. 

   ```
   {
     "testCases": [
       {
         "status": "FAILED",
         "name": "Test case 1",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       },
       {
         "status": "SUCCEEDED",
         "name": "Test case 2",
         "expired": 1575916770.0,
         "reportArn": "<report-arn>",
         "prefix": "Cucumber tests for agent",
         "message": "A test message",
         "durationInNanoSeconds": 1540540,
         "testRawDataPath": "<path-to-output-report-files>"
       }
     ]
   }
   ```

# Ejemplos de Docker para CodeBuild
<a name="sample-docker-section"></a>

En esta sección se describen ejemplos de integraciones entre Docker y. AWS CodeBuild


| Muestra | Description (Descripción) | 
| --- | --- | 
|  [Docker en una muestra de imagen personalizada para CodeBuild](sample-docker-custom-image.md)  |  En este ejemplo, se crea y ejecuta una imagen de Docker mediante CodeBuild una imagen de compilación de Docker personalizada (`docker:dind`en Docker Hub).   | 
|  [Ejemplo de servidor de creación de imágenes de Docker para CodeBuild](sample-docker-server.md)  |  En este ejemplo, se transfieren compilaciones de Docker a un servidor de compilación de imágenes administrado.   | 
|  [Ejemplo de compilación de Windows Docker para CodeBuild](sample-windows-docker-custom-image.md)  |  En este ejemplo, se crea y ejecuta una imagen de Docker de Windows mediante. CodeBuild  | 
|  [Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild](sample-docker.md)  |  Este ejemplo produce como salida de la compilación una imagen de Docker y la inserta después en un repositorio de imágenes de Amazon Elastic Container Registry (Amazon ECR).   | 
|  [Registro privado con AWS Secrets Manager muestra para CodeBuild](sample-private-registry.md)  |  En este ejemplo, se muestra cómo utilizar una imagen de Docker almacenada en un registro privado como entorno de CodeBuild ejecución.  | 

# Docker en una muestra de imagen personalizada para CodeBuild
<a name="sample-docker-custom-image"></a>

En el siguiente ejemplo, se crea y ejecuta una imagen de Docker mediante AWS CodeBuild una imagen de compilación de Docker personalizada (`docker:dind`en Docker Hub). 

Para aprender a crear una imagen de Docker utilizando en su lugar una imagen de compilación proporcionada por CodeBuild el soporte de Docker, consulta nuestra. [Ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md)

**importante**  
Si ejecutas este ejemplo, es posible que se te cobren cargos en tu cuenta. AWS Estos incluyen posibles cargos por CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 y CloudWatch Logs. AWS KMS Para obtener más información, consulte [CodeBuild precios](https://aws.amazon.com/codebuild/pricing), [precios de Amazon S3](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) y [ CloudWatchprecios de Amazon](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Ejecución del ejemplo de Docker en una imagen personalizada](#sample-docker-custom-image-running)

## Ejecución del ejemplo de Docker en una imagen personalizada
<a name="sample-docker-custom-image-running"></a>

Utilice el siguiente procedimiento para ejecutar el ejemplo de Docker en una imagen personalizada. Para obtener más información sobre este ejemplo, consulte [Docker en una muestra de imagen personalizada para CodeBuild](#sample-docker-custom-image).

**Para ejecutar el ejemplo de Docker en una imagen personalizada**

1. Cree los archivos tal y como se describe en las [Archivos](#sample-docker-custom-image-files) secciones [Estructura de directorios](#sample-docker-custom-image-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un AWS CodeCommit repositorio de Bitbucket. GitHub 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada.

   Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

   ```
   {
     "name": "sample-docker-custom-image-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerCustomImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "docker:dind",
       "computeType": "BUILD_GENERAL1_SMALL",
       "privilegedMode": false
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```
**nota**  
De forma predeterminada, el daemon de Docker está habilitado para compilaciones sin VPC. Si quiere usar contenedores de Docker para las compilaciones de VPC, consulte [Runtime Privilege and Linux Capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) en el sitio web de Docker Docs y habilite el modo privilegiado. Además, Windows no admite el modo privilegiado.

1. Para ver los resultados de compilación, busque en el log de la compilación la cadena `Hello, World!` Para obtener más información, consulte [Ver detalles de las compilaciones](view-build-details.md).

### Estructura de directorios
<a name="sample-docker-custom-image-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Archivos
<a name="sample-docker-custom-image-files"></a>

La imagen base del sistema operativo utilizado en este ejemplo es Ubuntu. El ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` (in `(root directory name)`)

```
FROM maven:3.3.9-jdk-8
 
RUN echo "Hello World"
```

# Ejemplo de servidor de creación de imágenes de Docker para CodeBuild
<a name="sample-docker-server"></a>

En el ejemplo siguiente se transfieren compilaciones de Docker a un servidor de compilación de imágenes administrado. Puede adaptar este ejemplo para aprovisionar un servidor de creación de imágenes de Docker dedicado y administrado en la configuración de su proyecto. CodeBuild Ten en cuenta que la instancia aprovisionada está activa mientras las compilaciones se ejecutan activamente para el proyecto, y la instancia se detiene cuando las compilaciones no se están ejecutando. La instancia aprovisionada se almacena durante un mes como máximo antes de reciclarla. Para obtener más información, consulte Capacidad [del servidor CodeBuild Docker](https://aws.amazon.com/blogs//aws/accelerate-ci-cd-pipelines-with-the-new-aws-codebuild-docker-server-capability).

**importante**  
Si ejecuta este ejemplo, es posible que se le cobren cargos a su AWS cuenta. Estos incluyen posibles cargos por CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 y CloudWatch Logs. AWS KMS Para obtener más información, consulte [CodeBuild precios](https://aws.amazon.com/codebuild/pricing), [precios de Amazon S3](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) y [ CloudWatchprecios de Amazon](https://aws.amazon.com/cloudwatch/pricing).

**Topics**
+ [Configuración de un servidor de Docker](#sample-docker-server-running)

## Configuración de un servidor de Docker
<a name="sample-docker-server-running"></a>

Utilice el siguiente procedimiento para aprovisionar un entorno informático dedicado a un CodeBuild proyecto que administre las cargas de trabajo de Docker y almacene las capas de imágenes de Docker. 

**Cómo configurar un servidor de Docker**

1. Cree los archivos tal y como se describe en las [Archivos](#sample-docker-server-files) secciones [Estructura de directorios](#sample-docker-server-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un repositorio AWS CodeCommit de GitHub Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada:

   1. En la sección **Entorno** de la consola, elija **Configuración adicional**, vaya a **Configuración del servidor Docker** y, a continuación, seleccione **Habilitar servidor de Docker para este proyecto**. A continuación, puede elegir **Tipo de computación del servidor de Docker** y proporcione una **Credencial de registro**.

   1. Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del `create-project` comando con formato JSON podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

      ```
      {
        "name": "sample-docker-custom-image-project",
        "source": {
          "type": "S3",
          "location": "codebuild-region-ID-account-ID-input-bucket/DockerServerSample.zip"
        },
        "artifacts": {
          "type": "NO_ARTIFACTS"
        },
        "environment": {
          "type": "LINUX_CONTAINER",
          "image": "aws/codebuild/amazonlinux-x86_64-standard:5.0",
          "computeType": "BUILD_GENERAL1_LARGE",
          "dockerServer": [ 
               { 
                  "computeType": "BUILD_GENERAL1_LARGE",
                  "securityGroupIds": [ "security-groups-ID" ]
               }
            ]
        },
        "serviceRole": "arn:aws:iam::account-ID:role/role-name"
      }
      ```
**nota**  
Los grupos de seguridad configurados para servidores Docker deben permitir la entrada de tráfico de red desde la VPC configurada en el proyecto. Deberían permitir la entrada por el puerto 9876.

1. Para ver los resultados de compilación, busque en el log de la compilación la cadena `Hello, World!` Para obtener más información, consulte [Ver detalles de las compilaciones](view-build-details.md).

### Estructura de directorios
<a name="sample-docker-server-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Archivos
<a name="sample-docker-server-files"></a>

La imagen base del sistema operativo utilizado en este ejemplo es Ubuntu. El ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  build:
    commands:
      - docker buildx build -t helloworld --load .
      - docker run helloworld echo "Hello, World!"
```

`Dockerfile` (in `(root directory name)`)

```
FROM public.ecr.aws/amazonlinux/amazonlinux:latest 
 
RUN echo "Hello World"
```

# Ejemplo de compilación de Windows Docker para CodeBuild
<a name="sample-windows-docker-custom-image"></a>

En el siguiente ejemplo, se crea y ejecuta una imagen de Docker de Windows mediante. CodeBuild

**Topics**
+ [Ejecución del ejemplo de compilación de Windows Docker](#sample-windows-docker-build-running)

## Ejecución del ejemplo de compilación de Windows Docker
<a name="sample-windows-docker-build-running"></a>

Utilice el siguiente procedimiento para ejecutar las compilaciones de Windows Docker.

**Cómo ejecutar el ejemplo de compilaciones de Windows Docker**

1. Cree los archivos tal y como se describe en las [Archivos](#sample-windows-docker-custom-image-files) secciones [Estructura de directorios](#sample-windows-docker-custom-image-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un AWS CodeCommit GitHub repositorio de Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree una flota de `WINDOWS_EC2`.

   Si utilizas el AWS CLI para crear la flota, la entrada con formato JSON del `create-fleet` comando podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

   ```
   {
     "name": "fleet-name",
     "baseCapacity": 1,
     "environmentType": "WINDOWS_EC2",
     "computeType": "BUILD_GENERAL1_MEDIUM"
   }
   ```

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación relacionada.

   Si utilizas la AWS CLI para crear el proyecto de compilación, la entrada con formato JSON del `create-project` comando podría tener un aspecto similar al siguiente. (Sustituya los marcadores de posición por sus propios valores).

   ```
   {
     "name": "project-name",
     "source": {
       "type": "S3",
       "location": "bucket-name/DockerImageSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "WINDOWS_EC2",
       "image": "Windows",
       "computeType": "BUILD_GENERAL1_MEDIUM",
       "fleet": {
          "fleetArn": "fleet-arn"
       }
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name"
   }
   ```

1. Para ver los resultados de compilación, busque en el log de la compilación la cadena `Hello, World!` Para obtener más información, consulte [Ver detalles de las compilaciones](view-build-details.md).

### Estructura de directorios
<a name="sample-windows-docker-custom-image-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Archivos
<a name="sample-windows-docker-custom-image-files"></a>

La imagen base del sistema operativo utilizado en este ejemplo es `mcr.microsoft.com/windows/servercore:ltsc2022`. El ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - docker build -t helloworld .
  build:
    commands:
      - docker images
      - docker run helloworld powershell -Command "Write-Host 'Hello World!'"
```

`Dockerfile` (in `(root directory name)`)

```
FROM mcr.microsoft.com/windows/servercore:ltsc2022

RUN powershell -Command "Write-Host 'Hello World'"
```

# Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild
<a name="sample-docker"></a>

Este ejemplo produce como salida de la compilación una imagen de Docker y la inserta después en un repositorio de imágenes de Amazon Elastic Container Registry (Amazon ECR). Puede adaptar este ejemplo para insertar la imagen de Docker en Docker Hub. Para obtener más información, consulte [Adaptación del ejemplo de publicación de una imagen de Docker en Amazon ECR para insertar en Docker Hub](sample-docker-docker-hub.md).

Para obtener información acerca de cómo crear una imagen de Docker utilizando una imagen de compilación de Docker personalizada (`docker:dind` en Docker Hub), consulte nuestro [Ejemplo de Docker en una imagen personalizada](sample-docker-custom-image.md).

Este ejemplo se ha probado con `golang:1.12`.

Utiliza la nueva característica de fases múltiples de Docker, que produce una imagen de Docker como salida de la compilación. A continuación, envía la imagen de Docker a un repositorio de imágenes de Amazon ECR. Las compilaciones de imágenes de fases múltiples de Docker ayudan a reducir el tamaño de la imagen de Docker final. Para obtener más información, consulte [Use multi-stage builds with Docker](https://docs.docker.com/engine/userguide/eng-image/multistage-build/).

**importante**  
La ejecución de este ejemplo podría generar cargos en su cuenta. AWS Estos incluyen posibles cargos por AWS CodeBuild y por AWS los recursos y acciones relacionados con Amazon S3 AWS KMS, CloudWatch Logs y Amazon ECR. Para obtener más información, consulte [CodeBuild los precios, precios](https://aws.amazon.com/codebuild/pricing) de [Amazon S3, precios](https://aws.amazon.com/s3/pricing), [AWS Key Management Service precios](https://aws.amazon.com/kms/pricing) de [Amazon y CloudWatch precios](https://aws.amazon.com/cloudwatch/pricing) de [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/pricing).

**Topics**
+ [Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR](#sample-docker-running)
+ [Adaptación del ejemplo de publicación de una imagen de Docker en Amazon ECR para insertar en Docker Hub](sample-docker-docker-hub.md)

## Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR
<a name="sample-docker-running"></a>

Utilice el siguiente procedimiento para ejecutar el ejemplo que publica una imagen de Docker en Amazon ECR. Para obtener más información sobre este ejemplo, consulte [Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild](#sample-docker).

**Para ejecutar este ejemplo**

1. Si ya tiene un repositorio de imágenes en Amazon ECR que desee utilizar, vaya al paso 3. De lo contrario, si utiliza un usuario en lugar de una cuenta AWS raíz o un usuario administrador para trabajar con Amazon ECR, añada esta declaración (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* y*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) al usuario (o grupo de IAM al que está asociado el usuario). No se recomienda usar una cuenta AWS root. Esta declaración permite la creación de repositorios de Amazon ECR para almacenar imágenes de Docker. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política. Para obtener más información, consulte el artículo relacionado con el [uso de políticas integradas a través de la Consola de administración de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_inline-using.html#AddingPermissions_Console) en la *Guía del usuario*. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:CreateRepository"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

1. Cree un repositorio de imágenes en Amazon ECR. Asegúrese de crear el repositorio en la misma AWS región en la que creó y ejecutó el entorno de compilación. Para obtener más información, consulte [Crear un repositorio](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html) en la *Guía del usuario de Amazon ECR*. El nombre del repositorio debe coincidir con el que especificará más adelante en este procedimiento, representado por la variable de entorno `IMAGE_REPO_NAME`. Asegúrese de que la política de repositorios de Amazon ECR conceda acceso push de imágenes para su función de IAM CodeBuild de servicio. 

1. Añada esta declaración (entre *\$1\$1\$1 BEGIN ADDING STATEMENT HERE \$1\$1\$1* y*\$1\$1\$1 END ADDING STATEMENT HERE \$1\$1\$1*) a la política que asoció a su función de AWS CodeBuild servicio. Esta declaración permite cargar imágenes de Docker CodeBuild a los repositorios de Amazon ECR. Los puntos suspensivos (`...`) se usan por motivos de brevedad y para ayudarle a encontrar el lugar donde debe añadir la instrucción. No elimine ninguna instrucción ni incluya estos puntos suspensivos en la política. 

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ecr:BatchCheckLayerAvailability",
                   "ecr:CompleteLayerUpload",
                   "ecr:GetAuthorizationToken",
                   "ecr:InitiateLayerUpload",
                   "ecr:PutImage",
                   "ecr:UploadLayerPart"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**nota**  
La entidad de IAM que modifica esta política debe tener permiso en IAM para modificar políticas.

1. Cree los archivos tal y como se describe en las [Archivos](#sample-docker-files) secciones [Estructura de directorios](#sample-docker-dir) y de este tema y, a continuación, cárguelos en un depósito de entrada de S3 o en un repositorio AWS CodeCommit de GitHub Bitbucket. Para obtener más información, consulte [Referencia del archivo de definiciones de imágenes](https://docs.aws.amazon.com/codepipeline/latest/userguide/file-reference.html) en la *Guía del usuario de AWS CodePipeline *.
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Cree un proyecto de compilación, ejecute la compilación y vea la información de compilación.

    Si utiliza la consola para crear un proyecto:

   1.  En **Operating system (Sistema operativo)**, elija **Ubuntu**. 

   1.  En **Runtime**, elija **Standard (Estándar)**. 

   1.  **En **Imagen, selecciona**: 5.0. aws/codebuild/standard** 

   1.  Añada las siguientes variables de entorno: 
      +  AWS\$1DEFAULT\$1REGION con un valor de *region-ID* 
      +  AWS\$1ACCOUNT\$1ID con un valor de *account-ID* 
      +  IMAGE\$1TAG con un valor de Latest 
      +  IMAGE\$1REPO\$1NAME con un valor de *Amazon-ECR-repo-name* 

   Si utilizas el AWS CLI para crear el proyecto de compilación, la entrada del comando con formato JSON podría tener un aspecto similar al siguiente. `create-project` (Sustituya los marcadores de posición por sus propios valores).

   ```
   {
     "name": "sample-docker-project",
     "source": {
       "type": "S3",
       "location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip"
     },
     "artifacts": {
       "type": "NO_ARTIFACTS"
     },
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "BUILD_GENERAL1_SMALL",
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ],
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

1. Confirma que la imagen de Docker se insertó CodeBuild correctamente en el repositorio:

   1. Abra la consola Amazon ECR en [https://console.aws.amazon.com/ecr/](https://console.aws.amazon.com/ecr/).

   1. Elija el nombre del repositorio. La imagen debe mostrarse en la columna **Image tag (Etiqueta de imagen)**.

### Estructura de directorios
<a name="sample-docker-dir"></a>

En este ejemplo se presupone que existe esta estructura de directorios.

```
(root directory name)
├── buildspec.yml
└── Dockerfile
```

### Archivos
<a name="sample-docker-files"></a>

Este ejemplo usa los siguientes archivos.

`buildspec.yml` (in `(root directory name)`)

```
version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...          
      - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
      - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG      
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker image...
      - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
```

`Dockerfile` (in `(root directory name)`)

```
FROM golang:1.12-alpine AS build
#Install git
RUN apk add --no-cache git
#Get the hello world package from a GitHub repository
RUN go get github.com/golang/example/hello
WORKDIR /go/src/github.com/golang/example/hello
# Build the project and send the output to /bin/HelloWorld 
RUN go build -o /bin/HelloWorld

FROM golang:1.12-alpine
#Copy the build's output binary from the previous build container
COPY --from=build /bin/HelloWorld /bin/HelloWorld
ENTRYPOINT ["/bin/HelloWorld"]
```

**nota**  
CodeBuild anula las imágenes `ENTRYPOINT` de Docker personalizadas.

# Adaptación del ejemplo de publicación de una imagen de Docker en Amazon ECR para insertar en Docker Hub
<a name="sample-docker-docker-hub"></a>

Para adaptar el ejemplo de publicación de una imagen de Docker en Amazon ECR de modo que la imagen de Docker se inserte en Docker Hub en lugar de en Amazon ECR, edite el código del ejemplo. Para obtener más información sobre el ejemplo, consulte [Ejemplo de «Publicar una imagen de Docker en un repositorio de imágenes de Amazon ECR» para CodeBuild](sample-docker.md) y [Ejecución del ejemplo de publicación de una imagen de Docker en Amazon ECR](sample-docker.md#sample-docker-running).
**nota**  
Si está utilizando una versión de Docker anterior a la 17.06, quite la opción `--no-include-email`.

1. Sustituya estas líneas de código específicas de Amazon ECR en el archivo `buildspec.yml`:

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Amazon ECR...
         - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...          
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

   Por estas líneas de código específicas de Docker Hub:

   ```
   ...
     pre_build:
       commands:
         - echo Logging in to Docker Hub...
         # Type the command to log in to your Docker Hub account here.          
     build:
       commands:
         - echo Build started on `date`
         - echo Building the Docker image...
         - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
         - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $IMAGE_REPO_NAME:$IMAGE_TAG
     post_build:
       commands:
         - echo Build completed on `date`
         - echo Pushing the Docker image...
         - docker push $IMAGE_REPO_NAME:$IMAGE_TAG
   ...
   ```

1. Sube el código editado a un depósito de entrada de S3 o a un AWS CodeCommit repositorio GitHub de Bitbucket. 
**importante**  
No cargue `(root directory name)`, solo los archivos incluidos en `(root directory name)`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga los archivos y cárguelo en el bucket de entrada. No añada `(root directory name)` al archivo ZIP, solo los archivos incluidos en `(root directory name)`.

1. Sustituya estas líneas de código de la entrada con formato JSON del comando `create-project`:

   ```
   ...
       "environmentVariables": [
         {
           "name": "AWS_DEFAULT_REGION",
           "value": "region-ID"
         },
         {
           "name": "AWS_ACCOUNT_ID",
           "value": "account-ID"
         },
         {
           "name": "IMAGE_REPO_NAME",
           "value": "Amazon-ECR-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

   Por estas líneas de código:

   ```
   ...
       "environmentVariables": [
         {
           "name": "IMAGE_REPO_NAME",
           "value": "your-Docker-Hub-repo-name"
         },
         {
           "name": "IMAGE_TAG",
           "value": "latest"
         }
       ]
   ...
   ```

1. Cree un entorno de compilación, ejecute la compilación y vea la información de compilación relacionada.

1. Confirma que la imagen de Docker se insertó AWS CodeBuild correctamente en el repositorio. Inicie sesión en Docker Hub, vaya al repositorio y elija la pestaña **Tags**. La etiqueta `latest` debe contener un valor de **Last Updated** muy reciente.

# Registro privado con AWS Secrets Manager muestra para CodeBuild
<a name="sample-private-registry"></a>

 En este ejemplo, se muestra cómo utilizar una imagen de Docker almacenada en un registro privado como entorno AWS CodeBuild de ejecución. Las credenciales del registro privado están almacenadas en AWS Secrets Manager. Cualquier registro privado funciona con CodeBuild. En esta muestra se utiliza Docker Hub. 

**nota**  
Los secretos son visibles para las acciones y no se ocultan cuando se escriben en un archivo.

**Topics**
+ [Requisitos del ejemplo de un registro privado](#sample-private-registry-requirements)
+ [Crea un CodeBuild proyecto con un registro privado](private-registry-sample-create-project.md)
+ [Configuración de una credencial de registro privada para ejecutores autoalojados](private-registry-sample-configure-runners.md)

## Requisitos del ejemplo de un registro privado
<a name="sample-private-registry-requirements"></a>

 Para usar un registro privado con AWS CodeBuild, debe tener lo siguiente: 
+  Un secreto de Secrets Manager que almacena sus credenciales de Docker Hub. Las credenciales se utilizan para acceder al repositorio privado. 
**nota**  
Se le cobrará por los secretos que cree.
+  Un repositorio privado o una cuenta. 
+  Una política de IAM de rol de CodeBuild servicio que otorga acceso a tu secreto de Secrets Manager. 

 Siga estos pasos para crear estos recursos y, a continuación, cree un proyecto de CodeBuild compilación con las imágenes de Docker almacenadas en su registro privado. 

# Crea un CodeBuild proyecto con un registro privado
<a name="private-registry-sample-create-project"></a>

1. Para obtener información sobre cómo crear un repositorio privado gratuito, consulte [Repositorios en Docker Hub](https://docs.docker.com/docker-hub/repos/). También puede ejecutar los siguientes comandos en un terminal para extraer una imagen, obtener su ID y enviarla a un nuevo repositorio. 

   ```
   docker pull amazonlinux
   docker images amazonlinux --format {{.ID}}
   docker tag image-id your-username/repository-name:tag
   docker login
   docker push your-username/repository-name
   ```

1.  Siga los pasos que se indican en [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) en la *Guía del AWS Secrets Manager usuario*.

   

   1.  En el paso 3, en **Elija tipo de secreto**, seleccione **Otro tipo de secreto**. 

   1. En **Pares clave/valor**, cree un par clave-valor para el nombre de usuario de Docker Hub y otro par clave-valor para la contraseña de Docker Hub. 

   1.  Sigue los pasos de [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

   1.  En el paso 5, en la página **Configurar la rotación automática**, desactívala porque las claves corresponden a sus credenciales de Docker Hub. 

   1.  Termina de seguir los pasos de [Crear un AWS Secrets Manager secreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html). 

    Para obtener más información, consulte [¿Qué es AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) 

1.  Cuando creas un AWS CodeBuild proyecto en la consola, te CodeBuild adjunta el permiso necesario. Si usa una AWS KMS clave que no sea`DefaultEncryptionKey`, debe agregarla al rol de servicio. Para obtener más información, consulte [Modificación de un rol (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html#roles-managingrole-editing-console) en la *Guía del usuario de IAM*. 

    Para que su rol de servicio funcione con Secrets Manager, debe tener, como mínimo, el permiso `secretsmanager:GetSecretValue`.   
![\[La configuración del rol de servicio\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/private-registry-sample-iam.png)

1.  Para usar la consola para crear un proyecto con un entorno almacenado en un registro privado, haga lo siguiente mientras crea un proyecto. Para obtener información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console). 
**nota**  
 Si su registro privado está en su VPC, debe tener acceso público a Internet. CodeBuild no puede extraer una imagen de una dirección IP privada en una VPC. 

   1.  En **Imagen de entorno**, elija **Imagen personalizada**. 

   1.  En **Environment type (Tipo de entorno)**, elija **Linux** o **Windows**. 

   1.  En **Registro de imágenes**, elija **Otro registro**. 

   1.  En **URL de registro externa**, introduzca la ubicación de la imagen y en **Credencial de registro (opcional)**, introduzca el ARN o el nombre de sus credenciales de Secrets Manager.
**nota**  
 Si las credenciales no existen en la región actual, debe usar el ARN. No puede utilizar el nombre de la credencial si las credenciales existen en otra región. 

# Configuración de una credencial de registro privada para ejecutores autoalojados
<a name="private-registry-sample-configure-runners"></a>

Utilice las siguientes instrucciones para configurar una credencial de registro para un ejecutor autoalojado.

**nota**  
Tenga en cuenta que esta credencial solo se utilizará si las imágenes se sustituyen por las de registros privados. 

------
#### [ AWS Management Console ]

1. Abra la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación o seleccione uno existente. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Cambiar la configuración de un proyecto de compilación (consola)](change-project.md#change-project-console).

1.  En **Entorno**, elija **Configuración adicional**. 

1.  En **Configuración adicional**, introduzca el nombre o el ARN del secreto de la **credencial AWS Secrets Manager de registro** (opcional).  
![\[La configuración de credenciales de registro.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/registry-credential.png)

------
#### [ AWS CLI ]

1. Si desea crear un proyecto nuevo, ejecute el comando **create-project**.

   ```
   aws codebuild create-project \
       --name project-name \
       --source type=source-type,location=source-location \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn},imagePullCredentialsType=CODEBUILD|SERVICE_ROLE" \
       --artifacts type=artifacts-type \
       --service-role arn:aws:iam::account-ID:role/service-role/service-role-name
   ```

1. Si desea actualizar un proyecto existente, ejecuta el comando **update-project**.

   ```
   aws codebuild update-project \
       --name project-name \
       --environment "type=environment-type,image=image,computeType=compute-type,registryCredential={credentialProvider=SECRETS_MANAGER,credential=secret-name-or-arn}"
   ```

------

# Crear un sitio web estático con la salida de compilación alojada en un bucket de S3
<a name="sample-disable-artifact-encryption"></a>

Puede deshabilitar el cifrado de los artefactos en una compilación, por ejemplo, para publicar artefactos en una ubicación configurada para alojar un sitio web. (Los artefactos cifrados no se pueden publicar). En este ejemplo, se muestra cómo utilizar los webhooks para desencadenar una compilación y publicar sus artefactos en un bucket de S3 configurado como un sitio web. 

1.  Siga las instrucciones de [configuración para sitio web estático](https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingWebsiteOnS3Setup.html) si quiere configurar un bucket de S3 para que funcione como un sitio web. 

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Si se muestra una página de CodeBuild información, elija **Crear** proyecto de compilación. De lo contrario, en el panel de navegación, expanda **Compilar**, elija **Proyectos de compilación** y, a continuación, elija **Crear proyecto de compilación**. 

1. En **Project name (Nombre de proyecto)**, escriba un nombre para este proyecto de compilación. Los nombres de los proyectos de compilación deben ser únicos en cada AWS cuenta. También puede introducir una descripción opcional del proyecto de compilación para ayudar a otros usuarios a entender para qué se utiliza el proyecto.

1.  En **Source (Código fuente)**, para **Source provider (Proveedor de código fuente)**, elija **GitHub**. Sigue las instrucciones para conectarte (o volver a conectarte) y GitHub, a continuación, selecciona **Autorizar**. 

    En **Webhook**, seleccione **Rebuild every time a code change is pushed to this repository (Volver a compilar cada vez que un cambio de código se inserte en el repositorio)**. Solo puede seleccionar esta casilla de verificación si eligió **Use a repository in my account (Usar un repositorio de mi cuenta)**.   
![\[La configuración del webhook\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/webhook.png)

1. En **Environment (Entorno)**:

   En **Environment image (Imagen del entorno)**, realice alguna de las siguientes operaciones:
   + Para usar una imagen de Docker gestionada por AWS CodeBuild, selecciona **Imagen gestionada** y, a continuación, selecciona **Sistema operativo**, **Tiempo de ejecución**, **Imagen** y Versión de la **imagen**. Realice una selección en **Environment type (Tipo de entorno)** si está disponible.
   + Para usar otra imagen de Docker, elija **Custom image (Imagen personalizada)**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. Si elige **Otro registro**, en **URL de registro externo**, introduzca el nombre y etiqueta de la imagen de Docker en Docker Hub, usando el formato `docker repository/docker image name`. Si elige **Amazon ECR**, utilice el **repositorio de Amazon ECR** y la imagen de **Amazon ECR para elegir la imagen** de Docker en su cuenta. AWS 
   + Para usar una imagen de Docker privada, elija **Imagen personalizada**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. En **Image registry (Registro de imagen)**, elija **Other registry (Otro registro)** y, a continuación, introduzca el ARN de las credenciales para su imagen de Docker privada. Es necesario crear las credenciales con Secrets Manager. Para obtener más información, consulte [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) en la *Guía del usuario de AWS Secrets Manager *.

1. En **Service role (Rol de servicio)**, realice una de las operaciones siguientes:
   + **Si no tiene un rol de CodeBuild servicio, elija Nuevo rol de servicio.** Escriba un nombre para el nuevo rol en el campo **Role Name**.
   + Si tiene un rol CodeBuild de servicio, elija el **rol de servicio existente**. En **ARN de rol**, seleccione el rol de servicio.
**nota**  
Cuando utilizas la consola para crear o actualizar un proyecto de compilación, puedes crear un rol de CodeBuild servicio al mismo tiempo. De forma predeterminada, el rol funciona solamente con ese proyecto de compilación. Si utiliza la consola para asociar este rol de servicio a otro proyecto de compilación, el rol se actualizará para que funcione con el otro proyecto de compilación. Un rol de servicio puede funcionar con hasta diez proyectos de compilación.

1. En **Archivo de especificación de compilación**, realice alguna de las operaciones siguientes:
   + Seleccione **Usar un archivo de especificaciones de compilación** para utilizar el archivo buyildspec.yml que figura en el directorio raíz del código fuente.
   + Elija **Insertar comandos de compilación** para usar la consola para insertar comandos de compilación.

   Para obtener más información, consulte la [Referencia de la especificación de compilación](build-spec-ref.md).

1.  En **Artefactos**, en **Tipo**, elija **Amazon S3** para almacenar la salida de la compilación en un bucket de S3. 

1.  En **Bucket name (Nombre del bucket)**, elija el nombre del bucket de S3 que ha configurado para que funcione como un sitio web en el paso 1. 

1.  Si eligió **Insert build commands (Insertar comandos de compilación)** en **Environment: How to build (Entorno: cómo compilar)**, escriba las ubicaciones de los archivos de la compilación que desea incluir en el bucket de salida en **Output files (Archivos de salida)**. Si tiene varias ubicaciones, utilice una coma para separarlas (por ejemplo, **appspec.yml, target/my-app.jar**). Para obtener más información, consulte [Artifacts reference-key in the buildspec file](build-spec-ref.md#artifacts-build-spec).

1.  Seleccione **Disable artifacts encryption (Deshabilitar cifrado de artefactos)**. 

1. Expanda **Additional configuration (Configuración adicional)** y elija las opciones que correspondan.

1. Elija **Crear el proyecto de compilación**. En la página del proyecto de compilación, en **Build history (Historial de compilaciones)**, elija **Start build (Comenzar compilación)** para ejecutar la compilación.

1.  (Opcional) Siga las instrucciones de [Ejemplo: acelere su sitio web con Amazon CloudFront](https://docs.aws.amazon.com/AmazonS3/latest/userguide/website-hosting-cloudfront-walkthrough.html) en la *Guía para desarrolladores de Amazon S3*. 

# Ejemplo de varios orígenes de entrada y varios artefactos de salida
<a name="sample-multi-in-out"></a>

Puede crear un proyecto de compilación de AWS CodeBuild con varios orígenes de entrada y varios conjuntos de artefactos de salida. En este ejemplo se muestra cómo configurar un proyecto de compilación que: 
+ Utiliza varios orígenes y repositorios de distintos tipos.
+ Publica los artefactos de compilación en varios buckets de S3 en una sola compilación.

 En el ejemplo siguiente, se crea un proyecto de compilación que se utiliza para ejecutar una compilación. El ejemplo usa el archivo buildspec del proyecto de compilación para mostrar cómo incorporar más de un origen y crear más de un conjunto de artefactos. 

Para obtener información sobre cómo crear una canalización que utilice varias entradas de origen en CodeBuild para crear varios artefactos de salida, consulte [Ejemplo de una CodePipeline/CodeBuild integración con múltiples fuentes de entrada y artefactos de salida](sample-codepipeline.md#sample-pipeline-multi-input-output).

**Topics**
+ [Creación de un proyecto de compilación con varias entradas y salidas](sample-multi-in-out-create.md)
+ [Creación de un proyecto de compilación sin un origen](no-source.md)

# Creación de un proyecto de compilación con varias entradas y salidas
<a name="sample-multi-in-out-create"></a>

Utilice el siguiente procedimiento para crear un proyecto de compilación con varias entradas y salidas.

**Para crear un proyecto de compilación con varias entradas y salidas**

1.  Cargue las fuentes en uno o más buckets de S3 o en uno o más repositorios de CodeCommit, GitHub, GitHub Enterprise Server o Bitbucket. 

1.  Elija cuál es el origen principal. Esta es la fuente donde CodeBuild busca el archivo de especificaciones de compilación y lo ejecuta. 

1.  Cree un proyecto de compilación. Para obtener más información, consulte [Creación de un proyecto de compilación en AWS CodeBuild](create-project.md). 

1.  Cree el proyecto de compilación, ejecute la compilación y obtenga información sobre esta. 

1.  Si usa la AWS CLI para crear el proyecto de compilación, es posible que el resultado con formato JSON del comando `create-project` tenga un aspecto similar al siguiente: 

   ```
   {
     "name": "sample-project",
     "source": {
       "type": "S3",
       "location": "<bucket/sample.zip>"
     },
     "secondarySources": [
       {
         "type": "CODECOMMIT",
         "location": "https://git-codecommit.us-west-2.amazonaws.com/v1/repos/repo",
         "sourceIdentifier": "source1"
       },
       {
         "type": "GITHUB",
         "location": "https://github.com/awslabs/aws-codebuild-jenkins-plugin",
         "sourceIdentifier": "source2"
       }
     ],
     "secondaryArtifacts": [ss
       {
         "type": "S3",
         "location": "<output-bucket>",
         "artifactIdentifier": "artifact1"
       },
       {
         "type": "S3",
         "location": "<other-output-bucket>",
         "artifactIdentifier": "artifact2"
       }
     ],
     "environment": {
       "type": "LINUX_CONTAINER",
       "image": "aws/codebuild/standard:5.0",
       "computeType": "BUILD_GENERAL1_SMALL"
     },
     "serviceRole": "arn:aws:iam::account-ID:role/role-name",
     "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
   }
   ```

 El origen principal se define en el atributo `source`. El resto de orígenes se denominan secundarios y aparecen en `secondarySources`. Todos los orígenes secundarios se instalan en su propio directorio. Este directorio se almacena en la variable de entorno integrada `CODEBUILD_SRC_DIR_sourceIdentifer`. Para obtener más información, consulte [Variables de entorno en los entornos de compilación](build-env-ref-env-vars.md). 

 El atributo `secondaryArtifacts` contiene una lista de definiciones de artefacto. Estos artefactos usan el bloque `secondary-artifacts` del archivo buildspec anidado en el bloque `artifacts`. 

 Los artefactos secundarios del archivo buildspec tienen la misma estructura que el resto de artefactos y se separan mediante el identificador correspondiente. 

**nota**  
 En la [API de CodeBuild](https://docs.aws.amazon.com/codebuild/latest/APIReference/), `artifactIdentifier` de un artefacto secundario es un atributo obligatorio en `CreateProject` y `UpdateProject`. Debe utilizarse para hacer referencia a un artefacto secundario. 

 Si se utiliza la entrada con formato JSON anterior, el archivo buildspec del proyecto puede tener este aspecto: 

```
version: 0.2

phases:
  install:
    runtime-versions:
      java: openjdk11
  build:
    commands:
      - cd $CODEBUILD_SRC_DIR_source1
      - touch file1
      - cd $CODEBUILD_SRC_DIR_source2
      - touch file2

artifacts:
  files:
    - '**.*'
  secondary-artifacts:
    artifact1:
      base-directory: $CODEBUILD_SRC_DIR_source1
      files:
        - file1
    artifact2:
      base-directory: $CODEBUILD_SRC_DIR_source2
      files:
        - file2
```

 Puede reemplazar la versión del origen principal mediante la API con el atributo `sourceVersion` en `StartBuild`. Para reemplazar una o varias versiones de origen secundario, utilice el atributo `secondarySourceVersionOverride`. 

 Es posible que la entrada con formato JSON del comando `start-build` de la AWS CLI tenga este aspecto: 

```
{
   "projectName": "sample-project",
   "secondarySourcesVersionOverride": [
      {
        "sourceIdentifier": "source1",
        "sourceVersion": "codecommit-branch"
      },
      {
        "sourceIdentifier": "source2",
        "sourceVersion": "github-branch"
      },
   ]
}
```

# Creación de un proyecto de compilación sin un origen
<a name="no-source"></a>

 Para configurar un proyecto de CodeBuild, puede elegir el tipo de origen al configurar el origen. Cuando el tipo de origen es **NO\$1SOURCE**, no puede especificar un archivo de especificación de compilación porque su proyecto no tiene un origen. En su lugar, debe especificar una cadena de especificación de compilación con formato YAML en el atributo `buildspec` de la entrada con formato JSON al comando de la CLI `create-project`. Podría ser como el siguiente: 

```
{
  "name": "project-name",
  "source": {
    "type": "NO_SOURCE",
    "buildspec": "version: 0.2\n\nphases:\n  build:\n    commands:\n      - command"
   },
  "environment": {
    "type": "LINUX_CONTAINER",
    "image": "aws/codebuild/standard:5.0",
    "computeType": "BUILD_GENERAL1_SMALL",    
  },
  "serviceRole": "arn:aws:iam::account-ID:role/role-name",
  "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
}
```

Para obtener más información, consulte [Crear un proyecto de compilación (AWS CLI)](create-project.md#create-project-cli).

# Versiones en tiempo de ejecución en el ejemplo del archivo buildspec para CodeBuild
<a name="sample-runtime-versions"></a>

Si utilizas la imagen estándar de Amazon Linux 2 (AL2) versión 1.0 o posterior, o la imagen estándar de Ubuntu versión 2.0 o posterior, puedes especificar uno o más tiempos de ejecución en la `runtime-versions` sección de tu archivo buildspec. Los siguientes ejemplos muestran cómo puede cambiar el tiempo de ejecución de su proyecto, especificar más de uno y especificar un tiempo de ejecución que dependa de otro. Para obtener información sobre los runtimes compatibles, consulte [Imágenes de Docker proporcionadas por CodeBuild](build-env-ref-available.md).

**nota**  
Si utiliza Docker en el contenedor de compilación, la compilación debe ejecutarse en un modo con privilegios. Para obtener más información, consulte [Ejecute AWS CodeBuild compilaciones manualmente](run-build.md) y [Creación de un proyecto de compilación en AWS CodeBuild](create-project.md). 

**Topics**
+ [Actualización de la versión del tiempo de ejecución en el archivo de especificación de compilación](sample-runtime-update-version.md)
+ [Especificación de dos entornos de ejecución](sample-runtime-two-major-version-runtimes.md)

# Actualización de la versión del tiempo de ejecución en el archivo de especificación de compilación
<a name="sample-runtime-update-version"></a>

Puede modificar el entorno de tiempo de ejecución que utiliza su proyecto por una nueva versión actualizando la sección `runtime-versions` del archivo de especificación de compilación. Los siguientes ejemplos muestran cómo se especifican las versiones 8 y 11 de Java.
+ Una sección `runtime-versions` que especifica la versión 8 de Java:

  ```
  phases:
    install:
      runtime-versions:
        java: corretto8
  ```
+ Una sección `runtime-versions` que especifica la versión 11 de Java:

  ```
  phases:
    install:
      runtime-versions:
        java: corretto11
  ```

Los siguientes ejemplos muestran cómo especificar diferentes versiones de Python utilizando la imagen de Ubuntu estándar 5.0 o la imagen de Amazon Linux 2 estándar 3.0:
+ Una sección de `runtime-versions` que especifica Python versión 3.7: 

  ```
  phases:
    install:
      runtime-versions:
        python: 3.7
  ```
+ Una sección de `runtime-versions` que especifica Python versión 3.8: 

  ```
  phases:
    install:
      runtime-versions:
        python: 3.8
  ```

Esta muestra presenta un proyecto que comienza con el tiempo de ejecución de la versión 8 de Java y, a continuación, se actualiza al tiempo de ejecución de la versión 10 de Java. 

1. Descargue e instale Maven. Para obtener información, consulte [Downloading Apache Maven](https://maven.apache.org/download.cgi) e [Installing Apache Maven](https://maven.apache.org/install.html) en el sitio web de Apache Maven.

1. Cambie a un directorio vacío del equipo o instancia local y, a continuación, ejecute este comando Maven.

   ```
   mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=ROOT" "-DarchetypeArtifactId=maven-archetype-webapp" "-DinteractiveMode=false"
   ```

   Si el comando se ejecuta correctamente, se creará esta estructura de directorios y archivos.

   ```
   .
   └── ROOT
       ├── pom.xml
       └── src
           └── main
               ├── resources
               └── webapp
                   ├── WEB-INF
                   │   └── web.xml
                   └── index.jsp
   ```

1. Cree un archivo denominado `buildspec.yml` con el siguiente contenido. Guarde el archivo en el directorio ` (root directory name)/my-web-app`. 

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         java: corretto8
     build:
       commands:
         - java -version
         - mvn package
   artifacts:
     files:
       - '**/*'
     base-directory: 'target/my-web-app'
   ```

   En el archivo buildspec: 
   + La sección `runtime-versions` especifica que el proyecto utiliza la versión 8 del tiempo de ejecución de Java. 
   + El comando `- java -version` muestra la versión de Java que utiliza su proyecto cuando se compila. 

   La estructura de archivos debe ser como la siguiente. 

   ```
   (root directory name)
   └── my-web-app
       ├── src
       │   ├── main
       │   ├── resources
       │   └── webapp
       │       └── WEB-INF
       │           └── web.xml
       │               └── index.jsp
       ├── buildspec.yml
       └── pom.xml
   ```

1. Sube el contenido del `my-web-app` directorio a un depósito de entrada de S3 o a un repositorio de CodeCommit GitHub Bitbucket. 
**importante**  
No cargue `(root directory name)` o `(root directory name)/my-web-app`, solo los directorios y archivos incluidos en `(root directory name)/my-web-app`.   
Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga la estructura de directorios y los archivos para cargarlo después en el bucket de entrada. No añada `(root directory name)` o `(root directory name)/my-web-app` al archivo ZIP, solo los directorios y archivos incluidos en `(root directory name)/my-web-app`.

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Ejecutar una compilación (consola)](run-build-console.md). Deje todas las opciones con sus valores predeterminados, excepto las siguientes opciones.
   + Para **Environment (Entorno)**:
     + En **Environment image (Imagen de entorno)**, elija **Managed image (Imagen administrada)**.
     + En **Operating system (Sistema operativo)**, elija **Amazon Linux 2**. 
     +  En **Runtime(s) (Tiempo de ejecución)**, elija **Standard (Estándar)**. 
     + **En **Imagen, elija -x86\$164-standard:4.0**. aws/codebuild/amazonlinux**

1. Seleccione **Iniciar la compilación**. 

1. En **Build configuration (Configuración de la compilación)**, acepte los valores predeterminados y elija **Start build (Comenzar compilación)**. 

1. Una vez finalizada la compilación, consulte la salida de compilación en la pestaña **Build logs (Registros de compilación)**. Debería ver una salida similar a esta: 

   ```
   [Container] Date Time Phase is DOWNLOAD_SOURCE
   [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src
   [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'java' runtime version 'corretto8' based on manual selections...
   [Container] Date Time Running command echo "Installing Java version 8 ..."
   Installing Java version 8 ... 
    
   [Container] Date Time Running command export JAVA_HOME="$JAVA_8_HOME" 
    
   [Container] Date Time Running command export JRE_HOME="$JRE_8_HOME" 
    
   [Container] Date Time Running command export JDK_HOME="$JDK_8_HOME" 
    
   [Container] Date Time Running command for tool_path in "$JAVA_8_HOME"/bin/* "$JRE_8_HOME"/bin/*;
   ```

1. Actualice la sección `runtime-versions` con la versión 11 de Java: 

   ```
   install:
       runtime-versions:
         java: corretto11
   ```

1. Después de guardar el cambio, ejecute la compilación de nuevo y consulte la salida de compilación. Debería ver que la versión instalada de Java es la 11. Debería ver una salida similar a esta: 

   ```
   [Container] Date Time Phase is DOWNLOAD_SOURCE
   [Container] Date Time CODEBUILD_SRC_DIR=/codebuild/output/src460614277/src
   [Container] Date Time YAML location is /codebuild/output/src460614277/src/buildspec.yml
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'java' runtime version 'corretto11' based on manual selections... 
   Installing Java version 11 ... 
    
   [Container] Date Time Running command export JAVA_HOME="$JAVA_11_HOME" 
    
   [Container] Date Time Running command export JRE_HOME="$JRE_11_HOME" 
    
   [Container] Date Time Running command export JDK_HOME="$JDK_11_HOME" 
    
   [Container] Date Time Running command for tool_path in "$JAVA_11_HOME"/bin/* "$JRE_11_HOME"/bin/*;
   ```

# Especificación de dos entornos de ejecución
<a name="sample-runtime-two-major-version-runtimes"></a>

Puedes especificar más de un tiempo de ejecución en el mismo proyecto de compilación. CodeBuild Este proyecto de muestra utiliza dos archivos de código fuente: uno que utiliza el tiempo de ejecución de Go y otro que utiliza el tiempo de ejecución de Node.js. 

1. Cree un directorio llamado `my-source`. 

1. En el directorio `my-source`, cree un directorio llamado `golang-app`. 

1. Cree un archivo denominado `hello.go` con el siguiente contenido. Guarde el archivo en el directorio `golang-app`. 

   ```
   package main
   import "fmt"
   
   func main() {
     fmt.Println("hello world from golang")
     fmt.Println("1+1 =", 1+1)
     fmt.Println("7.0/3.0 =", 7.0/3.0)
     fmt.Println(true && false)
     fmt.Println(true || false)
     fmt.Println(!true)
     fmt.Println("good bye from golang")
   }
   ```

1. En el directorio `my-source`, cree un directorio llamado `nodejs-app`. Debe estar al mismo nivel que el directorio `golang-app`. 

1. Cree un archivo denominado `index.js` con el siguiente contenido. Guarde el archivo en el directorio `nodejs-app`. 

   ```
   console.log("hello world from nodejs");
   console.log("1+1 =" + (1+1));
   console.log("7.0/3.0 =" + 7.0/3.0);
   console.log(true && false);
   console.log(true || false);
   console.log(!true);
   console.log("good bye from nodejs");
   ```

1. Cree un archivo denominado `package.json` con el siguiente contenido. Guarde el archivo en el directorio `nodejs-app`. 

   ```
   {
     "name": "mycompany-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"run some tests here\""
     },
     "author": "",
     "license": "ISC"
   }
   ```

1. Cree un archivo denominado `buildspec.yml` con el siguiente contenido. Guarde el archivo en el directorio `my-source`, al mismo nivel que los directorios `nodejs-app` y `golang-app`. La sección `runtime-versions` especifica los tiempos de ejecución de la versión 12 de Node.js y la versión 1.13 de Go. 

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         golang: 1.13
         nodejs: 12
     build:
       commands:
         - echo Building the Go code...
         - cd $CODEBUILD_SRC_DIR/golang-app
         - go build hello.go 
         - echo Building the Node code...
         - cd $CODEBUILD_SRC_DIR/nodejs-app
         - npm run test
   artifacts:
     secondary-artifacts:
       golang_artifacts:
         base-directory: golang-app
         files:
           - hello
       nodejs_artifacts:
         base-directory: nodejs-app
         files:
           - index.js
           - package.json
   ```

1. La estructura de archivos debe ser como la siguiente. 

   ```
   my-source
   ├── golang-app
   │   └── hello.go
   ├── nodejs.app
   │   ├── index.js
   │   └── package.json
   └── buildspec.yml
   ```

1. Sube el contenido del `my-source` directorio a un depósito de entrada de S3 o a un CodeCommit repositorio de Bitbucket. GitHub
**importante**  
 Si utiliza un bucket de entrada de S3, no olvide crear un archivo ZIP que contenga la estructura de directorios y los archivos para cargarlo después en el bucket de entrada. No añada `my-source` al archivo ZIP, solo los directorios y archivos incluidos en `my-source`.

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Ejecutar una compilación (consola)](run-build-console.md). Deje todas las opciones con sus valores predeterminados, excepto las siguientes opciones.
   + Para **Environment (Entorno)**:
     + En **Environment image (Imagen de entorno)**, elija **Managed image (Imagen administrada)**.
     + En **Operating system (Sistema operativo)**, elija **Amazon Linux 2**.
     + En **Runtime(s) (Tiempo de ejecución)**, elija **Standard (Estándar)**.
     + **En **Imagen, elija -x86\$164-standard:4.0**. aws/codebuild/amazonlinux**

1. Elija **Crear el proyecto de compilación**. 

1. Seleccione **Iniciar la compilación**. 

1. En **Build configuration (Configuración de la compilación)**, acepte los valores predeterminados y elija **Start build (Comenzar compilación)**. 

1. Una vez finalizada la compilación, consulte la salida de compilación en la pestaña **Build logs (Registros de compilación)**. Debería ver un resultado similar a este. Muestra la salida de los tiempos de ejecución de Go y Node.js. También muestra la salida de las aplicaciones de Go y Node.js. 

   ```
   [Container] Date Time Processing environment variables
   [Container] Date Time Selecting 'golang' runtime version '1.13' based on manual selections...
   [Container] Date Time Selecting 'nodejs' runtime version '12' based on manual selections...
   [Container] Date Time Running command echo "Installing Go version 1.13 ..."
   Installing Go version 1.13 ... 
    
   [Container] Date Time Running command echo "Installing Node.js version 12 ..." 
   Installing Node.js version 12 ... 
    
   [Container] Date Time Running command n $NODE_12_VERSION
      installed : v12.20.1 (with npm 6.14.10)
   
   [Container] Date Time Moving to directory /codebuild/output/src819694850/src
   [Container] Date Time Registering with agent
   [Container] Date Time Phases found in YAML: 2
   [Container] Date Time  INSTALL: 0 commands
   [Container] Date Time  BUILD: 1 commands
   [Container] Date Time Phase complete: DOWNLOAD_SOURCE State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:
   [Container] Date Time Entering phase INSTALL
   [Container] Date Time Phase complete: INSTALL State: SUCCEEDED
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase PRE_BUILD 
   [Container] Date Time Phase complete: PRE_BUILD State: SUCCEEDED 
   [Container] Date Time Phase context status code:  Message:  
   [Container] Date Time Entering phase BUILD 
   [Container] Date Time Running command echo Building the Go code... 
   Building the Go code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/golang-app 
    
   [Container] Date Time Running command go build hello.go 
    
   [Container] Date Time Running command echo Building the Node code... 
   Building the Node code... 
    
   [Container] Date Time Running command cd $CODEBUILD_SRC_DIR/nodejs-app 
    
   [Container] Date Time Running command npm run test 
    
   > mycompany-app@1.0.0 test /codebuild/output/src924084119/src/nodejs-app 
   > echo "run some tests here" 
    
   run some tests here
   ```

# Ejemplo de versión fuente con AWS CodeBuild
<a name="sample-source-version"></a>

 En este ejemplo se muestra cómo especificar una versión de su origen con un formato que no sea un ID de confirmación (también conocido como SHA de confirmación). Puede especificar la versión del origen de las siguientes formas: 
+  En el caso de un proveedor de origen de Amazon S3, utilice el ID de versión del objeto que representa el archivo ZIP de entrada de la compilación. 
+  Para CodeCommit Bitbucket y GitHub Enterprise Server GitHub, usa una de las siguientes opciones: 
  +  Solicitud de extracción como referencia de solicitud de extracción (por ejemplo, `refs/pull/1/head`). 
  +  Branch como nombre de sucursal. 
  +  ID de confirmación. 
  +  Etiqueta. 
  +  Referencia y un identificador de confirmación. La referencia puede ser una de las siguientes:
    +  Una etiqueta (por ejemplo, `refs/tags/mytagv1.0^{full-commit-SHA}`). 
    +  Una ramificación (por ejemplo, `refs/heads/mydevbranch^{full-commit-SHA}`). 
    +  Una solicitud de extracción (por ejemplo, `refs/pull/1/head^{full-commit-SHA}`). 
+  Para GitLab autogestionarse GitLab y autogestionarse, utilice una de las siguientes opciones: 
  +  Branch como nombre de sucursal. 
  +  ID de confirmación. 
  +  Etiqueta. 

**nota**  
 Puedes especificar la versión de una fuente de solicitudes de extracción solo si tu repositorio es GitHub GitHub Enterprise Server. 

 Si utiliza una referencia y un ID de confirmación para especificar una versión, la fase `DOWNLOAD_SOURCE` de la compilación será más rápida que si proporciona solo la versión. Esto se debe a que, al añadir una referencia, CodeBuild no es necesario descargar todo el repositorio para encontrar la confirmación. 
+ Puede especificar una versión de origen con solo un ID de confirmación, como por ejemplo `12345678901234567890123467890123456789`. Si lo haces, CodeBuild debes descargar todo el repositorio para encontrar la versión.
+ Puede especificar una versión de origen con una referencia y un ID de confirmación en este formato: `refs/heads/branchname^{full-commit-SHA}` (por ejemplo, `refs/heads/main^{12345678901234567890123467890123456789}`). Si lo hace, CodeBuild descarga solo la rama especificada para buscar la versión.

**nota**  
Para acelerar la `DOWNLOAD_SOURCE` fase de compilación, también puedes establecer la **profundidad de clonación de Git** en un número bajo. CodeBuild descarga menos versiones de tu repositorio.

**Topics**
+ [Especifica una versión GitHub del repositorio con un ID de confirmación](sample-source-version-github.md)
+ [Especifique una versión del repositorio con una referencia y un ID de confirmación GitHub](sample-source-version-github-ref.md)

# Especifica una versión GitHub del repositorio con un ID de confirmación
<a name="sample-source-version-github"></a>

Puede especificar una versión de origen con solo un ID de confirmación, como por ejemplo `12345678901234567890123467890123456789`. Si lo haces, CodeBuild debes descargar todo el repositorio para encontrar la versión.

**Para especificar una versión de GitHub repositorio con un ID de confirmación**

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Ejecutar una compilación (consola)](run-build-console.md). Deje todas las opciones con sus valores predeterminados, excepto las siguientes opciones:
   +  En **Source (Código fuente)**: 
     +  En **Proveedor de código fuente**, selecciona. **GitHub** Si no está conectado a GitHub, siga las instrucciones para conectarse. 
     +  En **Repository (Repositorio)**, elija **Public repository (Repositorio público)**. 
     +  En **URL de repositorio**, especifique **https://github.com/aws/aws-sdk-ruby.git** 
   + En **Environment (Entorno)**:
     + En **Environment image (Imagen de entorno)**, elija **Managed image (Imagen administrada)**.
     + En **Operating system (Sistema operativo)**, elija **Amazon Linux 2**.
     + En **Runtime(s) (Tiempo de ejecución)**, elija **Standard (Estándar)**.
     + En **Imagen**, elija **aws/codebuild/amazonlinux-x86\$164-standard:4.0**.

1.  En **Build specifications (Especificaciones de compilación)**, elija **Insert build commands (Insertar comandos de compilación)** y, a continuación, elija **Switch to editor (Cambiar a editor)**. 

1.  En **Build commands (Comandos de compilación)**, reemplace el texto del marcador de posición por lo siguiente: 

   ```
   version: 0.2
   
   phases:
     install:
       runtime-versions:
         ruby: 2.6
     build:
       commands:
          - echo $CODEBUILD_RESOLVED_SOURCE_VERSION
   ```

    La sección `runtime-versions` es obligatoria si utiliza la imagen estándar de Ubuntu 2.0. Aquí, se especifica el tiempo de ejecución de la versión de Ruby 2.6, pero puede usar cualquier tiempo de ejecución. El comando `echo` muestra la versión del código de origen almacenado en la variable de entorno de `CODEBUILD_RESOLVED_SOURCE_VERSION`. 

1.  En **Build configuration (Configuración de la compilación)**, acepte los valores predeterminados y elija **Start build (Comenzar compilación)**. 

1.  En **Versión de origen**, especifique **046e8b67481d53bdc86c3f6affdd5d1afae6d369**. Este es el SHA de una confirmación en el repositorio `https://github.com/aws/aws-sdk-ruby.git`. 

1.  Seleccione **Iniciar la compilación**. 

1.  Cuando se complete la compilación, debería ver lo siguiente: 
   +  En la pestaña **Registros de compilación**, la versión del origen de proyecto que se ha utilizado. A continuación se muestra un ejemplo.

     ```
     [Container] Date Time Running command echo $CODEBUILD_RESOLVED_SOURCE_VERSION 
     046e8b67481d53bdc86c3f6affdd5d1afae6d369
      
     [Container] Date Time Phase complete: BUILD State: SUCCEEDED
     ```
   +  En la pestaña **Variables de entorno**, **Versión de origen resuelta** coincide con el ID de confirmación utilizado para crear la compilación. 
   +  En la pestaña **Detalles de fase**, la duración de la fase `DOWNLOAD_SOURCE`. 

# Especifique una versión del repositorio con una referencia y un ID de confirmación GitHub
<a name="sample-source-version-github-ref"></a>

Puede especificar una versión de origen con una referencia y un ID de confirmación en este formato: `refs/heads/branchname^{full-commit-SHA}` (por ejemplo, `refs/heads/main^{12345678901234567890123467890123456789}`). Si lo haces, CodeBuild descarga solo la rama especificada para buscar la versión.

**Para especificar una versión de GitHub repositorio con una referencia y un ID de confirmación.**

1. Realice los pasos que se indican en [Especifica una versión GitHub del repositorio con un ID de confirmación](sample-source-version-github.md).

1.  En el panel de navegación izquierdo, elija **Proyectos de compilación** y, a continuación, elija el proyecto que creó anteriormente. 

1.  Seleccione **Iniciar la compilación**. 

1.  En **Versión de origen**, especifique **refs/heads/main^\$1046e8b67481d53bdc86c3f6affdd5d1afae6d369\$1**. Es el mismo ID de confirmación y una referencia a una ramificación en el formato `refs/heads/branchname^{full-commit-SHA}`. 

1.  Seleccione **Iniciar la compilación**. 

1. Cuando se complete la compilación, debería ver lo siguiente: 
   +  En la pestaña **Registros de compilación**, la versión del origen de proyecto que se ha utilizado. A continuación se muestra un ejemplo.

     ```
     [Container] Date Time Running command echo $CODEBUILD_RESOLVED_SOURCE_VERSION 
     046e8b67481d53bdc86c3f6affdd5d1afae6d369
      
     [Container] Date Time Phase complete: BUILD State: SUCCEEDED
     ```
   +  En la pestaña **Variables de entorno**, **Versión de origen resuelta** coincide con el ID de confirmación utilizado para crear la compilación. 
   +  En la pestaña **Detalles de fase**, la duración de la fase `DOWNLOAD_SOURCE` debe ser inferior a la duración cuando utilizó solo el ID de confirmación para especificar la versión del origen.

# Muestras de repositorios fuente de terceros para CodeBuild
<a name="sample-third-party-source"></a>

En esta sección se describen ejemplos de integraciones entre repositorios de fuentes de terceros y. CodeBuild


| Muestra | Description (Descripción) | 
| --- | --- | 
|  BitBucket Ejemplo de filtro pull request y webhook: consulte [Ejecuta el ejemplo «Filtro de webhooks y solicitudes de extracción de Bitbucket» para CodeBuild](sample-bitbucket-pull-request.md)  |  En este ejemplo se muestra cómo crear una solicitud de extracción mediante un repositorio de Bitbucket. También se muestra cómo utilizar un webhook de Bitbucket para activar CodeBuild con el fin de crear una compilación de un proyecto.  | 
|  GitHub Ejemplo de Enterprise Server: consulte [Ejecute el ejemplo de GitHub Enterprise Server para CodeBuild](sample-github-enterprise.md)  |  En este ejemplo, se muestra cómo configurar CodeBuild los proyectos cuando el repositorio de GitHub Enterprise Server tiene un certificado instalado. También muestra cómo habilitar los webhooks para que CodeBuild reconstruyan el código fuente cada vez que se introduzca un cambio de código en el repositorio de GitHub Enterprise Server.  | 
|  GitHub Ejemplo de filtro de webhook y pull request: consulta [Ejecuta el ejemplo de filtro de solicitudes de GitHub extracción y webhook para CodeBuild](sample-github-pull-request.md)  |  En este ejemplo, se muestra cómo crear una solicitud de extracción mediante un repositorio de GitHub Enterprise Server. También se muestra cómo habilitar los webhooks para que CodeBuild se reconstruya el código fuente cada vez que se introduce un cambio de código en el repositorio de GitHub Enterprise Server.  | 

# Ejecuta el ejemplo «Filtro de webhooks y solicitudes de extracción de Bitbucket» para CodeBuild
<a name="sample-bitbucket-pull-request"></a>

AWS CodeBuild admite webhooks cuando el repositorio de origen es Bitbucket. Esto significa que, en el caso de un proyecto de CodeBuild compilación cuyo código fuente esté almacenado en un repositorio de Bitbucket, los webhooks se pueden usar para reconstruir el código fuente cada vez que se introduzca un cambio de código en el repositorio. Para obtener más información, consulte [Eventos de webhooks de Bitbucket](bitbucket-webhook.md). 

En este ejemplo se muestra cómo crear una solicitud de extracción mediante un repositorio de Bitbucket. También te muestra cómo usar un webhook de Bitbucket para activar CodeBuild la creación de una compilación de un proyecto.

**nota**  
Al usar webhooks, es posible que un usuario active una compilación de forma inesperada. Para mitigar este riesgo, consulte [Prácticas recomendadas para utilizar webhooks](webhooks.md#webhook-best-practices).

**Topics**
+ [Requisitos previos](#sample-bitbucket-pull-request-prerequisites)
+ [Paso 1: creación de un proyecto de compilación con Bitbucket y habilitación de webhooks](#sample-bitbucket-pull-request-create)
+ [Paso 2: activación de una compilación con un webhook de Bitbucket](#sample-bitbucket-pull-request-trigger)

## Requisitos previos
<a name="sample-bitbucket-pull-request-prerequisites"></a>

 Para ejecutar este ejemplo, debes conectar tu AWS CodeBuild proyecto con tu cuenta de Bitbucket. 

**nota**  
 CodeBuild ha actualizado sus permisos con Bitbucket. Si anteriormente habías conectado tu proyecto a Bitbucket y ahora recibes un error de conexión con Bitbucket, debes volver a conectarte para conceder el CodeBuild permiso de gestión de tus webhooks. 

## Paso 1: creación de un proyecto de compilación con Bitbucket y habilitación de webhooks
<a name="sample-bitbucket-pull-request-create"></a>

 En los siguientes pasos, se describe cómo crear un AWS CodeBuild proyecto con Bitbucket como repositorio de origen y cómo habilitar los webhooks. 

1. [Abre la AWS CodeBuild consola en codebuild/home. https://console.aws.amazon.com/codesuite/](https://console.aws.amazon.com/codesuite/codebuild/home)

1.  Si aparece una página de CodeBuild información, elija **Crear** proyecto de compilación. De lo contrario, en el panel de navegación, expanda **Compilar**, elija **Proyectos de compilación** y, a continuación, elija **Crear proyecto de compilación**. 

1. Elija **Crear el proyecto de compilación**. 

1. En **Project configuration (Configuración del proyecto)**:  
**Nombre del proyecto**  
Introduzca un nombre para este proyecto de compilación. Los nombres de los proyectos de compilación deben ser únicos en cada AWS cuenta. También puede introducir una descripción opcional del proyecto de compilación para ayudar a otros usuarios a entender para qué se utiliza el proyecto.

1. En **Source (Código fuente)**:  
**Proveedor de fuentes**  
Seleccione **Bitbucket**. Siga las instrucciones para conectarse (o volver a conectarse) a Bitbucket y, a continuación, elija **Autorizar**.  
**Repositorio**  
Seleccione **Repositorio en mi cuenta de Bitbucket**.  
Si no se ha conectado previamente a su cuenta de Bitbucket, introduzca su nombre de usuario y contraseña de aplicación de Bitbucket y seleccione **Guardar las credenciales de Bitbucket**.  
**Repositorio de Bitbucket**  
Introduzca la URL de su repositorio de Bitbucket.

1. En **Eventos de webhook de origen principal**, seleccione lo siguiente. 
**nota**  
La sección **Eventos de webhook de origen principal** solo está visible si se ha seleccionado **Repositorio en mi cuenta de Bitbucket** en el paso anterior.

   1. Cuando cree el proyecto, seleccione **Rebuild every time a code change is pushed to this repository (Volver a compilar cada vez que se inserte un cambio de código en este repositorio)**. 

   1. En **Event type (Tipo de evento)**, seleccione uno o varios eventos. 

   1. Para filtrar en función de cuándo un evento va a desencadenar una compilación, en **Start a build under these conditions (Iniciar una compilación en estas condiciones)**, añada uno o varios filtros opcionales. 

   1. Para filtrar en función de cuándo no se va a desencadenar un evento, en **Don't start a build under these conditions (No iniciar una compilación en estas condiciones)**, añada uno o varios filtros opcionales. 

   1. Seleccione **Añadir grupo de filtros** para añadir otro grupo de filtros. 

   Para obtener más información sobre los filtros y tipos de eventos de webhook de Bitbucket, consulte [Eventos de webhooks de Bitbucket](bitbucket-webhook.md).

1. En **Environment (Entorno)**:  
**Imagen del entorno**  
Seleccione una de las siguientes opciones:    
Para usar una imagen de Docker gestionada por AWS CodeBuild:  
Elija **Imagen administrada** y después elija opciones en **Sistema operativo**, **Tiempo de ejecución**, **Imagen** y **Versión de imagen**. Realice una selección en **Environment type (Tipo de entorno)** si está disponible.  
Para utilizar otra imagen de Docker:   
Elija **Imagen personalizada**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. Si elige **Otro registro**, en **URL de registro externo**, introduzca el nombre y etiqueta de la imagen de Docker en Docker Hub, usando el formato `docker repository/docker image name`. Si elige **Amazon ECR**, utilice el **repositorio de Amazon ECR** y la imagen de **Amazon ECR para elegir la imagen** de Docker en su cuenta. AWS   
Para usar una imagen de Docker privada:  
Elija **Imagen personalizada**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. En **Image registry (Registro de imagen)**, elija **Other registry (Otro registro)** y, a continuación, introduzca el ARN de las credenciales para su imagen de Docker privada. Es necesario crear las credenciales con Secrets Manager. [Para obtener más información, consulte ¿Qué es? AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) en la *Guía AWS Secrets Manager del usuario*.  
**Rol de servicio**  
Seleccione una de las siguientes opciones:  
   + Si no tiene un rol de CodeBuild servicio, elija **Nuevo rol de servicio**. Escriba un nombre para el nuevo rol en el campo **Role Name**.
   + Si tiene un rol CodeBuild de servicio, elija el **rol de servicio existente**. En **ARN de rol**, seleccione el rol de servicio.
Cuando utilizas la consola para crear o actualizar un proyecto de compilación, puedes crear un rol de CodeBuild servicio al mismo tiempo. De forma predeterminada, el rol funciona solamente con ese proyecto de compilación. Si utiliza la consola para asociar este rol de servicio a otro proyecto de compilación, el rol se actualizará para que funcione con el otro proyecto de compilación. Un rol de servicio puede funcionar con hasta diez proyectos de compilación.

1. En **Archivo de especificación de compilación**, realice alguna de las operaciones siguientes:
   + Seleccione **Usar un archivo de especificaciones de compilación** para utilizar el archivo buyildspec.yml que figura en el directorio raíz del código fuente.
   + Elija **Insertar comandos de compilación** para usar la consola para insertar comandos de compilación.

   Para obtener más información, consulte la [Referencia de la especificación de compilación](build-spec-ref.md).

1. En **Artifacts (Artefactos)**:  
**Tipo**  
Seleccione una de las siguientes opciones:  
   + Si no desea crear ningún artefacto de salida de la compilación, elija **No artifacts (Sin artefactos)**.
   + Para almacenar la salida de la compilación en un bucket de S3, seleccione **Amazon S3** y, a continuación, haga lo siguiente:
     + Si desea utilizar su nombre de proyecto para el archivo ZIP o carpeta de salida de la compilación, deje en blanco **Nombre**. De lo contrario, escriba el nombre. De forma predeterminada, el nombre del artefacto es el nombre del proyecto. Si desea usar otro nombre, escríbalo en el cuadro de nombre de artefactos. Si desea producir un archivo ZIP, incluya la extensión zip.
     + En **Bucket name (Nombre del bucket)**, seleccione el nombre del bucket de salida.
     + Si eligió **Insert build commands (Insertar comandos de compilación)** anteriormente en este procedimiento, en **Output files (Archivos de salida)**, escriba las ubicaciones de los archivos de la compilación que desea incluir en el archivo ZIP o carpeta de salida de la compilación. Si hay varias ubicaciones, separe cada una de las ubicaciones con una coma (por ejemplo, `appspec.yml, target/my-app.jar`). Para obtener más información, consulte la descripción de `files` en [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax).  
**Configuración adicional**  
Expanda **Additional configuration (Configuración adicional)** y establezca las opciones según sea necesario.

1. Elija **Crear el proyecto de compilación**. En la página **Review (Revisar)**, elija **Start build (Comenzar compilación)** para ejecutar la compilación.

## Paso 2: activación de una compilación con un webhook de Bitbucket
<a name="sample-bitbucket-pull-request-trigger"></a>

En el caso de un proyecto que usa webhooks de Bitbucket, AWS CodeBuild crea una compilación cuando el repositorio de Bitbucket detecta un cambio en el código fuente. 

1. [Abre la AWS CodeBuild consola en codebuild/home. https://console.aws.amazon.com/codesuite/](https://console.aws.amazon.com/codesuite/codebuild/home)

1. En el panel de navegación, elija **Build projects (Proyectos de compilación)** y, a continuación, elija un proyecto asociado a un repositorio de Bitbucket con webhooks. Para obtener información sobre cómo crear un proyecto con webhook de Bitbucket, consulte [Paso 1: creación de un proyecto de compilación con Bitbucket y habilitación de webhooks](#sample-bitbucket-pull-request-create). 

1. Realice algunos cambios en el código en el repositorio de Bitbucket del proyecto. 

1. Cree una solicitud de extracción en su repositorio de Bitbucket. Para obtener más información, consulte el artículo sobre [cómo crear una solicitud de extracción](https://www.atlassian.com/git/tutorials/making-a-pull-request). 

1. En la página de webhooks de Bitbucket, elija **View request (Ver solicitud)** para ver una lista de eventos recientes. 

1. Selecciona **Ver detalles** para ver los detalles de la respuesta devuelta por. CodeBuild Debe ser similar al siguiente: 

   ```
   "response":"Webhook received and build started: https://us-east-1.console.aws.amazon.com/codebuild/home..."
   "statusCode":200
   ```

1. Vaya a la página de solicitudes de extracción de Bitbucket para ver el estado de la compilación. 

# Ejecute el ejemplo de GitHub Enterprise Server para CodeBuild
<a name="sample-github-enterprise"></a>

AWS CodeBuild admite GitHub Enterprise Server como repositorio de origen. En este ejemplo se muestra cómo configurar CodeBuild los proyectos cuando el repositorio de GitHub Enterprise Server tiene un certificado instalado. También se muestra cómo habilitar los webhooks para que CodeBuild se reconstruya el código fuente cada vez que se introduzca un cambio de código en el repositorio de GitHub Enterprise Server.

**Topics**
+ [Requisitos previos](#sample-github-enterprise-prerequisites)
+ [Paso 1: Cree un proyecto de compilación con GitHub Enterprise Server y habilite los webhooks](#sample-github-enterprise-running)

## Requisitos previos
<a name="sample-github-enterprise-prerequisites"></a>

1. Genera un token de acceso personal para tu proyecto. CodeBuild Le recomendamos que cree un usuario GitHub empresarial y genere un token de acceso personal para este usuario. Cópielo en el portapapeles para que pueda usarlo al crear su CodeBuild proyecto. Para obtener más información, consulte [Crear un token de acceso personal para la línea de comandos](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/) en el sitio web de GitHub ayuda.

   Cuando cree el token de acceso personal, incluya el ámbito del **repositorio** en la definición.  
![\[El ámbito del repositorio en la definición.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/scopes.png)

1. Descargue su certificado desde GitHub Enterprise Server. CodeBuild utiliza el certificado para establecer una conexión SSL de confianza con el repositorio.

   **Clientes Linux/macOS:**

   En una ventana de terminal de , ejecute el siguiente comando:

   ```
   echo -n | openssl s_client -connect HOST:PORTNUMBER \
       | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /folder/filename.pem
   ```

   Sustituya los marcadores de posición del comando por los siguientes valores:

   *HOST*. La dirección IP de su repositorio de GitHub Enterprise Server.

   *PORTNUMBER*. El número de puerto que utiliza para conectarse (por ejemplo, 443).

   *folder*. La carpeta en la que descargó el certificado.

   *filename*. El nombre del archivo de su certificado.
**importante**  
Guarde el certificado como un archivo .pem.

   **Clientes de Windows:**

   Utilice su navegador para descargar el certificado de GitHub Enterprise Server. Para ver los detalles del certificado del sitio, seleccione el icono del candado. Para obtener información sobre cómo exportar el certificado, consulte la documentación del navegador.
**importante**  
Guarde el certificado como un archivo .pem.

1. Cargue el archivo de certificado en un bucket de S3. Para obtener información acerca de cómo crear un bucket de S3, consulte [¿Cómo puedo crear un bucket de S3?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket.html) Para obtener información acerca de cómo cargar objetos en un bucket de S3, consulte [¿Cómo puedo cargar archivos y carpetas en un bucket?](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)
**nota**  
Este depósito debe estar en la misma AWS región que sus compilaciones. Por ejemplo, si indicas CodeBuild que se ejecute una compilación en la región EE.UU. Este (Ohio), el bucket debe estar en la región EE.UU. Este (Ohio).

## Paso 1: Cree un proyecto de compilación con GitHub Enterprise Server y habilite los webhooks
<a name="sample-github-enterprise-running"></a>

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Si aparece una página de CodeBuild información, elija **Crear** proyecto de compilación. De lo contrario, en el panel de navegación, expanda **Compilar**, elija **Proyectos de compilación** y, a continuación, elija **Crear proyecto de compilación**. 

1. En **Project name (Nombre de proyecto)**, escriba un nombre para este proyecto de compilación. Los nombres de los proyectos de compilación deben ser únicos en cada AWS cuenta. También puede introducir una descripción opcional del proyecto de compilación para ayudar a otros usuarios a entender para qué se utiliza el proyecto.

1. En **Fuente**, en **Proveedor de fuentes**, selecciona **GitHub Enterprise Server**.
   + Seleccione **Administrar credenciales de cuenta** y, a continuación, **Token de acceso personal**. En **Servicio**, seleccione **Secrets Manager (recomendado)** y configure su secreto. A continuación**, en Token de acceso personal GitHub empresarial**, introduce tu token de acceso personal y selecciona **Guardar**.
   + En **Repository URL (URL del repositorio)**, escriba la ruta al repositorio, incluido el nombre del repositorio.
   + Expanda **Configuración adicional**.
   + Seleccione **Rebuild every time a code change is pushed to this repository (Volver a compilar cada vez que un cambio de código se inserte en el repositorio)** para recompilar cada vez que se inserte un cambio de código en este repositorio.
   + Selecciona **Activar SSL inseguro** para ignorar las advertencias de SSL mientras te conectas al repositorio de proyectos de GitHub Enterprise Server.
**nota**  
Le recomendamos que solamente utilice **Enable insecure SSL (Habilitar SSL no seguro)** para realizar pruebas. No debe utilizarse en un entorno de producción.  
![\[La configuración del repositorio de proyectos de GitHub Enterprise Server.\]](http://docs.aws.amazon.com/es_es/codebuild/latest/userguide/images/github-enterprise.png)

1. En **Environment (Entorno)**:

   En **Environment image (Imagen del entorno)**, realice alguna de las siguientes operaciones:
   + Para usar una imagen de Docker gestionada por AWS CodeBuild, elija **Imagen gestionada** y, a continuación, seleccione **Sistema operativo**, **Tiempo de ejecución**, **Imagen** y **Versión de la imagen**. Realice una selección en **Environment type (Tipo de entorno)** si está disponible.
   + Para usar otra imagen de Docker, elija **Custom image (Imagen personalizada)**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. Si elige **Otro registro**, en **URL de registro externo**, introduzca el nombre y etiqueta de la imagen de Docker en Docker Hub, usando el formato `docker repository/docker image name`. Si elige **Amazon ECR**, utilice el **repositorio de Amazon ECR** y la imagen de **Amazon ECR para elegir la imagen** de Docker en su cuenta. AWS 
   + Para usar una imagen de Docker privada, elija **Imagen personalizada**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. En **Image registry (Registro de imagen)**, elija **Other registry (Otro registro)** y, a continuación, introduzca el ARN de las credenciales para su imagen de Docker privada. Es necesario crear las credenciales con Secrets Manager. Para obtener más información, consulte [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) en la *Guía del usuario de AWS Secrets Manager *.

1. En **Service role (Rol de servicio)**, realice una de las operaciones siguientes:
   + **Si no tiene un rol de CodeBuild servicio, elija Nuevo rol de servicio.** Escriba un nombre para el nuevo rol en el campo **Role Name**.
   + Si tiene un rol CodeBuild de servicio, elija el **rol de servicio existente**. En **ARN de rol**, seleccione el rol de servicio.
**nota**  
Cuando utilizas la consola para crear o actualizar un proyecto de compilación, puedes crear un rol de CodeBuild servicio al mismo tiempo. De forma predeterminada, el rol funciona solamente con ese proyecto de compilación. Si utiliza la consola para asociar este rol de servicio a otro proyecto de compilación, el rol se actualizará para que funcione con el otro proyecto de compilación. Un rol de servicio puede funcionar con hasta diez proyectos de compilación.

1. Expanda **Configuración adicional**.

   Si quieres CodeBuild trabajar con tu VPC:
   + Para la **VPC**, elija el ID de VPC que utilice. CodeBuild 
   + Para las subredes de **VPC, elija las subredes** que incluyen los recursos que utiliza. CodeBuild 
   + Para los **grupos de seguridad de VPC**, elija los grupos de seguridad que se CodeBuild utilizan para permitir el acceso a los recursos de. VPCs

   Para obtener más información, consulte [Úselo AWS CodeBuild con Amazon Virtual Private Cloud](vpc-support.md).

1. En **Archivo de especificación de compilación**, realice alguna de las operaciones siguientes:
   + Seleccione **Usar un archivo de especificaciones de compilación** para utilizar el archivo buyildspec.yml que figura en el directorio raíz del código fuente.
   + Elija **Insertar comandos de compilación** para usar la consola para insertar comandos de compilación.

   Para obtener más información, consulte la [Referencia de la especificación de compilación](build-spec-ref.md).

1. En **Artifacts (Artefactos)**, en **Type (Tipo)**, realice una de las siguientes operaciones:
   + Si no desea crear ningún artefacto de salida de la compilación, elija **No artifacts (Sin artefactos)**.
   + Para almacenar la salida de la compilación en un bucket de S3, seleccione **Amazon S3** y, a continuación, haga lo siguiente:
     + Si desea utilizar su nombre de proyecto para el archivo ZIP o carpeta de salida de la compilación, deje en blanco **Nombre**. De lo contrario, escriba el nombre. De forma predeterminada, el nombre del artefacto es el nombre del proyecto. Si desea usar otro nombre, escríbalo en el cuadro de nombre de artefactos. Si desea producir un archivo ZIP, incluya la extensión zip.
     + En **Bucket name (Nombre del bucket)**, seleccione el nombre del bucket de salida.
     + Si eligió **Insert build commands (Insertar comandos de compilación)** anteriormente en este procedimiento, en **Output files (Archivos de salida)**, escriba las ubicaciones de los archivos de la compilación que desea incluir en el archivo ZIP o carpeta de salida de la compilación. Si hay varias ubicaciones, separe cada una de las ubicaciones con una coma (por ejemplo, `appspec.yml, target/my-app.jar`). Para obtener más información, consulte la descripción de `files` en [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax).

1. En **Tipo de caché**, seleccione una de las opciones siguientes:
   + Si no desea usar una memoria caché, seleccione **Sin caché**.
   + Si prefiere utilizar una caché de Amazon S3, seleccione **Amazon S3** y haga lo siguiente:
     + En **Bucket**, señeccopme el nombre del bucket de S3 donde se almacena la caché.
     + (Opcional) Para **Prefijo de ruta de caché**, escriba un prefijo de ruta de Amazon S3. El valor **Prefijo de ruta de caché** es similar a un nombre de directorio. Le permite almacenar la caché en el mismo directorio en un bucket. 
**importante**  
No añada una barra (/) al final del prefijo de ruta.
   +  Si desea utilizar una caché local, seleccione **Local** y elija uno o varios modos de caché local. 
**nota**  
El modo de caché de capas de Docker solo está disponible para Linux. Si lo selecciona, el proyecto deberá ejecutarse en modo con privilegios. 

   El uso de memoria caché ahorra mucho tiempo de compilación, ya que algunas partes reutilizables del entorno de compilación se almacenan en ella y se usan en las distintas compilaciones. Para obtener información acerca de cómo especificar una caché en el archivo de especificación de compilación, consulte [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax). Para obtener más información acerca del almacenamiento en caché, consulte [Almacenamiento de las compilaciones en caché para mejorar el rendimiento](build-caching.md). 

1. Elija **Crear el proyecto de compilación**. En la página del proyecto de compilación, elija **Start build (Iniciar compilación)**.

# Ejecuta el ejemplo de filtro de solicitudes de GitHub extracción y webhook para CodeBuild
<a name="sample-github-pull-request"></a>

AWS CodeBuild admite webhooks cuando el repositorio fuente lo es GitHub. Esto significa que, en el caso de un proyecto de CodeBuild compilación que tiene su código fuente almacenado en un GitHub repositorio, los webhooks se pueden usar para reconstruir el código fuente cada vez que se introduce un cambio de código en el repositorio. Para ver CodeBuild ejemplos, consulta [AWS CodeBuild Ejemplos](https://github.com/aws-samples/aws-codebuild-samples).

**nota**  
Al usar webhooks, es posible que un usuario active una compilación de forma inesperada. Para mitigar este riesgo, consulte [Prácticas recomendadas para utilizar webhooks](webhooks.md#webhook-best-practices).

**Topics**
+ [Paso 1: Crea un proyecto de compilación con webhooks GitHub y actívalos](#sample-github-pull-request-running)
+ [Paso 2: comprobación de que los webhooks estén habilitados](#verification-checks)

## Paso 1: Crea un proyecto de compilación con webhooks GitHub y actívalos
<a name="sample-github-pull-request-running"></a>

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1.  Si aparece una página de CodeBuild información, elija **Crear** proyecto de compilación. De lo contrario, en el panel de navegación, expanda **Compilar**, elija **Proyectos de compilación** y, a continuación, elija **Crear proyecto de compilación**. 

1. Elija **Crear el proyecto de compilación**. 

1. En **Project configuration (Configuración del proyecto)**:  
**Nombre del proyecto**  
Introduzca un nombre para este proyecto de compilación. Los nombres de los proyectos de compilación deben ser únicos en cada AWS cuenta. También puede introducir una descripción opcional del proyecto de compilación para ayudar a otros usuarios a entender para qué se utiliza el proyecto.

1. En **Source (Código fuente)**:  
**Proveedor de fuentes**  
Elija **GitHub**. Sigue las instrucciones para conectarte (o volver a conectarte) GitHub y, a continuación, selecciona **Autorizar**.  
**Repositorio**  
Selecciona **Repositorio en mi GitHub cuenta.**  
**GitHub repositorio**  
Introduce la URL de tu GitHub repositorio.

1. En **Eventos de webhook de origen principal**, seleccione lo siguiente.
**nota**  
La sección de **eventos de webhook de la fuente principal** solo está visible si seleccionaste **Repositorio en mi GitHub cuenta** en el paso anterior.

   1. Cuando cree el proyecto, seleccione **Rebuild every time a code change is pushed to this repository (Volver a compilar cada vez que se inserte un cambio de código en este repositorio)**. 

   1. En **Event type (Tipo de evento)**, seleccione uno o varios eventos. 

   1. Para filtrar en función de cuándo un evento va a desencadenar una compilación, en **Start a build under these conditions (Iniciar una compilación en estas condiciones)**, añada uno o varios filtros opcionales. 

   1. Para filtrar en función de cuándo no se va a desencadenar un evento, en **Don't start a build under these conditions (No iniciar una compilación en estas condiciones)**, añada uno o varios filtros opcionales. 

   1. Seleccione **Añadir grupo de filtros** para añadir otro grupo de filtros. 

   Para obtener más información sobre los filtros y tipos de eventos de GitHub webhook, consulte. [GitHub eventos de webhook](github-webhook.md)

1. En **Environment (Entorno)**:  
**Imagen del entorno**  
Seleccione una de las siguientes opciones:    
Para usar una imagen de Docker gestionada por: AWS CodeBuild  
Elija **Imagen administrada** y después elija opciones en **Sistema operativo**, **Tiempo de ejecución**, **Imagen** y **Versión de imagen**. Realice una selección en **Environment type (Tipo de entorno)** si está disponible.  
Para utilizar otra imagen de Docker:   
Elija **Imagen personalizada**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. Si elige **Otro registro**, en **URL de registro externo**, introduzca el nombre y etiqueta de la imagen de Docker en Docker Hub, usando el formato `docker repository/docker image name`. Si ha seleccionado **Amazon ECR**, use **Repositorio de Amazon ECR** e **Imagen de Amazon ECR** para elegir la imagen de Docker en su cuenta de AWS .  
Para usar una imagen de Docker privada:  
Elija **Imagen personalizada**. En **Tipo de entorno**, elija **ARM**, **Linux**, **GPU de Linux** o **Windows**. En **Image registry (Registro de imagen)**, elija **Other registry (Otro registro)** y, a continuación, introduzca el ARN de las credenciales para su imagen de Docker privada. Es necesario crear las credenciales con Secrets Manager. Para obtener más información, consulte [¿Qué es? AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/) en la *Guía AWS Secrets Manager del usuario*.  
**Rol de servicio**  
Seleccione una de las siguientes opciones:  
   + Si no tiene un rol de CodeBuild servicio, elija **Nuevo rol de servicio**. Escriba un nombre para el nuevo rol en el campo **Role Name**.
   + Si tiene un rol CodeBuild de servicio, elija el **rol de servicio existente**. En **ARN de rol**, seleccione el rol de servicio.
Cuando utilizas la consola para crear o actualizar un proyecto de compilación, puedes crear un rol de CodeBuild servicio al mismo tiempo. De forma predeterminada, el rol funciona solamente con ese proyecto de compilación. Si utiliza la consola para asociar este rol de servicio a otro proyecto de compilación, el rol se actualizará para que funcione con el otro proyecto de compilación. Un rol de servicio puede funcionar con hasta diez proyectos de compilación.

1. En **Archivo de especificación de compilación**, realice alguna de las operaciones siguientes:
   + Seleccione **Usar un archivo de especificaciones de compilación** para utilizar el archivo buyildspec.yml que figura en el directorio raíz del código fuente.
   + Elija **Insertar comandos de compilación** para usar la consola para insertar comandos de compilación.

   Para obtener más información, consulte la [Referencia de la especificación de compilación](build-spec-ref.md).

1. En **Artifacts (Artefactos)**:  
**Tipo**  
Seleccione una de las siguientes opciones:  
   + Si no desea crear ningún artefacto de salida de la compilación, elija **No artifacts (Sin artefactos)**.
   + Para almacenar la salida de la compilación en un bucket de S3, seleccione **Amazon S3** y, a continuación, haga lo siguiente:
     + Si desea utilizar su nombre de proyecto para el archivo ZIP o carpeta de salida de la compilación, deje en blanco **Nombre**. De lo contrario, escriba el nombre. De forma predeterminada, el nombre del artefacto es el nombre del proyecto. Si desea usar otro nombre, escríbalo en el cuadro de nombre de artefactos. Si desea producir un archivo ZIP, incluya la extensión zip.
     + En **Bucket name (Nombre del bucket)**, seleccione el nombre del bucket de salida.
     + Si eligió **Insert build commands (Insertar comandos de compilación)** anteriormente en este procedimiento, en **Output files (Archivos de salida)**, escriba las ubicaciones de los archivos de la compilación que desea incluir en el archivo ZIP o carpeta de salida de la compilación. Si hay varias ubicaciones, separe cada una de las ubicaciones con una coma (por ejemplo, `appspec.yml, target/my-app.jar`). Para obtener más información, consulte la descripción de `files` en [Sintaxis de buildspec](build-spec-ref.md#build-spec-ref-syntax).  
**Configuración adicional**  
Expanda **Additional configuration (Configuración adicional)** y establezca las opciones según sea necesario.

1. Elija **Crear el proyecto de compilación**. En la página **Review (Revisar)**, elija **Start build (Comenzar compilación)** para ejecutar la compilación.

## Paso 2: comprobación de que los webhooks estén habilitados
<a name="verification-checks"></a>

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. En el panel de navegación, elija **Proyectos de compilación**.

1. Realice una de las siguientes acciones:
   + Elija el enlace del proyecto de compilación con webhooks que desea verificar y, a continuación, seleccione **Build details (Detalles de compilación)**.
   + Seleccione el botón de opción situado junto al proyecto de compilación con webhooks que desea verificar, elija **Ver detalles** y, a continuación, elija la pestaña **Detalles de compilación**.

1. En los **eventos de webhook de la fuente principal**, seleccione el enlace a la URL del **Webhook**. 

1. **En tu GitHub repositorio, en la página de **configuración**, en **Webhooks**, comprueba que estén seleccionadas **las solicitudes de extracción y inserción**.**

1. En la configuración GitHub de tu perfil, en **Configuración personal**, **Aplicaciones** y ** OAuthAplicaciones autorizadas**, verás que tu aplicación está autorizada a acceder a la AWS región que seleccionaste.

# Tutorial: Firma de código de Apple con Fastlane al CodeBuild usar S3 para el almacenamiento de certificados
<a name="sample-fastlane"></a>

[fastlane](https://docs.fastlane.tools/) es una conocida herramienta de automatización de código abierto para automatizar implementaciones y versiones beta de aplicaciones iOS y Android. Se encarga de todas las tareas tediosas, como generar capturas de pantalla, administrar la firma de código y publicar la aplicación.

## Requisitos previos
<a name="sample-fastlane-prerequisites"></a>

Para completar este tutorial, debe configurar lo siguiente:
+ ¿Un Cuenta de AWS
+ Una [cuenta de desarrollador de Apple](https://developer.apple.com/)
+ Un bucket de S3 para almacenar certificados
+ fastlane instalado en el proyecto: [Guía](https://docs.fastlane.tools/getting-started/ios/setup/) para instalar fastlane

## Paso 1: configuración de Fastlane Match con S3 en el equipo local
<a name="sample-fastlane-S3"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) es una de las [herramientas de Fastlane](https://fastlane.tools/) y permite configurar sin problemas la firma de código tanto en tu entorno de desarrollo local como en otros entornos. CodeBuild Fastlane Match almacena todos sus certificados de firma de código y perfiles de aprovisionamiento en un almacenamiento en repository/S3 Bucket/Google la nube de Git, y descarga e instala los certificados y perfiles necesarios cuando es necesario.

En este ejemplo de configuración, configurará y usará un bucket de Amazon S3 para almacenamiento. 

****

1. Inicialice match en el proyecto:

   ```
   fastlane match init
   ```

1. Cuando se le solicite, elija S3 como modo de almacenamiento.

1. Actualice “*Matchfile*” para usar S3:

   ```
   storage_mode("s3")
      s3_bucket("your-s3-bucket-name")
      s3_region("your-aws-region")
      type("appstore") # The default type, can be: appstore, adhoc, enterprise or development
   ```

## Paso 2: configuración del Fastfile
<a name="sample-fastlane-S3-fastfile"></a>

Cree o actualice el “Fastfile” con el siguiente flujo.

 CodeBuildActivado, tendrás que ejecutar Fastlane Match cada vez que crees y firmes tu aplicación. La forma más sencilla de hacerlo es agregar la acción `match` al flujo que compila la aplicación.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**nota**  
Asegúrese de agregar `setup_ci` a la sección `before_all ` de `Fastfile` para que la acción de búsqueda de coincidencias funcione correctamente. Esto garantiza el uso de un llavero de Fastlane temporal con los permisos adecuados. Si no lo usa, es posible que se produzcan errores de compilación o resultados incoherentes. 



## Paso 3: ejecución del comando `fastlane match` para generar los certificados y perfiles correspondientes
<a name="sample-fastlane-S3-certificates"></a>

El comando fastlane match para el tipo indicado (por ejemplo, desarrollo, tienda de aplicaciones, ad hoc, empresa) generará el certificado y el perfil si no están disponibles en el almacén remoto. Fastlane almacenará los certificados y los perfiles en S3.

```
bundle exec fastlane match appstore
```

La ejecución del comando será interactiva y fastlane solicitará establecer una frase de contraseña para descifrar los certificados.

## Paso 4: creación del archivo de aplicación para el proyecto
<a name="sample-fastlane-S3-appfile"></a>

Cree o agregue el archivo de aplicación que corresponda a su proyecto.

****

1. Cree o agregue [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) en función de los requisitos de creación del proyecto.

1. Confirmación de los cambios al repositorio remoto

## Paso 5: creación de variables de entorno en Secrets Manager
<a name="sample-fastlane-S3-secrets"></a>

Cree dos secretos para almacenar la cookie de sesión de fastlane y la frase de contraseña coincidente. Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte [Creación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

****

1. Acceda a la cookie de sesión de fastlane de la siguiente forma.

   1. Clave del secreto: `FASTLANE_SESSION`

   1. Valor secreto: cookie de sesión generada al ejecutar el siguiente comando en el equipo local.
**nota**  
Este valor está disponible después de la autenticación en un archivo local: `~/.fastlane/spaceship/my_appleid_username/cookie`.

      ```
      fastlane spaceauth -u <apple account>
      ```

1. Contraseña de Fastlane Match: para que Fastlane Match pueda descifrar los certificados y perfiles almacenados en el depósito de S3, es necesario añadir la contraseña de cifrado que configuró en el paso de configuración de Match a las variables de entorno del proyecto. CodeBuild

   1. Clave del secreto: `MATCH_PASSWORD`

   1. Valor del secreto: *<match passphrase to decrypt certificates>* La frase de contraseña se establece al generar los certificados en el paso 3.

**nota**  
Al crear los secretos anteriores en Secrets Manager, recuerde dar un nombre de secreto con el siguiente prefijo: `/CodeBuild/`

## Paso 6: creación de una flota de computación
<a name="sample-fastlane-S3-fleet"></a>

Cree la flota de computación para el proyecto.

****

1. En la consola, vaya a y cree una nueva flota de CodeBuild procesamiento.

1. Elija “macOS” como sistema operativo y seleccione un tipo de computación y una imagen adecuados.

## Paso 7: Crea un proyecto en CodeBuild
<a name="sample-fastlane-S3-project"></a>

Crea tu proyecto en CodeBuild.



****

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Ejecutar una compilación (consola)](run-build-console.md).

1. Configura tu proveedor de código fuente (por ejemplo,). GitHub CodeCommit Este es el repositorio de origen de proyectos de iOS y no el repositorio de certificados.

1.  En **Environment (Entorno)**: 
   + Elija **Capacidad reservada**.
   + En **Flota**, seleccione la flota creada anteriormente.
   + Proporcione el nombre del rol de servicio que CodeBuild se va a crear para usted.
   + Proporcione las siguientes variables de entorno.
     + Nombre:`MATCH_PASSWORD`, Valor:*<secrets arn>*, Tipo: Secrets Manager (el ARN secreto se creó en el paso 5 para MATCH\$1PASSWORD)
     + Nombre:`FASTLANE_SESSION`, Valor:*<secrets arn>*, Tipo: Secrets Manager (el ARN de secretos creado en el paso 5 para FASTLANE\$1SESSION)

1. En **Buildspec**, agregue lo siguiente:

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## Paso 8: configuración del rol de IAM
<a name="sample-fastlane-S3-role"></a>

Una vez creado el proyecto, asegúrese de que el rol de servicio del CodeBuild proyecto tenga permisos para acceder al depósito de S3 que contiene los certificados. Agregue la siguiente política al rol:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::your-s3-bucket-name/*"
        }
    ]
}
```

------

## Paso 9: ejecución de la compilación
<a name="sample-fastlane-S3-run"></a>

Ejecute la compilación. Puedes revisar el estado de la compilación e iniciar sesión CodeBuild.

Una vez que se haya completado el trabajo, podrá ver el registro de este.

## Resolución de problemas
<a name="sample-fastlane-S3-troubleshooting"></a>
+ Si tiene problemas al obtener certificados, asegúrese de que los permisos de IAM estén configurados correctamente para el acceso a S3.
+ Si tiene problemas al descifrar certificados, asegúrese de establecer la frase contraseña correcta en la variable de entorno MATCH\$1PASSWORD.
+ En caso de problemas con la firma de código, compruebe que la cuenta de desarrollador de Apple tiene los certificados y los perfiles necesarios y que el identificador de agrupación del proyecto de Xcode coincide con el del perfil de aprovisionamiento.

## Consideraciones de seguridad
<a name="sample-fastlane-considerations"></a>

Tenga en cuenta los siguientes aspectos de seguridad en este tutorial.
+ Asegúrese de que el bucket de S3 tenga la configuración de seguridad adecuada, incluido cifrado en reposo. En concreto, asegúrate de que el depósito no tenga acceso público y restringe el acceso únicamente CodeBuild al sistema al que debe acceder.
+ Considere usarlo AWS Secrets Manager para almacenar información confidencial, como MATCH\$1PASSWORD y FASTLANE\$1SESSION.

En este ejemplo, se proporciona una configuración para la firma de código de iOS con Fastlane CodeBuild mediante Amazon S3 para el almacenamiento de certificados. Es posible que tengas que ajustar algunos pasos en función de los requisitos y el CodeBuild entorno específicos de tu proyecto. Este enfoque aprovecha los AWS servicios para mejorar la seguridad y la integración dentro del AWS ecosistema.

# Tutorial: La firma de código de Apple con Fastlane se CodeBuild utiliza GitHub para el almacenamiento de certificados
<a name="sample-fastlane-github"></a>

[fastlane](https://docs.fastlane.tools/) es una conocida herramienta de automatización de código abierto para automatizar implementaciones y versiones beta de aplicaciones iOS y Android. Se encarga de todas las tareas tediosas, como generar capturas de pantalla, administrar la firma de código y publicar la aplicación.

En este ejemplo, se muestra cómo configurar la firma de código de Apple mediante Fastlane en un CodeBuild proyecto que se ejecuta en una flota de Mac, GitHub como almacenamiento para certificados y perfiles de aprovisionamiento.

## Requisitos previos
<a name="sample-fastlane-github-prerequisites"></a>

Para completar este tutorial, debe configurar lo siguiente:
+ ¿Un Cuenta de AWS
+ Una [cuenta de desarrollador de Apple](https://developer.apple.com/)
+ Un GitHub repositorio privado para almacenar certificados
+ fastlane instalado en el proyecto: [Guía](https://docs.fastlane.tools/getting-started/ios/setup/) para instalar fastlane

## Paso 1: Configura Fastlane Match con GitHub en tu máquina local
<a name="sample-fastlane-github-certificates"></a>

[Fastlane Match](https://docs.fastlane.tools/actions/match/) es una de las [herramientas de Fastlane](https://fastlane.tools/) y permite configurar sin problemas la firma de código tanto en tu entorno de desarrollo local como en otros entornos. CodeBuild Fastlane Match almacena todos sus certificados de firma de código y perfiles de aprovisionamiento en un almacenamiento en repository/S3 Bucket/Google la nube de Git, y descarga e instala los certificados y perfiles necesarios cuando es necesario.

En este ejemplo de configuración, configuraremos y usaremos un repositorio de Git para almacenamiento. 

****

1. Inicialice match en el proyecto:

   ```
   fastlane match init
   ```

1. Cuando se te pida, elige el modo de GitHub almacenamiento.

1. Actualice su *`Matchfile* `para usar GitHub:

   ```
   git_url("https://github.com/your-username/your-certificate-repo.git")
   storage_mode("git")
   type("development") # The default type, can be: appstore, adhoc, enterprise or development
   ```

**nota**  
Asegúrate de introducir la URL HTTPS del repositorio de Git para que fastlane se autentique y clone correctamente. De lo contrario, puede aparecer un error de autenticación al intentar utilizar coincidencia.

## Paso 2: configuración del Fastfile
<a name="sample-fastlane-github-fastfile"></a>

Cree o actualice el “Fastfile” con el siguiente flujo.

 CodeBuildActivado, tendrás que ejecutar Fastlane Match cada vez que crees y firmes tu aplicación. La forma más sencilla de hacerlo es agregar la acción `match` al flujo que compila la aplicación.

```
default_platform(:ios)

platform :ios do
  before_all do
    setup_ci
  end
  
  desc "Build and sign the app"
  lane :build do
    match(type: "appstore", readonly: true)
    gym(
      scheme: "YourScheme",
      export_method: "app-store"
    )
  end
end
```

**nota**  
Asegúrese de agregar `setup_ci` a la sección `before_all ` de `Fastfile` para que la acción de búsqueda de coincidencias funcione correctamente. Esto garantiza el uso de un llavero de Fastlane temporal con los permisos adecuados. Si no lo usa, es posible que se produzcan errores de compilación o resultados incoherentes. 

## Paso 3: ejecución del comando `fastlane match` para generar los certificados y perfiles correspondientes
<a name="sample-fastlane-github-certificates"></a>

El comando fastlane match para el tipo indicado (por ejemplo, desarrollo, tienda de aplicaciones, adhoc, empresa) generará el certificado y el perfil si no están disponibles en el almacén remoto. Fastlane almacenará los certificados y perfiles. GitHub 

```
bundle exec fastlane match appstore
```

La ejecución del comando será interactiva y fastlane solicitará establecer una frase de contraseña para descifrar los certificados.

## Paso 4: creación del archivo de aplicación para el proyecto
<a name="sample-fastlane-github-appfile"></a>

Cree o agregue el archivo de aplicación que corresponda a su proyecto.

****

1. Cree o agregue [Gymfile](http://docs.fastlane.tools/actions/gym/#gymfile), [Appfile](http://docs.fastlane.tools/advanced/Appfile/), [Snapfile](http://docs.fastlane.tools/actions/snapshot/#snapfile), [Deliverfile](http://docs.fastlane.tools/actions/deliver/#editing-the-deliverfile) en función de los requisitos de creación del proyecto.

1. Confirmación de los cambios al repositorio remoto.

## Paso 5: creación de variables de entorno en Secrets Manager
<a name="sample-fastlane-github-secrets"></a>

Cree tres secretos para almacenar la cookie de sesión de fastlane y la frase de contraseña coincidente. Para obtener información sobre cómo crear un secreto en Secrets Manager, consulte [Creación de un secreto de AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).

****

1. Acceda a la cookie de sesión de fastlane de la siguiente forma.

   1. Clave del secreto: `FASTLANE_SESSION`

   1. Valor secreto: cookie de sesión generada al ejecutar el siguiente comando en el equipo local.
**nota**  
Este valor está disponible después de la autenticación en un archivo local: `~/.fastlane/spaceship/my_appleid_username/cookie`.

      ```
      fastlane spaceauth -u <Apple_account>
      ```

1. Frase de contraseña de Fastlane Match: para permitir que Fastlane Match descifre los certificados y perfiles almacenados en el repositorio de Git, es necesario añadir la contraseña de cifrado que configuró en el paso de configuración de Match a las variables de entorno del proyecto. CodeBuild 

   1. Clave del secreto: `MATCH_PASSWORD`

   1. Valor del secreto: `<match passphrase to decrypt certificates>` La frase de contraseña se establece al generar los certificados en el paso 3.

1. Fastlane `MATCH_GIT_BASIC_AUTHORIZATION`: establezca una autorización básica para *match*:

   1. Clave del secreto: 

      `MATCH_GIT_BASIC_AUTHORIZATION`

   1. Valor secreto: el valor debe ser una cadena codificada en base64 de su nombre de usuario y su token de acceso personal (PAT) en formato `username:password`. Puede generarlo utilizando el comando siguiente:

      ```
      echo -n your_github_username:your_personal_access_token | base64
      ```

      Puedes generar tu PAT en la GitHub consola en **Tu perfil > Configuración > Configuración de desarrolladores > Token** de acceso personal. [Para obtener más información, consulte la siguiente guía: https://docs.github.com/en/ authentication/keeping-your-account-and-data-secure/managing -. your-personal-access-tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)

**nota**  
Al crear los secretos anteriores en Secrets Manager, recuerde dar un nombre de secreto con el siguiente prefijo: `/CodeBuild/`

## Paso 6: creación de una flota de computación
<a name="sample-fastlane-github-fleet"></a>

Cree la flota de computación para el proyecto.

****

1. En la consola, vaya a CodeBuild y cree una nueva flota de cómputos.

1. Elija `macOS` como sistema operativo y seleccione un tipo de computación y una imagen adecuados.

## Paso 7: Crea un proyecto en CodeBuild
<a name="sample-fastlane-github-project"></a>

Crea tu proyecto en CodeBuild.

****

1. Abre la AWS CodeBuild consola en [https://console.aws.amazon.com/codesuite/codebuild/home](https://console.aws.amazon.com/codesuite/codebuild/home).

1. Cree un proyecto de compilación. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console) y [Ejecutar una compilación (consola)](run-build-console.md).

1. Configura tu proveedor de código fuente (por ejemplo,). GitHub CodeCommit Este es el repositorio de origen de proyectos de iOS y no el repositorio de certificados.

1.  En **Environment (Entorno)**: 
   + Elija **Capacidad reservada**.
   + En **Flota**, seleccione la flota creada anteriormente.
   + Proporcione el nombre del rol de servicio que CodeBuild se va a crear para usted.
   + Proporcione las siguientes variables de entorno.
     + Nombre:`MATCH_PASSWORD`, Valor:*<secrets arn>*, Tipo: Secrets Manager (el ARN secreto se creó en el paso 5 para MATCH\$1PASSWORD)
     + Nombre:`FASTLANE_SESSION`, Valor:*<secrets arn>*, Tipo: Secrets Manager (el ARN de secretos se creó en el paso 5 para FASTLANE\$1SESSION)
     + Nombre:`MATCH_GIT_BASIC_AUTHORIZATION`, Valor:*<secrets ARN>*, Tipo: Secrets Manager Secrets ARN (creado en el paso 5 para) `MATCH_GIT_BASIC_AUTHORIZATION`

1. En **Buildspec**, agregue lo siguiente:

   ```
   version: 0.2
   
   phases:
     install:
       commands:
         - gem install bundler
         - bundle install
     build:
       commands:
         - echo "Building and signing the app..."
         - bundle exec fastlane build
     post_build:
       commands:
         - echo "Build completed on date"
   
   artifacts:
     files:
       - '*/.ipa'
     name: app-$(date +%Y-%m-%d)
   ```

## Paso 8: Ejecuta la compilación
<a name="sample-fastlane-github-run"></a>

Ejecute la compilación. Puedes revisar el estado de la compilación e iniciar sesión CodeBuild.

Una vez que se haya completado el trabajo, podrá ver el registro de este.

## Resolución de problemas
<a name="sample-fastlane-github-troubleshooting"></a>
+ Si tienes problemas para acceder al GitHub repositorio, comprueba bien tu token de acceso personal y la variable de entorno MATCH\$1GIT\$1BASIC\$1AUTHORIZATION.
+ Si tiene problemas al descifrar certificados, asegúrese de establecer la frase contraseña correcta en la variable de entorno MATCH\$1PASSWORD.
+ En caso de problemas con la firma de código, compruebe que la cuenta de desarrollador de Apple tiene los certificados y los perfiles necesarios y que el identificador de agrupación del proyecto de Xcode coincide con el del perfil de aprovisionamiento.

## Consideraciones de seguridad
<a name="sample-fastlane-github-considerations"></a>

Tenga en cuenta los siguientes aspectos de seguridad en este tutorial.
+ Mantenga su GitHub repositorio de certificados privado y audite periódicamente el acceso.
+ Considere usarlo AWS Secrets Manager para almacenar información confidencial, como MATCH\$1PASSWORD y FASTLANE\$1SESSION.

En este ejemplo, se proporciona una configuración para la firma de código de iOS con Fastlane y se CodeBuild utiliza GitHub para el almacenamiento de certificados. Es posible que tengas que ajustar algunos pasos en función de los requisitos y el CodeBuild entorno específicos de tu proyecto. Este enfoque aprovecha los AWS servicios para mejorar la seguridad y la integración dentro del AWS ecosistema.

# Establecimiento de nombres de artefacto en el momento de la compilación con control de versiones semánticas
<a name="sample-buildspec-artifact-naming"></a>

 El ejemplo contiene archivos buildspec que muestran cómo especificar un nombre de artefacto que se crea en el momento de la compilación. El nombre que se especifica en un archivo buildspec puede incorporar comandos de shell y variables de entorno para hacerlo único. Dicho nombre anulará otro nombre que escriba en la consola al crear el proyecto.

 Si compila varias veces, el uso de un nombre de artefacto especificado en el archivo buildspec le ayuda a garantizar que los nombres de los archivos de artefactos de salida son únicos. Por ejemplo, puede utilizar una marca de fecha y hora para que se inserte en el nombre del artefacto en el momento de la compilación. 

Si desea reemplazar el nombre de artefacto que ha escrito en la consola por un nombre del archivo buildspec, haga lo siguiente:

1.  Establezca que el proyecto de compilación reemplace el nombre del artefacto por un nombre incluido en el archivo buildspec. 
   +  Si utiliza la consola para crear su proyecto de compilación, seleccione **Enable semantic versioning (Habilitar control semántico de versiones)**. Para obtener más información, consulte [Creación de un proyecto de compilación (consola)](create-project.md#create-project-console). 
   +  Si utiliza la AWS CLI, establezca `overrideArtifactName` en true en el archivo con formato JSON que se transfiere a `create-project`. Para obtener más información, consulte [Crear un proyecto de compilación (AWS CLI)](create-project.md#create-project-cli). 
   +  Si utiliza la API de AWS CodeBuild, establezca la marca `overrideArtifactName` en el objeto `ProjectArtifacts` cuando cree o actualice un proyecto o cuando inicie una compilación. 

1.  Especifique un nombre en el archivo buildspec. Utilice los siguientes archivos buildspec de ejemplo como guía. 

 Este ejemplo de Linux muestra cómo especificar un nombre de artefacto que incluye la fecha de creación de la compilación: 

```
version: 0.2         
phases:
  build:
    commands:
      - rspec HelloWorld_spec.rb
artifacts:
  files:
    - '**/*'
  name: myname-$(date +%Y-%m-%d)
```

 En este ejemplo de Linux, se muestra cómo se especifica un nombre de artefacto que utiliza una variable de entorno de CodeBuild. Para obtener más información, consulte [Variables de entorno en los entornos de compilación](build-env-ref-env-vars.md). 

```
version: 0.2         
phases:
  build:
    commands:
      - rspec HelloWorld_spec.rb
artifacts:
  files:
    - '**/*'
  name: myname-$AWS_REGION
```

 Este ejemplo de Windows muestra cómo especificar un nombre de artefacto que incluye la fecha y la hora de creación de la compilación: 

```
version: 0.2
env:
  variables:
    TEST_ENV_VARIABLE: myArtifactName
phases:
  build:
    commands:
      - cd samples/helloworld
      - dotnet restore
      - dotnet run
artifacts:
  files:
    - '**/*'
  name: $Env:TEST_ENV_VARIABLE-$(Get-Date -UFormat "%Y%m%d-%H%M%S")
```

 En este ejemplo de Windows, se muestra cómo se especifica un nombre de artefacto que utiliza una variable declarada en el archivo de especificación de compilación y una variable de entorno de CodeBuild. Para obtener más información, consulte [Variables de entorno en los entornos de compilación](build-env-ref-env-vars.md). 

```
version: 0.2
env:
  variables:
    TEST_ENV_VARIABLE: myArtifactName
phases:
  build:
    commands:
      - cd samples/helloworld
      - dotnet restore
      - dotnet run
artifacts:
  files:
    - '**/*'
  name: $Env:TEST_ENV_VARIABLE-$Env:AWS_REGION
```

 Para obtener más información, consulte [Referencia de especificación de compilación para CodeBuild](build-spec-ref.md). 