En esta página se explica cómo usar Cloud Build para compilar y probar Node.js
aplicaciones, 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.json
ytest.js
. - Asegúrate de que tu archivo
package.json
incluya una secuencia de comandosstart
y 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
gcloud
de 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
name
especifica que Cloud Build usa la imagennode
de Docker Hub para ejecutar tu tarea. Cuando especifiques lanode
imagen, puedes omitir la versión del nodo para usar la:latest
de forma predeterminada o especificar una versión del nodo para usar una versión específica. Por ejemplo,name: node
usará la versión más reciente de Node yname: node:12
usaránode:12
. El campo
entrypoint
especifica que se usa la herramientanpm
cuando 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 comandoinstall
en el paso de compilaciónnpm
. El campoargs
de 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ñadeinstall
al campoargs
para invocar el comandoinstall
:steps: - name: 'node' entrypoint: 'npm' args: ['install']
Añadir pruebas: si has definido una secuencia de comandos
test
en tupackage.json
, puedes configurar Cloud Build para que ejecute la secuencia de comandos añadiendotest
al campoargs
:steps: - name: 'node' entrypoint: 'npm' args: ['install'] - name: 'node' entrypoint: 'npm' args: ['test']
Ejecutar comandos personalizados: si tu
package.json
contiene algún comando personalizado, puedes configurar Cloud Build para que lo ejecute. En el campoargs
, añaderun
como 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
npmPackages
y 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_PATH
puede 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: VERIFIED
a la secciónoptions
de 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
node
como una variable de sustitución. - Crea un activador para cada versión de
node
con 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
node
de 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
node
versión como variable de sustitución. En el siguiente ejemplo de archivo de configuración de compilación,$_NODE_VERSION
es 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
node
con 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
node
que has usado en el archivo de configuración de compilación y, en Value (Valor), especifica la versión denode
. Por ejemplo,_NODE_VERSION
y12
.
- 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.