En esta página, se explica cómo usar Cloud Build para compilar y probar aplicaciones de Node.js, almacenar artefactos compilados en un repositorio de npm en Artifact Registry y generar información de procedencia de la compilación.
Cloud Build permite usar cualquier imagen de contenedor disponible a nivel público para ejecutar tareas. La imagen node de Docker Hub pública viene preinstalada con la herramienta npm. Puedes configurar Cloud Build para compilar el proyecto de Node.js con esta herramienta.
Antes de comenzar
En las instrucciones de esta página, se da por hecho que estás familiarizado con Node.js. Además, debes hacer lo siguiente:
- Familiarízate con npm.
- Ten el proyecto
Node.jsa mano, incluidos los archivospackage.jsonytest.js. - Asegúrate de que el archivo
package.jsonincluya una secuencia de comandosstarty unatest. - Familiarízate con la escritura de un archivo de configuración de Cloud Build.
- Tener un repositorio de npm en Artifact Registry Si no tienes uno, crea un repositorio nuevo.
- Para ejecutar los comandos de
gcloudde esta página, instala Google Cloud CLI.
Compila con npm
Para ejecutar tareas en la imagen node de Docker Hub, especifica la URL de la imagen en el campo name del archivo de configuración de Cloud Build.
Cloud Build inicia el contenedor especificado en el campo name mediante el punto de entrada predeterminado de la imagen. Para anular el punto de entrada predeterminado y definir cómo se debe ejecutar el paso de compilación cuando se invoca, agrega un campo entrypoint en el paso de compilación. La imagen node en Docker Hub viene preinstalada con la herramienta npm. Especifica las herramientas en el campo entrypoint para invocarlas como el punto de entrada del paso de compilación.
En el siguiente ejemplo de archivo de configuración de compilación, se dan las siguientes situaciones:
- En el campo
name, se especifica que Cloud Build usa la imagennodede Docker Hub para ejecutar la tarea. Cuando especificas la imagennode, puedes omitir la versión del nodo por defecto a:latesto especificar una versión de nodo para usar una versión específica. Por ejemplo,name: nodeusará la versión más reciente del nodo yname: node:12usaránode:12. En el campo
entrypoint, se especifica que la herramientanpmse usa cuando se invoca la imagennode.steps: - name: 'node' entrypoint: 'npm'
Configura compilaciones de Node.js
En el directorio raíz del proyecto, crea un archivo de configuración llamado
cloudbuild.yaml.Instala dependencias: Antes de compilar la aplicación, debes asegurarte de que todas las dependencias del proyecto estén instaladas desde
npm. Puedes instalar dependencias mediante el comandoinstalldentro del paso de compilaciónnpm. En el campoargsde un paso de compilación, se toma una lista de argumentos y se los pasa a la imagen a la que hace referencia el campo de nombre. En el archivo de configuración de compilación, agregainstallal campoargspara invocar el comandoinstall:steps: - name: 'node' entrypoint: 'npm' args: ['install']Agrega pruebas: Si definiste una secuencia de comandos
testenpackage.json, puedes configurar Cloud Build para que ejecute la secuencia mediante la agregación detestal campoargs:steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test']Ejecuta comandos personalizados: Si
package.jsoncontiene comandos personalizados, puedes configurar Cloud Build para ejecutar ese comando. En el campoargs, agregaruncomo primer argumento seguido del nombre del comando personalizado. El siguiente archivo de configuración de compilación tiene argumentos para ejecutar un comando personalizado llamadobuild:steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test'] - name: 'node' entrypoint: 'npm' args: ['run', 'build']Subir a Artifact Registry:
En tu archivo de configuración, agrega el campo
npmPackagesy especifica tu repositorio de npm en el Registro de artefactos:artifacts: npmPackages: - repository: 'https://LOCATION-npm.pkg.dev/PROJECT-ID/REPOSITORY_NAME' packagePath: 'PACKAGE_PATH'Reemplaza los siguientes valores:
- LOCATION: Es la ubicación de tu repositorio en Artifact Registry.
- PROJECT_ID: Es el ID del Google Cloud proyecto que contiene tu repositorio de Artifact Registry.
- REPOSITORY_NAME: Es el nombre de tu repositorio de npm en Artifact Registry.
- PACKAGE_PATH: Es la ruta de acceso al directorio local que contiene el paquete de npm que deseas subir a Artifact Registry. Te recomendamos que uses una ruta de acceso absoluta. El valor de
PACKAGE_PATHpuede ser.para usar el directorio de trabajo actual, pero el campo no se puede omitir ni dejar en blanco. Este directorio debe contener un archivopackage.json.
Opcional: Habilita la generación de procedencia
Cloud Build puede generar metadatos de procedencia de compilación verificables de los niveles de cadena de suministro para artefactos de software (SLSA) para ayudar a proteger tu canalización de integración continua.
Para habilitar la generación de procedencia, agrega
requestedVerifyOption: VERIFIEDa la secciónoptionsen tu archivo de configuración.Inicia la compilación: de forma manual o con activadores de compilación.
Una vez que se complete la compilación, podrás ver los detalles del repositorio en Artifact Registry.
También puedes ver los metadatos de la procedencia de la compilación y validar la procedencia.
Ejecuta pruebas en varias versiones de node
En ocasiones, es necesario asegurarse de que el proyecto funcione en varias versiones de node. Puedes crear y configurar activadores de Cloud Build de modo que se den las siguientes situaciones:
- En el archivo de configuración de compilación, especifica la versión de
nodecomo una variable de sustitución. - Crea un activador para cada versión de
nodecon la que desees compilar la aplicación. - En cada una de las opciones de configuración del activador, usa el campo de valor de la variable de sustitución a fin de indicar la versión de
nodede ese activador.
En los siguientes pasos, se explica cómo especificar la versión de node mediante variables de sustitución específicas del activador:
En la raíz del repositorio, agrega un archivo de configuración de compilación, en el que se especifique la versión
nodecomo una variable de sustitución. En el siguiente ejemplo de archivo de configuración de compilación,$_NODE_VERSIONes una variable de sustitución definida por el usuario:steps: - name: 'node:$_NODE_VERSION' entrypoint: 'npm' args: ['install'] - name: 'node:$_NODE_VERSION' entrypoint: 'npm' args: ['test']Para cada versión de
nodeque desees compilar, crea un activador de compilación mediante los siguientes pasos:Abre la página Activadores en la Google Cloud consola:
Selecciona el proyecto en el menú desplegable del selector de proyectos, que se ubica en la parte superior de la página.
Haz clic en Abrir.
Haz clic en Crear activador.
En la página Crear activador, ingresa la siguiente configuración:
Ingresa un nombre para el activador.
Selecciona el evento del repositorio para iniciar el activador.
Selecciona el repositorio que contenga el código fuente y el archivo de configuración de compilación.
Especifica la regex de la rama o el nombre de la etiqueta que iniciará el activador.
Configuración: Elige el archivo de configuración de compilación que creaste con anterioridad.
En Substitution variables, haz clic en Agregar variable.
- En Variable, especifica la variable de versión
nodeque usaste en el archivo de configuración de compilación y, en Valor, especifica la versión denode. Por ejemplo,_NODE_VERSIONy12.
- En Variable, especifica la variable de versión
Haz clic en Crear para guardar el activador de compilación.
Puedes usar estos activadores para compilar el código en la versión del node que especificaste en el activador.
¿Qué sigue?
- Aprende a ver resultados de compilación.
- Obtén más información para proteger compilaciones.
- Obtén más información sobre cómo compilar imágenes de contenedores.
- Obtén más información sobre cómo compilar aplicaciones de Go.
- Obtén información para realizar implementaciones azul-verde en Compute Engine.
- Obtén más información para solucionar errores de compilación.