En los siguientes tutoriales, utilizará AWS CodeBuild para crear una colección de archivos de entrada de código fuente de muestra en una versión implementable del código fuente.
Ambos tutoriales tienen la misma entrada y los mismos resultados, pero uno usa la consola de AWS CodeBuild y el otro, la AWS CLI.
importante
No es conveniente que utilice la cuenta raíz de AWS para completar este tutorial.
Temas
Empezar a trabajar con AWS CodeBuild utilizando la consola
En este tutorial, utilizará AWS CodeBuild para compilar una colección de archivos de entrada de código fuente de muestra (artefactos de entrada de compilación o entrada de compilación) en una versión desplegable del código fuente (artefacto de salida de compilación o salida de compilación). En concreto, indicará a CodeBuild que utilice Apache Maven, una herramienta de compilación común, para compilar un conjunto de archivos de clases Java en un archivo Java Archive (JAR). No necesita estar familiarizado con Apache Maven o Java para completar este tutorial.
Puede trabajar con CodeBuild a través de la consola de CodeBuild, AWS CodePipeline, la AWS CLI o los SDK de AWS. En este tutorial se muestra cómo usar la consola de CodeBuild. Para obtener información acerca del uso de CodePipeline, consulte Uso de CodeBuild con CodePipeline.
importante
Los pasos de este tutorial requieren que cree recursos (por ejemplo, un bucket de S3) que podrían generar cargos en su cuenta de AWS. Estos incluyen posibles cargos por CodeBuild y por acciones y recursos de AWS relacionados con Amazon S3, AWS KMS y Registros de CloudWatch. Para obtener más información, consulte Precios de AWS CodeBuild
Temas
- Paso 1: Crear el código fuente
- Paso 2: crear el archivo de especificación de compilación
- Paso 3: crear dos buckets de S3
- Paso 4: cargar el código fuente y el archivo buildspec
- Paso 5: crear el proyecto de compilación
- Paso 6: ejecutar la compilación
- Paso 7: ver información resumida sobre la compilación
- Paso 8: ver información detallada sobre la compilación
- Paso 9: obtener el artefacto de salida de la compilación
- Paso 10: eliminar los buckets de S3
- Encapsulación
Paso 1: Crear el código fuente
(Parte de: Empezar a trabajar con AWS CodeBuild utilizando la consola)
En este paso, creará el código fuente que desea que CodeBuild compile en el bucket de salida. Este código fuente se compone de dos archivos de clases Java y un archivo Apache Maven Object Model (POM).
-
En un directorio vacío del equipo o la instancia local, cree esta estructura de directorios.
(root directory name)
`-- src |-- main | `-- java `-- test `-- java -
Con el editor de texto que desee, cree este archivo, asígnele el nombre
MessageUtil.java
y guárdelo en el directoriosrc/main/java
.public class MessageUtil { private String message; public MessageUtil(String message) { this.message = message; } public String printMessage() { System.out.println(message); return message; } public String salutationMessage() { message = "Hi!" + message; System.out.println(message); return message; } }
Este archivo de clases crea como resultado la cadena de caracteres que se la ha pasado. El constructor
MessageUtil
establece la cadena de caracteres. El métodoprintMessage
crea la salida. El métodosalutationMessage
muestraHi!
seguido de la cadena de caracteres. -
Cree este archivo, asígnele el nombre
TestMessageUtil.java
y guárdelo en el directorio/src/test/java
.import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.assertEquals; public class TestMessageUtil { String message = "Robert"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testPrintMessage() { System.out.println("Inside testPrintMessage()"); assertEquals(message,messageUtil.printMessage()); } @Test public void testSalutationMessage() { System.out.println("Inside testSalutationMessage()"); message = "Hi!" + "Robert"; assertEquals(message,messageUtil.salutationMessage()); } }
Este archivo de clases establece la variable
message
de la claseMessageUtil
enRobert
. A continuación, comprueba si la variablemessage
se ha establecido correctamente comprobando si las cadenasRobert
yHi!Robert
aparecen en la salida. -
Cree este archivo, asígnele el nombre
pom.xml
y guárdelo en el directorio raíz (nivel superior).<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>messageUtil</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Message Utility Java Sample App</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> </plugins> </build> </project>
Apache Maven utiliza las instrucciones de este archivo para convertir los archivos
MessageUtil.java
yTestMessageUtil.java
en un archivo denominadomessageUtil-1.0.jar
y, a continuación, ejecuta las pruebas especificadas.
En este punto, la estructura de directorios debería ser similar a la siguiente.
(root directory name)
|-- pom.xml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
Paso 2: crear el archivo de especificación de compilación
(Paso anterior: Paso 1: Crear el código fuente)
En este paso, creará un archivo de especificación de compilación. Una especificación de compilación es una colección de comandos de compilación y opciones de configuración relacionadas, en formato YAML, que CodeBuild utiliza para ejecutar una compilación. Sin una especificación de compilación, CodeBuild no puede convertir correctamente la entrada de la compilación en la salida de la compilación ni puede encontrar el artefacto de salida de la compilación en el entorno de compilación para cargarlo en el bucket de salida.
Cree este archivo, asígnele el nombre buildspec.yml
y guárdelo en el directorio raíz (nivel superior).
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
pre_build:
commands:
- echo Nothing to do in the pre_build phase...
build:
commands:
- echo Build started on `date`
- mvn install
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- target/messageUtil-1.0.jar
importante
Como una declaración de especificación de compilación debe ser una declaración YAML válida, los espacios de la declaración son importantes. Si el número de espacios de la declaración de especificación de compilación no coincide con esta declaración, la compilación podría producir un error inmediatamente. Puede utilizar un validador de YAML para comprobar si la declaración de especificación de compilación es una declaración YAML válida.
nota
En lugar de incluir un archivo de especificación de compilación en el código fuente, puede declarar los comandos de la compilación por separado cuando cree un proyecto de compilación. Esto resulta útil si desea compilar el código fuente con diferentes comandos de compilación sin actualizar el código fuente del repositorio cada vez. Para obtener más información, consulte Sintaxis de buildspec.
En esta declaración de especificación de compilación:
-
version
representa la versión del estándar de especificación de compilación que se va a usar. Esta declaración de especificación de compilación usa la última versión,0.2
. -
phases
representa las fases de compilación en las que puede indicar a CodeBuild que ejecute comandos. Estas fases de compilación se muestran aquí comoinstall
,pre_build
,build
ypost_build
. No puede cambiar los nombres de estas fases de compilación ni puede crear nombres de fases de compilación adicionales.En este ejemplo, durante la fase
build
, ejecuta el comandomvn install
. Este comando indica a Apache Maven que compile, pruebe y empaquete los archivos de clases Java compilados en un artefacto de salida de la compilación. En aras de una mayor exhaustividad, se incluyen algunos comandosecho
en cada fase de compilación de este ejemplo. Cuando vea información de compilación detallada más adelante en este tutorial, la salida de estos comandos deecho
puede ayudarlo a comprender mejor cómo CodeBuild ejecuta los comandos y en qué orden lo hace. (Aunque en este ejemplo se incluyen todas las fases de compilación, no es necesario que incluya una fase de compilación si no piensa ejecutar ningún comando durante esa fase). Para cada fase de compilación, CodeBuild ejecuta cada comando, uno cada vez, en el orden indicado, de principio a fin. -
artifacts
representa el conjunto de artefactos de salida de compilación que CodeBuild carga en el depósito de salida.files
representa los archivos que se van a incluir en el resultado de la compilación. CodeBuild carga el archivo únicomessageUtil-1.0.jar
encontrado en el directoriotarget
relativo del entorno de compilación. El nombre del archivomessageUtil-1.0.jar
y el nombre del directoriotarget
se basan en la forma en que Apache Maven crea y almacena los artefactos de salida de la compilación para este ejemplo únicamente. En sus propias compilaciones, estos nombres de archivos y directorios son diferentes.
Para obtener más información, consulte Referencia de la especificación de compilación.
En este punto, la estructura de directorios debería ser similar a la siguiente.
(root directory name)
|-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
Paso 3: crear dos buckets de S3
(Paso anterior: Paso 2: crear el archivo de especificación de compilación)
Aunque puede usar un solo bucket para este tutorial, dos buckets hacen que sea más fácil ver de dónde proviene la entrada de compilación y hacia dónde va la salida de compilación.
-
Uno de estos buckets (bucket de entrada) almacena la entrada de compilación. En este tutorial, el nombre de este depósito de entrada es
codebuild-
, donderegion-ID
-account-ID
-input-bucketregion-ID
es la región de AWS del bucket yaccount-ID
es su ID de cuenta de AWS. -
El otro bucket (bucket de salida) almacena la salida de la compilación. En este tutorial, el nombre de este bucket de salida es
codebuild-
.region-ID
-account-ID
-output-bucket
Si elige nombres diferentes para estos buckets, asegúrese de usarlos en este tutorial.
Estos dos buckets están en la misma región de AWS que sus compilaciones. Por ejemplo, si indica a CodeBuild que ejecute una compilación en la región Este de EE. UU. (Ohio), los buckets deben estar en la región Este de EE. UU. (Ohio).
Para obtener más información, consulte Creación de un bucket en la Guía del usuario de Amazon Simple Storage Service.
nota
Aunque CodeBuild también es compatible con la entrada de compilación almacenada en CodeCommit, GitHub y repositorios de Bitbucket, este tutorial no muestra cómo se usan. Para obtener más información, consulte Planificación de una compilación.
Paso 4: cargar el código fuente y el archivo buildspec
(Paso anterior: Paso 3: crear dos buckets de S3)
En este paso, añadirá el código fuente y el archivo de especificación de compilación al bucket de entrada.
Con la utilidad zip del sistema operativo, cree un archivo llamado MessageUtil.zip
que incluya MessageUtil.java
, TestMessageUtil.java
, pom.xml
y buildspec.yml
.
La estructura de directorios del archivo MessageUtil.zip
debe ser similar a la siguiente.
MessageUtil.zip |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
importante
No incluya el directorio
, solo los directorios y archivos del directorio (root directory name)
.(root directory name)
Cargue el archivo MessageUtil.zip
identificado en el bucket de entrada denominado codebuild-
. region-ID
-account-ID
-input-bucket
importante
Para los repositorios de CodeCommit, GitHub y Bitbucket, por convención, debe almacenar un archivo de especificación de compilación llamado buildspec.yml
en la raíz (nivel superior) de cada repositorio o incluir la declaración de especificación de compilación como parte de la definición del proyecto de compilación. No cree un archivo ZIP que contenga el código fuente del repositorio y el archivo de especificación de compilación.
Solo para entradas de compilación almacenadas en buckets de S3, debe crear un archivo ZIP que contenga el código fuente y convencionalmente, un archivo de especificación de compilación denominado buildspec.yml
en la raíz (nivel superior) o incluya la declaración de especificaciones de compilación como parte de la definición del proyecto de compilación.
Si desea utilizar otro nombre para el archivo de especificación de compilación, o si quiere hacer referencia a una especificación de compilación en una ubicación distinta de la raíz, puede especificar una invalidación de la especificación de compilación como parte de la definición del proyecto de compilación. Para obtener más información, consulte Nombre de archivo y ubicación de almacenamiento de buildspec.
Paso 5: crear el proyecto de compilación
(Paso anterior: Paso 4: cargar el código fuente y el archivo buildspec)
En este paso, creará un proyecto de compilación que usará AWS CodeBuild para ejecutar la compilación. Un proyecto de compilación incluye información sobre cómo ejecutar una compilación, incluido dónde obtener el código fuente, qué entorno de compilación se debe usar, qué comandos de compilación se deben ejecutar y dónde se debe almacenar el resultado de la compilación. Un entorno de compilación representa una combinación de sistema operativo, tiempo de ejecución del lenguaje de programación y herramientas que CodeBuild utiliza para ejecutar una compilación. El entorno de compilación se expresa como una imagen de Docker. Para obtener más información, consulte Descripción general de Docker
En este entorno de compilación, indicará a CodeBuild que use una imagen de Docker que contenga una versión del Kit de desarrollo de Java (JDK) y Apache Maven.
Para crear el proyecto de compilación
Inicie sesión en la AWS Management Console y abra la consola de AWS CodeBuild en https://console.aws.amazon.com/codesuite/codebuild/home
. -
Utilice el selector de región de AWS para elegir una región de AWS compatible con CodeBuild. Para obtener más información, consulte Puntos de conexión y cuotas de AWS CodeBuild en la Referencia general de Amazon Web Services.
Si se muestra una página de información de CodeBuild, 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.
-
En la página Create build project (Crear proyecto de compilación), en Project configuration (Configuración del proyecto), en Project name (Nombre de proyecto), escriba un nombre para este proyecto de compilación (en este ejemplo,
codebuild-demo-project
). Los nombres de los proyectos de compilación debe ser únicos en cada cuenta de AWS. Si elige otro nombre, asegúrese de utilizarlo durante todo el tutorial.nota
En la página Create build project (Crear proyecto de compilación), podría aparecer un mensaje de error similar al siguiente: You are not authorized to perform this operation (No tiene autorización para realizar esta operación). Lo más probable es que haya iniciado sesión en AWS Management Console como un usuario que no tiene permiso para crear proyectos de compilación. Para solucionar este problema, cierre la sesión de la AWS Management Console y, a continuación, inicie sesión con credenciales que pertenezcan a una de las siguientes entidades de IAM:
-
Un usuario administrador en su cuenta de AWS. Para obtener más información, consulte Creación del primer usuario raíz y grupo de Cuenta de AWS en la Guía del usuario.
-
Un usuario en su cuenta de AWS con las políticas administradas
AWSCodeBuildAdminAccess
,AmazonS3ReadOnlyAccess
yIAMFullAccess
vinculadas a ese usuario o un grupo de IAM al que pertenece el usuario. Si no dispone de un usuario o grupo de AWS en su cuenta de con estos permisos, y no puede añadir estos permisos al usuario o grupo, póngase en contacto con el administrador de su cuenta de AWS para obtener ayuda. Para obtener más información, consulte Políticas administradas (predefinidas) por AWS para AWS CodeBuild.
Ambas opciones incluyen permisos de administrador que le permiten crear un proyecto de compilación y completar este tutorial. Le recomendamos que utilice siempre los permisos mínimos necesarios para realizar la tarea. Para obtener más información, consulte Referencia de permisos de AWS CodeBuild.
-
-
En Fuente, como Proveedor de código fuente, elija Amazon S3.
-
En Bucket, elija codebuild-
region–ID
-account-ID
-input-bucket. -
En S3 object key (Clave de objeto de S3), escriba
MessageUtil.zip
. -
En Environment (Entorno), para Environment image (Imagen de entorno), deje Managed image (Imagen administrada) seleccionado.
-
En Sistema operativo, elija Amazon Linux.
-
En Runtime(s) (Tiempo de ejecución), elija Standard (Estándar).
-
En Imagen, elija aws/codebuild/amazonlinux2-x86_64-standard:corretto11.
-
En Service role (Rol de servicio), deje la opción New service role (Nuevo rol de servicio) seleccionada y no haga ningún cambio en Role name (Nombre de rol).
-
En Buildspec, deje Use a buildspec file (Usar un archivo buildspec) seleccionado.
-
En Artefactos, como Tipo, seleccione Amazon S3.
-
En Nombre de bucket, elija codebuild-
regon-ID
-account-ID
-output-bucket. -
Deje Name (Nombre) y Path (Ruta) en blanco.
-
Elija Crear el proyecto de compilación.
Paso 6: ejecutar la compilación
(Paso anterior: Paso 5: crear el proyecto de compilación)
En este paso, indicará a AWS CodeBuild que ejecute la compilación con la configuración del proyecto de compilación.
Para ejecutar la compilación
Abra la consola de AWS CodeBuild en https://console.aws.amazon.com/codesuite/codebuild/home
. -
En el panel de navegación, elija Proyectos de compilación.
-
En la lista de proyectos de compilación, elija codebuild-demo-project y, a continuación, elija Comenzar compilación. La compilación comienza inmediatamente.
Paso 7: ver información resumida sobre la compilación
(Paso anterior: Paso 6: ejecutar la compilación)
En este paso, verá información resumida sobre el estado de la compilación.
Para ver la información resumida de la compilación
-
Si no se muestra la página codebuild-demo-project:
<build-ID>
, elija Historial de compilación en la barra de navegación. A continuación, en la lista de proyectos de compilación, en Proyecto, elija el enlace Ejecución de compilación correspondiente a codebuild-demo-project. Debe haber un solo enlace coincidente. (Si ya ha completado este tutorial antes, elija el vínculo con el valor más reciente en la columna Completed (Completado)). -
En la página Estado de compilación, en Detalles de fase, se deben mostrar las fases de compilación siguientes como Con éxito en la columna Estado:
-
SUBMITTED
-
QUEUED
-
PROVISIONING
-
DOWNLOAD_SOURCE
-
INSTALL
-
PRE_BUILD
-
BUILD
-
POST_BUILD
-
UPLOAD_ARTIFACTS
-
FINALIZING
-
COMPLETED
En Build Status (Estado de la compilación), debería mostrarse Succeeded (Realizado correctamente).
Si en su lugar aparece In Progress (En curso) elija el botón de actualizar.
-
-
Junto a cada fase de compilación, el valor Duration (Duración) indica cuánto tiempo ha tardado la fase de compilación. El valor End time (Hora de finalización) indica que esa fase de compilación ha terminado.
Paso 8: ver información detallada sobre la compilación
(Paso anterior: Paso 7: ver información resumida sobre la compilación)
En este paso, verá información detallada acerca de su compilación en Registros de CloudWatch.
nota
Para proteger la información confidencial, lo siguiente está oculto en los registros de CodeBuild:
-
ID de clave de acceso de AWS. Para obtener más información, consulte Administración de claves de acceso para usuarios de IAM en la Guía del usuario de AWS Identity and Access Management.
-
Cadenas especificadas mediante el almacén de parámetros. Para obtener más información, consulte Almacén de parámetros de Systems Manager y Tutorial de la consola del almacén de parámetros de Systems Manager en la Guía del usuario de Amazon EC2 Systems Manager.
-
Cadenas especificadas mediante AWS Secrets Manager. Para obtener más información, consulte Administración de claves.
Para ver información detallada sobre la compilación
-
Con la página de detalles de la compilación mostrada del paso anterior, se muestran las últimas 10,000 líneas del log de compilación en Build logs. Para ver el registro de compilación completo en Registros de CloudWatch, elija el enlace Ver todo el registro.
-
En el flujo de registro de Registros de CloudWatch, es posible examinar los eventos de registro. De forma predeterminada, solo se muestra el último conjunto de eventos de log. Para ver eventos de log anteriores, desplácese hasta el principio de la lista.
-
En este tutorial, la mayoría de los eventos de registro contienen información detallada sobre la descarga e instalación de archivos de dependencia de compilación de CodeBuild en su entorno de compilación, lo que probablemente no le interese. Puede usar el cuadro Filter events para reducir la información que se muestra. Por ejemplo, si escribe
"[INFO]"
en el cuadro Filter events (Filtrar eventos), solo se muestran los eventos que contienen[INFO]
. Para obtener más información, consulte Sintaxis de patrones y filtros en la Guía del usuario de Amazon CloudWatch.
Paso 9: obtener el artefacto de salida de la compilación
(Paso anterior: Paso 8: ver información detallada sobre la compilación)
En este paso, obtendrá el archivo messageUtil-1.0.jar
compilado por CodeBuild y cargado en el bucket de salida.
Puede usar la consola de CodeBuild o la consola de Amazon S3 para completar este paso.
Para obtener el artefacto de salida de la compilación (consola de AWS CodeBuild)
-
Con la consola de CodeBuild todavía abierta y la página de detalles de la compilación mostrada del paso anterior, expanda Detalles de la compilación y, a continuación, desplácese hacia abajo, hasta la sección Artefactos.
nota
Si la página de detalles de la compilación no se muestra, en la barra de navegación, elija Historial de compilación y, a continuación, elija el enlace Ejecución de la compilación.
-
El enlace a la carpeta Amazon S3 se encuentra en la Ubicación de carga de artefactos. Este enlace abre la carpeta de Amazon S3 donde se encuentra el archivo de artefactos de salida de compilación de
messageUtil-1.0.jar
.
Para obtener el artefacto de salida de la compilación (consola de Amazon S3)
Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/
. -
Abra
codebuild-
.region-ID
-account-ID
-output-bucket -
Abra la carpeta
codebuild-demo-project
. -
Abra la carpeta
target
, donde se encuentra el archivo de artefactos de salida de compilaciónmessageUtil-1.0.jar
.
Paso 10: eliminar los buckets de S3
(Paso anterior: Paso 9: obtener el artefacto de salida de la compilación)
Para evitar cargos continuos en su cuenta de AWS, puede eliminar los buckets de entrada utilizados en este tutorial. Para obtener más instrucciones, consulte Eliminar o vaciar un bucket en la Guía del usuario de Amazon Simple Storage Service.
Si va a utilizar el usuario de IAM o un usuario administrador de IAM para eliminar estos buckets, el usuario debe tener más permisos de acceso. Añada la siguiente instrucción entre los marcadores (### BEGIN ADDING STATEMENT HERE ###
y ### END ADDING STATEMENTS HERE ###
) a una política de acceso existente para el usuario.
Las elipsis (...) de esta declaración se usan para abreviar. No elimine las instrucciones de la política de acceso existente. No escriba estos puntos suspensivos en la política.
{
"Version": "2012-10-17",
"Id": "...",
"Statement": [
### BEGIN ADDING STATEMENT HERE ###
{
"Effect": "Allow",
"Action": [
"s3:DeleteBucket",
"s3:DeleteObject"
],
"Resource": "*"
}
### END ADDING STATEMENT HERE ###
]
}
Encapsulación
En este tutorial, se ha usado AWS CodeBuild para construir un conjunto de archivos de clase Java en un archivo JAR. A continuación, ha consultado los resultados de la compilación.
Ahora puede intentar usar CodeBuild en sus propios escenarios. Siga las instrucciones en Planificación de una compilación. Si piensa que aún no está preparado, tal vez desee intentar compilar algunos de los ejemplos. Para obtener más información, consulte Ejemplos basados en casos de uso para CodeBuild.
Introducción a AWS CodeBuild utilizando la AWS CLI
En este tutorial, usará AWS CodeBuild para compilar una selección de archivos de entrada de código fuente de muestra (llamados artefactos de entrada de la compilación o entrada de la compilación) en una versión implementable del código fuente (llamada artefacto de salida de compilación o salida de compilación). En concreto, indicará a CodeBuild que utilice Apache Maven, una herramienta de compilación común, para compilar un conjunto de archivos de clases Java en un archivo Java Archive (JAR). No necesita estar familiarizado con Apache Maven o Java para completar este tutorial.
Puede trabajar con CodeBuild a través de la consola de CodeBuild, AWS CodePipeline, la AWS CLI o los SDK de AWS. En este tutorial se muestra cómo utilizar CodeBuild con la AWS CLI. Para obtener información acerca del uso de CodePipeline, consulte Uso de CodeBuild con CodePipeline.
importante
Los pasos de este tutorial requieren que cree recursos (por ejemplo, un bucket de S3) que podrían generar cargos en su cuenta de AWS. Estos incluyen posibles cargos por CodeBuild y por acciones y recursos de AWS relacionados con Amazon S3, AWS KMS y Registros de CloudWatch. Para obtener más información, consulte Precios de CodeBuild
Temas
- Paso 1: Crear el código fuente
- Paso 2: crear el archivo de especificación de compilación
- Paso 3: crear dos buckets de S3
- Paso 4: cargar el código fuente y el archivo buildspec
- Paso 5: crear el proyecto de compilación
- Paso 6: ejecutar la compilación
- Paso 7: ver información resumida sobre la compilación
- Paso 8: ver información detallada sobre la compilación
- Paso 9: obtener el artefacto de salida de la compilación
- Paso 10: eliminar los buckets de S3
- Encapsulación
Paso 1: Crear el código fuente
(Parte de: Introducción a AWS CodeBuild utilizando la AWS CLI)
En este paso, creará el código fuente que desea que CodeBuild compile en el bucket de salida. Este código fuente se compone de dos archivos de clases Java y un archivo Apache Maven Object Model (POM).
-
En un directorio vacío del equipo o la instancia local, cree esta estructura de directorios.
(root directory name)
`-- src |-- main | `-- java `-- test `-- java -
Con el editor de texto que desee, cree este archivo, asígnele el nombre
MessageUtil.java
y guárdelo en el directoriosrc/main/java
.public class MessageUtil { private String message; public MessageUtil(String message) { this.message = message; } public String printMessage() { System.out.println(message); return message; } public String salutationMessage() { message = "Hi!" + message; System.out.println(message); return message; } }
Este archivo de clases crea como resultado la cadena de caracteres que se la ha pasado. El constructor
MessageUtil
establece la cadena de caracteres. El métodoprintMessage
crea la salida. El métodosalutationMessage
muestraHi!
seguido de la cadena de caracteres. -
Cree este archivo, asígnele el nombre
TestMessageUtil.java
y guárdelo en el directorio/src/test/java
.import org.junit.Test; import org.junit.Ignore; import static org.junit.Assert.assertEquals; public class TestMessageUtil { String message = "Robert"; MessageUtil messageUtil = new MessageUtil(message); @Test public void testPrintMessage() { System.out.println("Inside testPrintMessage()"); assertEquals(message,messageUtil.printMessage()); } @Test public void testSalutationMessage() { System.out.println("Inside testSalutationMessage()"); message = "Hi!" + "Robert"; assertEquals(message,messageUtil.salutationMessage()); } }
Este archivo de clases establece la variable
message
de la claseMessageUtil
enRobert
. A continuación, comprueba si la variablemessage
se ha establecido correctamente comprobando si las cadenasRobert
yHi!Robert
aparecen en la salida. -
Cree este archivo, asígnele el nombre
pom.xml
y guárdelo en el directorio raíz (nivel superior).<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>messageUtil</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Message Utility Java Sample App</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> </plugins> </build> </project>
Apache Maven utiliza las instrucciones de este archivo para convertir los archivos
MessageUtil.java
yTestMessageUtil.java
en un archivo denominadomessageUtil-1.0.jar
y, a continuación, ejecuta las pruebas especificadas.
En este punto, la estructura de directorios debería ser similar a la siguiente.
(root directory name)
|-- pom.xml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
Paso 2: crear el archivo de especificación de compilación
(Paso anterior: Paso 1: Crear el código fuente)
En este paso, creará un archivo de especificación de compilación. Una especificación de compilación es una colección de comandos de compilación y opciones de configuración relacionadas, en formato YAML, que CodeBuild utiliza para ejecutar una compilación. Sin una especificación de compilación, CodeBuild no puede convertir correctamente la entrada de la compilación en la salida de la compilación ni puede encontrar el artefacto de salida de la compilación en el entorno de compilación para cargarlo en el bucket de salida.
Cree este archivo, asígnele el nombre buildspec.yml
y guárdelo en el directorio raíz (nivel superior).
version: 0.2
phases:
install:
runtime-versions:
java: corretto11
pre_build:
commands:
- echo Nothing to do in the pre_build phase...
build:
commands:
- echo Build started on `date`
- mvn install
post_build:
commands:
- echo Build completed on `date`
artifacts:
files:
- target/messageUtil-1.0.jar
importante
Como una declaración de especificación de compilación debe ser una declaración YAML válida, los espacios de la declaración son importantes. Si el número de espacios de la declaración de especificación de compilación no coincide con esta declaración, la compilación podría producir un error inmediatamente. Puede utilizar un validador de YAML para comprobar si la declaración de especificación de compilación es una declaración YAML válida.
nota
En lugar de incluir un archivo de especificación de compilación en el código fuente, puede declarar los comandos de la compilación por separado cuando cree un proyecto de compilación. Esto resulta útil si desea compilar el código fuente con diferentes comandos de compilación sin actualizar el código fuente del repositorio cada vez. Para obtener más información, consulte Sintaxis de buildspec.
En esta declaración de especificación de compilación:
-
version
representa la versión del estándar de especificación de compilación que se va a usar. Esta declaración de especificación de compilación usa la última versión,0.2
. -
phases
representa las fases de compilación en las que puede indicar a CodeBuild que ejecute comandos. Estas fases de compilación se muestran aquí comoinstall
,pre_build
,build
ypost_build
. No puede cambiar los nombres de estas fases de compilación ni puede crear nombres de fases de compilación adicionales.En este ejemplo, durante la fase
build
, ejecuta el comandomvn install
. Este comando indica a Apache Maven que compile, pruebe y empaquete los archivos de clases Java compilados en un artefacto de salida de la compilación. En aras de una mayor exhaustividad, se incluyen algunos comandosecho
en cada fase de compilación de este ejemplo. Cuando vea información de compilación detallada más adelante en este tutorial, la salida de estos comandos deecho
puede ayudarlo a comprender mejor cómo CodeBuild ejecuta los comandos y en qué orden lo hace. (Aunque en este ejemplo se incluyen todas las fases de compilación, no es necesario que incluya una fase de compilación si no piensa ejecutar ningún comando durante esa fase). Para cada fase de compilación, CodeBuild ejecuta cada comando, uno cada vez, en el orden indicado, de principio a fin. -
artifacts
representa el conjunto de artefactos de salida de compilación que CodeBuild carga en el depósito de salida.files
representa los archivos que se van a incluir en el resultado de la compilación. CodeBuild carga el archivo únicomessageUtil-1.0.jar
encontrado en el directoriotarget
relativo del entorno de compilación. El nombre del archivomessageUtil-1.0.jar
y el nombre del directoriotarget
se basan en la forma en que Apache Maven crea y almacena los artefactos de salida de la compilación para este ejemplo únicamente. En sus propias compilaciones, estos nombres de archivos y directorios son diferentes.
Para obtener más información, consulte Referencia de la especificación de compilación.
En este punto, la estructura de directorios debería ser similar a la siguiente.
(root directory name)
|-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
Paso 3: crear dos buckets de S3
(Paso anterior: Paso 2: crear el archivo de especificación de compilación)
Aunque puede usar un solo bucket para este tutorial, dos buckets hacen que sea más fácil ver de dónde proviene la entrada de compilación y hacia dónde va la salida de compilación.
-
Uno de estos buckets (bucket de entrada) almacena la entrada de compilación. En este tutorial, el nombre de este depósito de entrada es
codebuild-
, donderegion-ID
-account-ID
-input-bucketregion-ID
es la región de AWS del bucket yaccount-ID
es su ID de cuenta de AWS. -
El otro bucket (bucket de salida) almacena la salida de la compilación. En este tutorial, el nombre de este bucket de salida es
codebuild-
.region-ID
-account-ID
-output-bucket
Si elige nombres diferentes para estos buckets, asegúrese de usarlos en este tutorial.
Estos dos buckets están en la misma región de AWS que sus compilaciones. Por ejemplo, si indica a CodeBuild que ejecute una compilación en la región Este de EE. UU. (Ohio), los buckets deben estar en la región Este de EE. UU. (Ohio).
Para obtener más información, consulte Creación de un bucket en la Guía del usuario de Amazon Simple Storage Service.
nota
Aunque CodeBuild también es compatible con la entrada de compilación almacenada en CodeCommit, GitHub y repositorios de Bitbucket, este tutorial no muestra cómo se usan. Para obtener más información, consulte Planificación de una compilación.
Paso 4: cargar el código fuente y el archivo buildspec
(Paso anterior: Paso 3: crear dos buckets de S3)
En este paso, añadirá el código fuente y el archivo de especificación de compilación al bucket de entrada.
Con la utilidad zip del sistema operativo, cree un archivo llamado MessageUtil.zip
que incluya MessageUtil.java
, TestMessageUtil.java
, pom.xml
y buildspec.yml
.
La estructura de directorios del archivo MessageUtil.zip
debe ser similar a la siguiente.
MessageUtil.zip |-- pom.xml |-- buildspec.yml `-- src |-- main | `-- java | `-- MessageUtil.java `-- test `-- java `-- TestMessageUtil.java
importante
No incluya el directorio
, solo los directorios y archivos del directorio (root directory name)
.(root directory name)
Cargue el archivo MessageUtil.zip
identificado en el bucket de entrada denominado codebuild-
. region-ID
-account-ID
-input-bucket
importante
Para los repositorios de CodeCommit, GitHub y Bitbucket, por convención, debe almacenar un archivo de especificación de compilación llamado buildspec.yml
en la raíz (nivel superior) de cada repositorio o incluir la declaración de especificación de compilación como parte de la definición del proyecto de compilación. No cree un archivo ZIP que contenga el código fuente del repositorio y el archivo de especificación de compilación.
Solo para entradas de compilación almacenadas en buckets de S3, debe crear un archivo ZIP que contenga el código fuente y convencionalmente, un archivo de especificación de compilación denominado buildspec.yml
en la raíz (nivel superior) o incluya la declaración de especificaciones de compilación como parte de la definición del proyecto de compilación.
Si desea utilizar otro nombre para el archivo de especificación de compilación, o si quiere hacer referencia a una especificación de compilación en una ubicación distinta de la raíz, puede especificar una invalidación de la especificación de compilación como parte de la definición del proyecto de compilación. Para obtener más información, consulte Nombre de archivo y ubicación de almacenamiento de buildspec.
Paso 5: crear el proyecto de compilación
(Paso anterior: Paso 4: cargar el código fuente y el archivo buildspec)
En este paso, creará un proyecto de compilación que usará AWS CodeBuild para ejecutar la compilación. Un proyecto de compilación incluye información sobre cómo ejecutar una compilación, incluido dónde obtener el código fuente, qué entorno de compilación se debe usar, qué comandos de compilación se deben ejecutar y dónde se debe almacenar el resultado de la compilación. Un entorno de compilación representa una combinación de sistema operativo, tiempo de ejecución del lenguaje de programación y herramientas que CodeBuild utiliza para ejecutar una compilación. El entorno de compilación se expresa como una imagen de Docker. Para obtener más información, consulte Descripción general de Docker
En este entorno de compilación, indicará a CodeBuild que use una imagen de Docker que contenga una versión del Kit de desarrollo de Java (JDK) y Apache Maven.
Para crear el proyecto de compilación
-
Utilice la AWS CLI para ejecutar el comando create-project:
aws codebuild create-project --generate-cli-skeleton
En el resultado se muestran datos con formato JSON. Copie los datos en un archivo denominado
create-project.json
en la ubicación del equipo o instancia local en la que haya instalado la AWS CLI. Si ha elegido usar un nombre de archivo diferente, asegúrese de usarlo en este tutorial.Modifique los datos copiados de modo que sigan este formato y, a continuación, guarde los resultados:
{ "name": "codebuild-demo-project", "source": { "type": "S3", "location": "codebuild-
region-ID
-account-ID
-input-bucket/MessageUtil.zip" }, "artifacts": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-output-bucket" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:5.0", "computeType": "BUILD_GENERAL1_SMALL" }, "serviceRole": "serviceIAMRole
" }Sustituya
serviceIAMRole
por el nombre de recurso de Amazon (ARN) de un rol de servicio de (por ejemplo,arn:aws:iam::
). Para crear uno, consulte Cómo permitir que CodeBuild interactúe con otros servicios de AWS.account-ID
:role/role-name
En estos datos:
-
name
representa un identificador obligatorio para este proyecto de compilación (en este ejemplo,codebuild-demo-project
). Los nombres de los proyectos de compilación deben ser únicos en todos los proyectos de compilación de su cuenta. -
En
source
,type
es un valor obligatorio que representa el tipo de repositorio del código fuente (en este ejemplo,S3
para un bucket de Amazon S3). -
En
source
,location
representa la ruta del código fuente (en este ejemplo, el nombre del bucket de entrada seguido del nombre del archivo ZIP). -
En
artifacts
,type
es un valor obligatorio que representa el tipo de repositorio del artefacto de salida de la compilación (en este ejemplo,S3
para un bucket de Amazon S3). -
En
artifacts
,location
representa el nombre del bucket de salida que ha creado o identificado anteriormente (en este ejemplo,codebuild-
).region-ID
-account-ID
-output-bucket -
En
environment
,type
es un valor obligatorio que representa el tipo de entorno de compilación (en este ejemplo,LINUX_CONTAINER
). -
En
environment
,image
es un valor obligatorio que representa el nombre de la imagen de Docker y la combinación de etiquetas que usa este proyecto de compilación, como se especifica en el tipo de repositorio de imágenes de Docker (en este ejemplo,aws/codebuild/standard:5.0
de una imagen de Docker del repositorio de imágenes de Docker de CodeBuild).aws/codebuild/standard
es el nombre de la imagen de Docker.5.0
es la etiqueta de la imagen de Docker.Para encontrar más imágenes de Docker que pueda utilizar en sus escenarios, consulte Referencia de entornos de compilación.
-
En
environment
,computeType
es un valor obligatorio que representa los recursos informáticos que usa CodeBuild (en este ejemplo,BUILD_GENERAL1_SMALL
).
nota
Otros valores disponibles en los datos originales con formato JSON, como
description
,buildspec
,auth
(incluidotype
yresource
),path
,namespaceType
,name
(paraartifacts
),packaging
,environmentVariables
(incluidoname
yvalue
),timeoutInMinutes
,encryptionKey
ytags
(incluidokey
yvalue
) son opcionales. No se utilizan en este tutorial, por lo que no se muestran aquí. Para obtener más información, consulte Crear un proyecto de compilación (AWS CLI). -
-
Cambie al directorio que contiene el archivo que acaba de guardar y, a continuación, vuelva a ejecutar el comando create-project.
aws codebuild create-project --cli-input-json file://create-project.json
Si el comando se ejecuta correctamente, aparecen datos similares a los siguientes en el resultado.
{ "project": { "name": "codebuild-demo-project", "serviceRole": "
serviceIAMRole
", "tags": [], "artifacts": { "packaging": "NONE", "type": "S3", "location": "codebuild-region-ID
-account-ID
-output-bucket", "name": "message-util.zip" }, "lastModified": 1472661575.244, "timeoutInMinutes": 60, "created": 1472661575.244, "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/standard:5.0", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-input-bucket/MessageUtil.zip" }, "encryptionKey": "arn:aws:kms:region-ID
:account-ID
:alias/aws/s3", "arn": "arn:aws:codebuild:region-ID
:account-ID
:project/codebuild-demo-project" } }-
project
representa información acerca de este proyecto de compilación.-
tags
representa todas las etiquetas que se han declarado. -
packaging
representa la forma en que el artefacto de salida de la compilación se almacena en el bucket de salida.NONE
indica que se crea una carpeta en el bucket de salida. El artefacto de salida de la compilación se almacena en esa carpeta. -
lastModified
representa la fecha, en formato de fecha Unix, en la que se cambió por última vez la información sobre el proyecto de compilación. -
timeoutInMinutes
representa el número de minutos después de los cuales CodeBuild detiene la compilación si esta no se ha completado. (El valor predeterminado es 60 minutos.) -
created
representa la fecha, en formato de fecha Unix, en la que se creó el proyecto de compilación. -
environmentVariables
representa cualquier variable de entorno que se haya declarado y esté disponible para que CodeBuild la use durante la compilación. -
encryptionKey
representa el ARN de la clave maestra del cliente que CodeBuild usa para cifrar el artefacto de salida de la compilación. -
arn
representa el ARN del proyecto de compilación.
-
-
nota
Después de ejecutar el comando create-project, podría aparecer un mensaje de error similar al siguiente: Usuario: user-ARN
no tiene autoridad para ejecutar: codebuild:CreateProject. Esto probablemente se deba a que ha configurado la AWS CLI con las credenciales de un usuario de que no tiene permisos suficientes para crear proyectos de compilación en CodeBuild. Para solucionar este problema, configure la AWS CLI con credenciales que pertenezcan a alguna de las siguientes entidades de IAM:
-
Un usuario administrador en su cuenta de AWS. Para obtener más información, consulte Creación del primer usuario raíz y grupo de Cuenta de AWS en la Guía del usuario.
-
Un usuario en su cuenta de AWS con las políticas administradas
AWSCodeBuildAdminAccess
,AmazonS3ReadOnlyAccess
yIAMFullAccess
vinculadas a ese usuario o un grupo de IAM al que pertenece el usuario. Si no dispone de un usuario o grupo de AWS en su cuenta de con estos permisos, y no puede añadir estos permisos al usuario o grupo, póngase en contacto con el administrador de su cuenta de AWS para obtener ayuda. Para obtener más información, consulte Políticas administradas (predefinidas) por AWS para AWS CodeBuild.
Paso 6: ejecutar la compilación
(Paso anterior: Paso 5: crear el proyecto de compilación)
En este paso, indicará a AWS CodeBuild que ejecute la compilación con la configuración del proyecto de compilación.
Para ejecutar la compilación
-
Utilice la AWS CLI para ejecutar el comando start-build:
aws codebuild start-build --project-name
project-name
Sustituya
nombre-proyecto
por el nombre de su proyecto de compilación del paso anterior (por ejemplo,codebuild-demo-project
). -
Si el comando se ejecuta correctamente, aparecerán datos similares a los siguientes en el resultado:
{ "build": { "buildComplete": false, "initiator": "
user-name
", "artifacts": { "location": "arn:aws:s3:::codebuild-region-ID
-account-ID
-output-bucket/message-util.zip" }, "projectName": "codebuild-demo-project", "timeoutInMinutes": 60, "buildStatus": "IN_PROGRESS", "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/standard:5.0", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-input-bucket/MessageUtil.zip" }, "currentPhase": "SUBMITTED", "startTime": 1472848787.882, "id": "codebuild-demo-project:0cfbb6ec-3db9-4e8c-992b-1ab28EXAMPLE", "arn": "arn:aws:codebuild:region-ID
:account-ID
:build/codebuild-demo-project:0cfbb6ec-3db9-4e8c-992b-1ab28EXAMPLE" } }-
build
representa información acerca de esta compilación.-
buildComplete
indica si la compilación se ha completado (true
). De lo contrario,false
. -
initiator
representa la entidad que inició la compilación. -
artifacts
representa información sobre la salida de la compilación, incluida su ubicación. -
projectName
representa el nombre del proyecto de compilación. -
buildStatus
representa el estado actual de la compilación cuando se ejecutó el comando start-build. -
currentPhase
representa la fase actual de la compilación cuando se ejecutó el comando start-build. -
startTime
representa la hora, en formato de hora Unix, en la que se inició el proceso de compilación. -
id
representa el ID de la compilación. -
arn
representa el ARN de la compilación.
-
Anote el valor de
id
. Lo necesitará en el siguiente paso. -
Paso 7: ver información resumida sobre la compilación
(Paso anterior: Paso 6: ejecutar la compilación)
En este paso, verá información resumida sobre el estado de la compilación.
Para ver la información resumida de la compilación
-
Utilice la AWS CLI para ejecutar el comando batch-get-builds.
aws codebuild batch-get-builds --ids
id
Sustituya
id
por el valor deid
que apareció en el resultado del paso anterior.Si el comando se ejecuta correctamente, aparecen datos similares a los siguientes en el resultado.
{ "buildsNotFound": [], "builds": [ { "buildComplete": true, "phases": [ { "phaseStatus": "SUCCEEDED", "endTime": 1472848788.525, "phaseType": "SUBMITTED", "durationInSeconds": 0, "startTime": 1472848787.882 },
... The full list of build phases has been omitted for brevity ...
{ "phaseType": "COMPLETED", "startTime": 1472848878.079 } ], "logs": { "groupName": "/aws/codebuild/codebuild-demo-project", "deepLink": "https://console.aws.amazon.com/cloudwatch/home?region=region-ID
#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE", "streamName": "38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE" }, "artifacts": { "md5sum": "MD5-hash
", "location": "arn:aws:s3:::codebuild-region-ID
-account-ID
-output-bucket/message-util.zip", "sha256sum": "SHA-256-hash
" }, "projectName": "codebuild-demo-project", "timeoutInMinutes": 60, "initiator": "user-name
", "buildStatus": "SUCCEEDED", "environment": { "computeType": "BUILD_GENERAL1_SMALL", "image": "aws/codebuild/standard:5.0", "type": "LINUX_CONTAINER", "environmentVariables": [] }, "source": { "type": "S3", "location": "codebuild-region-ID
-account-ID
-input-bucket/MessageUtil.zip" }, "currentPhase": "COMPLETED", "startTime": 1472848787.882, "endTime": 1472848878.079, "id": "codebuild-demo-project:38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE", "arn": "arn:aws:codebuild:region-ID
:account-ID
:build/codebuild-demo-project:38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE" } ] }-
buildsNotFound
representa los identificadores de compilación de todas las compilaciones sin información disponible. En este ejemplo, debería estar vacío. -
builds
representa información de cada compilación con información disponible. En este ejemplo, en el resultado aparece información sobre una única compilación.-
phases
representa el conjunto de fases de compilación que CodeBuild ejecuta durante el proceso de compilación. La información sobre cada fase de compilación se muestra por separado comostartTime
,endTime
ydurationInSeconds
(cuándo se inició y terminó la fase de compilación, en formato de hora Unix, y cuánto duró, en segundos), así comophaseType
como (SUBMITTED
,PROVISIONING
,DOWNLOAD_SOURCE
,INSTALL
,PRE_BUILD
,BUILD
,POST_BUILD
,UPLOAD_ARTIFACTS
,FINALIZING
oCOMPLETED
) yphaseStatus
(comoSUCCEEDED
,FAILED
,FAULT
,TIMED_OUT
,IN_PROGRESS
oSTOPPED
). La primera vez que ejecute el comando batch-get-builds, es posible que no haya muchas fases (o que no haya ninguna). Después de ejecuciones posteriores del comando batch-get-builds con el mismo ID de compilación, deberían aparecer más fases de compilación en el resultado. -
logs
representa información en Registros de Amazon CloudWatch sobre los registros de compilación. -
md5sum
ysha256sum
representan los valores hash MD5 y SHA-256 del artefacto de salida de la compilación. Aparecerán en el resultado solamente si el valorpackaging
del proyecto de compilación se establece enZIP
. (No ha establecido este valor en este tutorial). Puede utilizar estos valores hash junto con una herramienta de suma de comprobación para confirmar la integridad y autenticidad de los archivos.nota
También puede utilizar la consola de Amazon S3 para ver estos valores hash. Seleccione la casilla situada junto al artefacto de salida de la compilación, elija Actions (Acciones) y luego elija Properties (Propiedades). En el panel Properties, expanda Metadata y consulte los valores de x-amz-meta-codebuild-content-md5 y x-amz-meta-codebuild-content-sha256. (En la consola de Amazon S3, el valor de ETag del artefacto de salida de la compilación no debe interpretarse como valor hash MD5 o SHA-256).
Si utiliza los SDK de AWS para obtener estos valores hash, los valores tendrán el nombre
codebuild-content-md5
ycodebuild-content-sha256
. -
endTime
representa la hora, en formato de hora Unix, en la que terminó el proceso de compilación.
-
nota
Los metadatos de Amazon S3 tienen un encabezado de CodeBuild llamado
x-amz-meta-codebuild-buildarn
que contiene labuildArn
de la compilación de CodeBuild que publica los artefactos en Amazon S3. Se añadebuildArn
para permitir el seguimiento de las notificaciones en la fuente y para hacer referencia a la compilación de donde procede el artefacto. -
Paso 8: ver información detallada sobre la compilación
(Paso anterior: Paso 7: ver información resumida sobre la compilación)
En este paso, verá información detallada acerca de su compilación en Registros de CloudWatch.
nota
Para proteger la información confidencial, lo siguiente está oculto en los registros de CodeBuild:
-
ID de clave de acceso de AWS. Para obtener más información, consulte Administración de claves de acceso para usuarios de IAM en la Guía del usuario de AWS Identity and Access Management.
-
Cadenas especificadas mediante el almacén de parámetros. Para obtener más información, consulte Almacén de parámetros de Systems Manager y Tutorial de la consola del almacén de parámetros de Systems Manager en la Guía del usuario de Amazon EC2 Systems Manager.
-
Cadenas especificadas mediante AWS Secrets Manager. Para obtener más información, consulte Administración de claves.
Para ver información detallada sobre la compilación
-
Utilice un navegador web para ir a la ubicación
deepLink
que aparecía en el resultado del paso anterior (por ejemplo,https://console.aws.amazon.com/cloudwatch/home?region=
).region-ID
#logEvent:group=/aws/codebuild/codebuild-demo-project;stream=38ca1c4a-e9ca-4dbc-bef1-d52bfEXAMPLE -
En el flujo de registro de Registros de CloudWatch, es posible examinar los eventos de registro. De forma predeterminada, solo se muestra el último conjunto de eventos de log. Para ver eventos de log anteriores, desplácese hasta el principio de la lista.
-
En este tutorial, la mayoría de los eventos de registro contienen información detallada sobre la descarga e instalación de archivos de dependencia de compilación de CodeBuild en su entorno de compilación, lo que probablemente no le interese. Puede usar el cuadro Filter events para reducir la información que se muestra. Por ejemplo, si escribe
"[INFO]"
en el cuadro Filter events (Filtrar eventos), solo se muestran los eventos que contienen[INFO]
. Para obtener más información, consulte Sintaxis de patrones y filtros en la Guía del usuario de Amazon CloudWatch.
Estas partes de del flujo de registro de Registros de CloudWatch pertenecen a este tutorial.
... [Container] 2016/04/15 17:49:42 Entering phase PRE_BUILD [Container] 2016/04/15 17:49:42 Running command echo Entering pre_build phase... [Container] 2016/04/15 17:49:42 Entering pre_build phase... [Container] 2016/04/15 17:49:42 Phase complete: PRE_BUILD Success: true [Container] 2016/04/15 17:49:42 Entering phase BUILD [Container] 2016/04/15 17:49:42 Running command echo Entering build phase... [Container] 2016/04/15 17:49:42 Entering build phase... [Container] 2016/04/15 17:49:42 Running command mvn install [Container] 2016/04/15 17:49:44 [INFO] Scanning for projects... [Container] 2016/04/15 17:49:44 [INFO] [Container] 2016/04/15 17:49:44 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:44 [INFO] Building Message Utility Java Sample App 1.0 [Container] 2016/04/15 17:49:44 [INFO] ------------------------------------------------------------------------ ... [Container] 2016/04/15 17:49:55 ------------------------------------------------------- [Container] 2016/04/15 17:49:55 T E S T S [Container] 2016/04/15 17:49:55 ------------------------------------------------------- [Container] 2016/04/15 17:49:55 Running TestMessageUtil [Container] 2016/04/15 17:49:55 Inside testSalutationMessage() [Container] 2016/04/15 17:49:55 Hi!Robert [Container] 2016/04/15 17:49:55 Inside testPrintMessage() [Container] 2016/04/15 17:49:55 Robert [Container] 2016/04/15 17:49:55 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 sec [Container] 2016/04/15 17:49:55 [Container] 2016/04/15 17:49:55 Results : [Container] 2016/04/15 17:49:55 [Container] 2016/04/15 17:49:55 Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 ... [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 [INFO] BUILD SUCCESS [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 [INFO] Total time: 11.845 s [Container] 2016/04/15 17:49:56 [INFO] Finished at: 2016-04-15T17:49:56+00:00 [Container] 2016/04/15 17:49:56 [INFO] Final Memory: 18M/216M [Container] 2016/04/15 17:49:56 [INFO] ------------------------------------------------------------------------ [Container] 2016/04/15 17:49:56 Phase complete: BUILD Success: true [Container] 2016/04/15 17:49:56 Entering phase POST_BUILD [Container] 2016/04/15 17:49:56 Running command echo Entering post_build phase... [Container] 2016/04/15 17:49:56 Entering post_build phase... [Container] 2016/04/15 17:49:56 Phase complete: POST_BUILD Success: true [Container] 2016/04/15 17:49:57 Preparing to copy artifacts [Container] 2016/04/15 17:49:57 Assembling file list [Container] 2016/04/15 17:49:57 Expanding target/messageUtil-1.0.jar [Container] 2016/04/15 17:49:57 Found target/messageUtil-1.0.jar [Container] 2016/04/15 17:49:57 Creating zip artifact
En este ejemplo, CodeBuild ha completado correctamente las fases de precompilación, compilación y postcompilación. Ha ejecutado las pruebas unitarias y ha compilado correctamente el archivo messageUtil-1.0.jar
.
Paso 9: obtener el artefacto de salida de la compilación
(Paso anterior: Paso 8: ver información detallada sobre la compilación)
En este paso, obtendrá el archivo messageUtil-1.0.jar
compilado por CodeBuild y cargado en el bucket de salida.
Puede usar la consola de CodeBuild o la consola de Amazon S3 para completar este paso.
Para obtener el artefacto de salida de la compilación (consola de AWS CodeBuild)
-
Con la consola de CodeBuild todavía abierta y la página de detalles de la compilación mostrada del paso anterior, expanda Detalles de la compilación y, a continuación, desplácese hacia abajo, hasta la sección Artefactos.
nota
Si la página de detalles de la compilación no se muestra, en la barra de navegación, elija Historial de compilación y, a continuación, elija el enlace Ejecución de la compilación.
-
El enlace a la carpeta Amazon S3 se encuentra en la Ubicación de carga de artefactos. Este enlace abre la carpeta de Amazon S3 donde se encuentra el archivo de artefactos de salida de compilación de
messageUtil-1.0.jar
.
Para obtener el artefacto de salida de la compilación (consola de Amazon S3)
Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/
. -
Abra
codebuild-
.region-ID
-account-ID
-output-bucket -
Abra la carpeta
codebuild-demo-project
. -
Abra la carpeta
target
, donde se encuentra el archivo de artefactos de salida de compilaciónmessageUtil-1.0.jar
.
Paso 10: eliminar los buckets de S3
(Paso anterior: Paso 9: obtener el artefacto de salida de la compilación)
Para evitar cargos continuos en su cuenta de AWS, puede eliminar los buckets de entrada utilizados en este tutorial. Para obtener más instrucciones, consulte Eliminar o vaciar un bucket en la Guía del usuario de Amazon Simple Storage Service.
Si va a utilizar el usuario de IAM o un usuario administrador de IAM para eliminar estos buckets, el usuario debe tener más permisos de acceso. Añada la siguiente instrucción entre los marcadores (### BEGIN ADDING STATEMENT HERE ###
y ### END ADDING STATEMENTS HERE ###
) a una política de acceso existente para el usuario.
Las elipsis (...) de esta declaración se usan para abreviar. No elimine las instrucciones de la política de acceso existente. No escriba estos puntos suspensivos en la política.
{
"Version": "2012-10-17",
"Id": "...",
"Statement": [
### BEGIN ADDING STATEMENT HERE ###
{
"Effect": "Allow",
"Action": [
"s3:DeleteBucket",
"s3:DeleteObject"
],
"Resource": "*"
}
### END ADDING STATEMENT HERE ###
]
}
Encapsulación
En este tutorial, se ha usado AWS CodeBuild para construir un conjunto de archivos de clase Java en un archivo JAR. A continuación, ha consultado los resultados de la compilación.
Ahora puede intentar usar CodeBuild en sus propios escenarios. Siga las instrucciones en Planificación de una compilación. Si piensa que aún no está preparado, tal vez desee intentar compilar algunos de los ejemplos. Para obtener más información, consulte Ejemplos basados en casos de uso para CodeBuild.