En esta página se explica cómo usar Cloud Build para compilar y probar Node.jsaplicaciones, almacenar artefactos compilados en un repositorio npm de Artifact Registry y generar información de procedencia de compilación.
Cloud Build te permite usar cualquier imagen de contenedor disponible públicamente para ejecutar tus tareas. La imagen pública node de Docker Hub
viene preinstalada con la herramienta npm. Puedes configurar Cloud Build para compilar tu proyecto Node.js con esta herramienta.
Antes de empezar
En las instrucciones de esta página se da por hecho que conoces Node.js. Además:
- Familiarízate con npm.
- Ten a mano tu proyecto
Node.js, incluidos los archivospackage.jsonytest.js. - Asegúrate de que tu archivo
package.jsonincluya una secuencia de comandosstarty una secuencia de comandostest. - Familiarízate con cómo escribir un archivo de configuración de Cloud Build.
- Tener un repositorio npm en Artifact Registry. Si no tienes ninguno, crea un repositorio.
- Para ejecutar los comandos
gcloudde esta página, instala la CLI de Google Cloud.
Desarrollar con npm
Para ejecutar tus 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
con 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, añade un campo entrypoint en el paso de compilación. La imagen node de Docker Hub viene con la herramienta npm preinstalada. Especifica las herramientas en el campo entrypoint para
invocarlas como punto de entrada del paso de compilación.
En el siguiente ejemplo de archivo de configuración de compilación:
- El campo
nameespecifica que Cloud Build usa la imagennodede Docker Hub para ejecutar tu tarea. Cuando especifiques lanodeimagen, puedes omitir la versión del nodo para usar la:latestde forma predeterminada o especificar una versión del nodo para usar una versión específica. Por ejemplo,name: nodeusará la versión más reciente de Node yname: node:12usaránode:12. El campo
entrypointespecifica que se usa la herramientanpmcuando se invoca la imagennode.steps: - name: 'node' entrypoint: 'npm'
Configurar compilaciones de Node.js
En el directorio raíz de tu proyecto, crea un archivo de configuración llamado
cloudbuild.yaml.Instala las dependencias: antes de compilar tu aplicación, debes asegurarte de que todas las dependencias de tu proyecto estén instaladas desde
npm. Puedes instalar dependencias con el comandoinstallen el paso de compilaciónnpm. El campoargsde un paso de compilación toma una lista de argumentos y los pasa a la imagen a la que hace referencia el campo name. En el archivo de configuración de compilación, añadeinstallal campoargspara invocar el comandoinstall:steps: - name: 'node' entrypoint: 'npm' args: ['install']Añadir pruebas: si has definido una secuencia de comandos
testen tupackage.json, puedes configurar Cloud Build para que ejecute la secuencia de comandos añadiendotestal campoargs:steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test']Ejecutar comandos personalizados: si tu
package.jsoncontiene algún comando personalizado, puedes configurar Cloud Build para que lo ejecute. En el campoargs, añaderuncomo 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 el archivo de configuración, añade el campo
npmPackagesy especifica tu repositorio npm en Artifact Registry:artifacts: npmPackages: - repository: 'https://LOCATION-npm.pkg.dev/PROJECT-ID/REPOSITORY_NAME' packagePath: 'PACKAGE_PATH'Sustituye los siguientes valores:
- LOCATION: la ubicación de tu repositorio en Artifact Registry.
- PROJECT_ID: el ID del Google Cloud proyecto que contiene tu repositorio de Artifact Registry.
- REPOSITORY_NAME: el nombre de tu repositorio npm en Artifact Registry.
- PACKAGE_PATH: la ruta del directorio local que contiene el paquete npm que quieres subir a Artifact Registry. Te recomendamos que uses una ruta absoluta. El valor de
PACKAGE_PATHpuede ser.para usar el directorio de trabajo actual, pero el campo no se puede omitir ni dejar vacío. Este directorio debe contener un archivopackage.json.
Opcional: Habilitar la generación de procedencia
Cloud Build puede generar metadatos de procedencia de compilación verificables de niveles de la cadena de suministro para artefactos de software (SLSA) para proteger tu flujo de integración continua.
Para habilitar la generación de procedencia, añade
requestedVerifyOption: VERIFIEDa la secciónoptionsde tu archivo de configuración.Inicia la compilación: manualmente o con activadores de compilación.
Una vez que se haya completado la compilación, puedes ver los detalles del repositorio en Artifact Registry.
También puedes ver los metadatos de procedencia de la compilación y validar la procedencia.
Ejecutar pruebas en varias versiones de node
A veces es necesario asegurarse de que tu proyecto funcione en varias versiones de node. Puedes crear y configurar activadores de Cloud Build para que:
- En el archivo de configuración de compilación, especifica la versión
nodecomo una variable de sustitución. - Crea un activador para cada versión de
nodecon la que quieras compilar tu aplicación. - En cada una de las configuraciones de los activadores, utilice el campo de valor de la variable de sustitución para 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 de los activadores:
En la raíz de tu repositorio, añade un archivo de configuración de compilación que especifique la
nodeversión como 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
nodecon la que quieras compilar, crea un activador de compilación siguiendo estos pasos:Abre la página Triggers (Activadores) en la Google Cloud consola:
Selecciona tu proyecto en el menú desplegable del selector de proyectos situado en la parte superior de la página.
Haz clic en Abrir.
Haz clic en Crear activador.
En la página Crear activador, introduzca los siguientes ajustes:
Escribe un nombre para el activador.
Selecciona el evento del repositorio para iniciar el activador.
Selecciona el repositorio que contiene el código fuente y el archivo de configuración de compilación.
Especifica la expresión regular del nombre de la rama o etiqueta que iniciará el activador.
Configuración: elige el archivo de configuración de compilación que creaste anteriormente.
En Variables de sustitución, haga clic en Añadir variable.
- En Variable (Variable), especifica la variable de versión
nodeque has usado en el archivo de configuración de compilación y, en Value (Valor), especifica la versión denode. Por ejemplo,_NODE_VERSIONy12.
- En Variable (Variable), especifica la variable de versión
Haz clic en Crear para guardar el activador de compilación.
Puedes usar estos activadores para compilar tu código en la versión de node que hayas especificado en el activador.
Siguientes pasos
- Consulta cómo ver los resultados de las compilaciones.
- Consulta cómo proteger las compilaciones.
- Consulta cómo crear imágenes de contenedor.
- Consulta cómo crear aplicaciones Go.
- Consulta cómo realizar implementaciones azul/verde en Compute Engine.
- Consulta cómo solucionar errores de compilación.