Tutorial: Extracción de un repositorio de paquetes
En este tutorial, aprenderá a crear un flujo de trabajo que ejecute una aplicación cuyas dependencias se extraigan de un repositorio de paquetes de CodeCatalyst. Se trata de una sencilla aplicación de Node.js que imprime el mensaje “Hola, mundo” en los registros de CodeCatalyst. La aplicación tiene una sola dependencia: el paquete npm lodashlodash
se usa para transformar una cadena hello-world
en Hello World
. Utilizará la versión 4.17.20 de este paquete.
Tras configurar la aplicación y el flujo de trabajo, debe configurar CodeCatalyst para evitar que se importen versiones adicionales de lodash
en el repositorio de paquetes de CodeCatalyst desde el registro público externo (npmjs.comlodash
se hayan bloqueado correctamente.
Al final de este tutorial, debería entender bien cómo interactúa un flujo de trabajo con los repositorios de paquetes, tanto dentro como fuera de CodeCatalyst, para recuperar paquetes. También comprenderá el funcionamiento interno de las interacciones entre npm, el repositorio de paquetes, el flujo de trabajo y el archivo package.json
de la aplicación.
Temas
- Requisitos previos
- Paso 1: crear un repositorio de código fuente
- Paso 2: crear los repositorios de paquetes de puertas de enlace y de CodeCatalyst
- Paso 3: crear la aplicación “Hola, mundo”
- Paso 4: crear un flujo de trabajo que ejecute “Hola, mundo”
- Paso 5: verificar el flujo de trabajo
- Paso 6: bloquear las importaciones desde npmjs.com
- Paso 7: probar la característica de bloqueo
- Limpieza
Requisitos previos
Antes de empezar
-
Necesita un espacio en CodeCatalyst. Para obtener más información, consulte Creación de un espacio.
-
En su espacio de CodeCatalyst, necesita un proyecto vacío llamado:
codecatalyst-package-project
Use la opción Empezar desde cero para crear este proyecto.
Para obtener más información, consulte Creación de un proyecto vacío en Amazon CodeCatalyst.
Paso 1: crear un repositorio de código fuente
En este paso, creará un repositorio de código fuente en CodeCatalyst. Este repositorio almacena los archivos de código fuente del tutorial, como los archivos index.js
y package.json
.
Para obtener más información sobre los repositorios de código fuente, consulte Creación de un repositorio de código fuente.
Creación de un repositorio de código fuente
Abra la consola de CodeCatalyst en https://codecatalyst.aws/
. -
Vaya a su proyecto
codecatalyst-package-project
. -
En el panel de navegación, elija Código y, a continuación, elija Repositorios de origen.
-
Elija Agregar repositorio y, a continuación, elija Crear repositorio.
-
En Nombre del repositorio, escriba:
hello-world-app
-
Seleccione Crear.
Paso 2: crear los repositorios de paquetes de puertas de enlace y de CodeCatalyst
En este paso, creará un repositorio de paquetes en su proyecto de CodeCatalyst y lo conectará a un repositorio de puerta de enlace, también en su proyecto de CodeCatalyst. Luego, importará la dependencia del tutorial (lodash
) desde npmjs.com a ambos repositorios.
El repositorio de puerta de enlace es como si fuera el pegamento que conecta el repositorio de paquetes en CodeCatalyst con el npmjs.com público.
Para obtener más información sobre los repositorios de paquetes, consulte Publicación y uso compartido de paquetes de software en CodeCatalyst.
nota
En este tutorial, se utilizan los términos repositorio de paquetes de CodeCatalyst y repositorio de puerta de enlace para hacer referencia a los dos repositorios que se crean en CodeCatalyst en el siguiente procedimiento.
Creación de repositorios de puertas de enlace y de paquetes de CodeCatalyst
-
En el panel de navegación, elija Packages (Paquetes).
-
Seleccione Crear repositorio de paquetes.
-
En Nombre del repositorio, escriba:
codecatalyst-package-repository
-
Elija + Seleccionar repositorios ascendentes.
-
Seleccione Repositorios de puerta de enlace.
-
En el cuadro npm-public-registry-gateway, seleccione Crear.
-
Elija Seleccionar.
-
Seleccione Crear.
CodeCatalyst crea un repositorio de paquetes denominado
codecatalyst-package-repository
, que está conectado a un repositorio de puerta de enlace. El repositorio de puerta de enlace está conectado al registro npmjs.com.
Paso 3: crear la aplicación “Hola, mundo”
En este paso, creará una aplicación Node.js llamada “Hola, mundo” y a importar su dependencia (lodash
) en los repositorios de paquetes de CodeCatalyst y puerta de enlace.
Para crear la aplicación, necesita un equipo de desarrollo con Node.js y tener instalado el cliente de npm
asociado.
En este tutorial, se da por sentado que utilizará un entorno de desarrollo de CodeCatalyst como equipo de desarrollo. Aunque no es necesario utilizar un entorno de desarrollo de CodeCatalyst, sí que es recomendable porque proporciona un entorno de trabajo limpio, tiene Node.js y npm
preinstalado y es fácil de eliminar tras finalizar el tutorial. Para obtener más información sobre los entornos de desarrollo de CodeCatalyst, consulte Creación de un entorno de desarrollo.
Siga las instrucciones siguientes para iniciar un entorno de desarrollo de CodeCatalyst y utilizarlo para crear la aplicación “Hola, mundo”.
Inicialización de un entorno de desarrollo de CodeCatalyst
-
En el panel de navegación, elija Código y, a continuación, Entornos de desarrollo.
-
Cerca de la parte superior, elija Crear entorno de desarrollo y, a continuación, elija AWS Cloud9 (en el navegador).
-
Asegúrese de que Repositorio se haya configurado como
hello-world-app
y que Ramificación existente se haya configurado comomain
. Seleccione Crear.El entorno de desarrollo se abrirá en una nueva pestaña del navegador y el repositorio (
hello-world-app
) se clonará en este. -
Deje abiertas las dos pestañas del navegador de CodeCatalyst y vaya al siguiente procedimiento.
Creación de la aplicación Node.js “Hola, mundo”
-
Vaya a su entorno de desarrollo.
-
En la línea de comandos del terminal, cambie al directorio raíz del repositorio de código fuente de
hello-world-app
.cd hello-world-app
-
Inicialice un proyecto de Node.js:
npm init -y
La inicialización crea un archivo
package.json
en el directorio raíz dehello-world-app
. -
Conecte el cliente npm del entorno de desarrollo al repositorio de paquetes de CodeCatalyst:
-
Cambie a la consola de CodeCatalyst.
-
En el panel de navegación, elija Packages (Paquetes).
-
Elija
codecatalyst-package-repository
. -
Seleccione Establecer conexión con el repositorio.
-
Seleccione Crear token. Se creará un token de acceso personal (PAT) para usted.
-
Seleccione Copiar para copiar los comandos.
-
Cambie a su entorno de desarrollo.
-
Asegúrese de estar en el directorio
hello-world-app
. -
Pegue los comandos. Tendrán un aspecto similar al siguiente:
npm set registry=https://packages.us-west-2.codecatalyst.aws/npm/ExampleCompany/codecatalyst-package-project/codecatalyst-package-repository/ --location project npm set //packages.us-west-2.codecatalyst.aws/npm/ExampleCompany/codecatalyst-package-project/hello-world-app/:_authToken=
username
:token-secret
-
-
Importe la versión 4.17.20 de
lodash
:npm install lodash@v4.17.20 --save --save-exact
npm busca la versión 4.17.20 de
lodash
en las siguientes ubicaciones y en el siguiente orden:-
En el entorno de desarrollo. No lo encuentra aquí.
-
En el repositorio de paquetes de CodeCatalyst. No lo encuentra aquí.
-
En el repositorio de puerta de enlace. No lo encuentra aquí.
-
En npmjs.com. Lo encuentra aquí.
npm importa
lodash
al repositorio de puerta de enlace, al repositorio de paquetes de CodeCatalyst y al entorno de desarrollo.nota
Si no hubiera conectado el cliente de npm en el repositorio de paquetes de CodeCatalyst en el paso 4, npm habría extraído
lodash
directamente de npmjs.com y no habría importado el paquete a ninguno de los repositorios.npm también actualiza el archivo
package.json
con la dependencialodash
y crea un directorionode_modules
que contienelodash
y todas sus dependencias. -
-
Compruebe que
lodash
se haya importado correctamente a su entorno de desarrollo. Escriba:npm list
Aparecerá el siguiente mensaje que indica que la importación se ha realizado correctamente:
`-- lodash@4.17.20
-
(Opcional) Abra
hello-world-app/package.json
y compruebe que se hayan añadido las líneas enrojo y en negrita
:{ "name": "hello-world-app", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC",
dependencies": { "lodash": "4.17.20"
} } -
En
/hello-world-app
, cree un archivo llamadoindex.js
con el siguiente contenido:sugerencia
Puede utilizar la navegación lateral de su entorno de desarrollo para crear este archivo.
// Importing lodash library const _ = require('lodash'); // Input string const inputString = 'hello-world'; // Transforming the string using lodash const transformedString = _.startCase(inputString.replace('-', ' ')); // Outputting the transformed string to the console console.log(transformedString);
Comprobación de la exportación de “lodash” en los repositorios de paquetes de CodeCatalyst y de puerta de enlace
-
Cambie a la consola de CodeCatalyst.
-
En el panel de navegación, elija Packages (Paquetes).
-
Seleccione npm-public-registry-gateway.
-
Asegúrese de que aparezca
lodash
. La columna Última versión indica4.17.20
. -
Repita este procedimiento para el
codecatalyst-package-repository
. Puede que tenga que actualizar la ventana del navegador para ver el paquete importado.
Prueba de “Hola, mundo” en el entorno de desarrollo
-
Cambie a su entorno de desarrollo.
-
Compruebe que aún se encuentra en el directorio
hello-world-app
y ejecute la aplicación:node index.js
Aparecerá un mensaje
Hello World
. Node.js ejecutó la aplicación con el paquetelodash
que ha descargado en el entorno de desarrollo en un paso anterior.
Método para ignorar el directorio “node_modules” y confirmar “Hola, mundo”
-
Ignore el directorio
node_modules
. Escriba:echo "node_modules/" >> .gitignore
Es recomendable evitar confirmar este directorio. Además, confirmar este directorio interferirá con pasos futuros en este tutorial.
-
Añada, confirme y envíe:
git add . git commit -m "add the Hello World application" git push
Los archivos de la aplicación y del proyecto “Hola, mundo” se añaden al repositorio de código fuente.
Paso 4: crear un flujo de trabajo que ejecute “Hola, mundo”
En este paso, creará un flujo de trabajo que ejecute la aplicación “Hola, mundo” con la dependencia lodash
. El flujo de trabajo incluye una sola acción o tarea llamada RunHelloWorldApp
. La acción RunHelloWorldApp
incluye los siguientes comandos y secciones importantes:
-
Packages
En esta sección, se indica el nombre del repositorio de paquetes de CodeCatalyst al que se debe conectar la acción durante la ejecución de
npm install
. -
- Run: npm install
Este comando le indica a npm que instale las dependencias especificadas en el archivo
package.json
. La única dependencia especificada en el archivopackage.json
eslodash
; npm buscalodash
en las siguientes ubicaciones:-
En la imagen de Docker que ejecuta la acción. No lo encuentra aquí.
-
En el repositorio de paquetes de CodeCatalyst. Lo encuentra aquí.
Cuando npm encuentra
lodash
, lo importa a la imagen de Docker que ejecuta la acción. -
-
- Run: npm list
Este comando imprime qué versión de
lodash
se ha descargado en la imagen de Docker que ejecuta la acción. -
- Run: node index.js
Este comando ejecuta la aplicación “Hola, mundo” mediante la dependencia especificada en el archivo
package.json
.
Como puede ver, la acción RunHelloWorldApp
es una acción de creación, como lo indica el identificador aws/build@v1
situado cerca de la parte superior del flujo de trabajo. Para obtener más información sobre la acción de compilación, consulte Compilación con flujos de trabajo.
Siga las instrucciones a continuación para crear un flujo de trabajo que extraiga la dependencia lodash
del repositorio de paquetes de CodeCatalyst y, a continuación, ejecute la aplicación “Hola, mundo”.
Para crear un flujo de trabajo
-
Cambie a la consola de CodeCatalyst.
-
En el panel de navegación, elija CI/CD y, a continuación, elija Flujos de trabajo.
-
Seleccione Crear flujo de trabajo.
-
En Repositorio de origen, elija
hello-world-app
. -
En Ramificación, elija
main
.El archivo de definición del flujo de trabajo se creará en el repositorio y la ramificación de origen elegidos.
-
Seleccione Crear.
-
Seleccione YAML cerca de la parte superior.
-
Elimine el código de ejemplo de YAML.
-
Añada el código de YAML siguiente:
Name: codecatalyst-package-workflow SchemaVersion: "1.0" # Required - Define action configurations. Actions: RunHelloWorldApp: # Identifies the action. Do not modify this value. Identifier: aws/build@v1 Compute: Type: Lambda Inputs: Sources: - WorkflowSource # This specifies your source repository. Configuration: Steps: - Run: npm install - Run: npm list - Run: node index.js Container: # This specifies the Docker image that runs the action. Registry: CODECATALYST Image: CodeCatalystLinuxLambda_x86_64:2024_03 Packages: NpmConfiguration: PackageRegistries: - PackagesRepository:
codecatalyst-package-repository
En el código anterior, sustituya
codecatalyst-package-repository
por el nombre del repositorio de paquetes de CodeCatalyst que creó en Paso 2: crear los repositorios de paquetes de puertas de enlace y de CodeCatalyst.Para obtener información sobre las propiedades de este archivo, consulte el Acciones de compilación y prueba de YAML.
-
(Opcional) Seleccione Validar para asegurarse de que el código de YAML del flujo de trabajo es válido antes de confirmarlo.
-
Elija Commit (Confirmar).
-
En el cuadro de diálogo Confirmar flujo de trabajo, escriba lo siguiente:
-
En Nombre del archivo de flujo de trabajo, deje el valor predeterminado,
codecatalyst-package-workflow
. -
En Mensaje de confirmación, escriba:
add initial workflow file
-
En Repositorio, seleccione hello-world-app.
-
En Nombre de la ramificación, elija principal.
-
Elija Commit (Confirmar).
Ahora ha creado un flujo de trabajo.
-
Ejecución del flujo de trabajo
-
Junto al flujo de trabajo que acaba de crear (
codecatalyst-package-workflow
), seleccione Acciones y, a continuación, Ejecutar.Se inicia una ejecución de flujo de trabajo.
-
En la notificación verde de la parte superior, a la derecha, seleccione el enlace a la ejecución. El enlace tiene un aspecto similar a
View Run-1234
.Aparecerá un diagrama de flujo de trabajo que muestra quién inició la ejecución y la acción RunHelloWorldApp.
-
Seleccione la casilla de acción RunHelloWorldApp para ver el progreso de la acción.
-
Cuando termine la ejecución, vaya a Paso 5: verificar el flujo de trabajo.
Paso 5: verificar el flujo de trabajo
En este paso, comprobará que el flujo de trabajo haya ejecutado correctamente la aplicación “Hola, mundo” con su dependencia lodash
.
Verificación de la ejecución de la aplicación “Hola, mundo” utilizando su dependencia
-
En el diagrama de flujo de trabajo, selecciona la casilla RunHelloWorldApp.
Aparecerá una lista de mensajes de registro.
-
Amplíe el mensaje de registro
node index.js
.Aparecerá el siguiente mensaje:
[Container] 2024/04/24 21:15:41.545650 Running command node index.js Hello World
La aparición de
Hello Word
(en lugar dehello-world
) indica que la dependencialodash
se ha empleado correctamente. -
Amplíe el registro
npm list
.Aparecerá un mensaje similar al siguiente:
└── lodash@4.17.20
Este mensaje indica que la versión 4.17.20 de
lodash
se descargó en la imagen de Docker que ejecutaba la acción del flujo de trabajo.
Paso 6: bloquear las importaciones desde npmjs.com
Ahora que la versión 4.17.20 de lodash
está en los repositorios de paquetes de CodeCatalyst y puerta de enlace, puede bloquear las importaciones de otras versiones. El bloqueo impide importar accidentalmente versiones posteriores (o anteriores) de lodash
, que podrían contener código malicioso. Para obtener más información, consulte Edición de los controles de origen del paquete y Ataques de sustitución de dependencias.
Siga las instrucciones a continuación para bloquear las importaciones de lodash
en el repositorio de puerta de enlace. Al bloquear los paquetes en la puerta de enlace, también se bloquean en las ubicaciones descendentes.
Bloqueo de las importaciones en el repositorio de puerta de enlace
-
En el panel de navegación, elija Packages (Paquetes).
-
Seleccione npm-publish-registry-gateway.
-
Elija
lodash
. -
Cerca de la parte superior, seleccione Controles de origen.
-
En Ascendente, seleccione Bloquear.
-
Seleccione Guardar.
Ahora, ha bloqueado las importaciones al repositorio de puerta de enlace (y a los repositorios y ordenadores descendentes) desde npmjs.com.
Paso 7: probar la característica de bloqueo
En esta sección, verificará el funcionamiento del bloqueo que configuró en Paso 6: bloquear las importaciones desde npmjs.com. Para empezar, configure “Hola, mundo” de tal modo que solicite la versión 4.17.21 de lodash
en lugar de la que está disponible en el repositorio de puerta de enlace, que es la versión 4.17.20. A continuación, compruebe que la aplicación no pueda extraer la versión 4.17.21 de nmpjs.com, lo que indica que el bloqueo es correcto. Como prueba final, desbloquee las importaciones al repositorio de puerta de enlace y compruebe que la aplicación pueda extraer correctamente la versión 4.17.21 de lodash
.
Utilice el siguiente conjunto de procedimientos para probar la característica de bloqueo.
Antes de empezar
-
Cambie a su entorno de desarrollo.
-
Extraiga el archivo
codecatalyst-package-workflow.yaml
que creó anteriormente con la consola de CodeCatalyst:git pull
Configuración de “Hola, mundo” para solicitar la versión 4.17.21 de lodash
-
Abra
/hello-world-app/package.json
. -
Cambie la versión de
lodash
a 4.17.21, como se muestraen rojo y negrita
:{ "name": "hello-world-app", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "lodash": "
4.17.21
" } }Ahora, hay una discrepancia entre la versión en el archivo
package.json
(4.17.21) y la versión en los repositorios de paquetes de CodeCatalyst y de puerta de enlace (4.17.20). -
Añada, confirme y envíe:
git add . git commit -m "update package.json to use lodash 4.17.21" git push
Comprobación de que “Hola, mundo” no puede extraer la versión 4.17.21 de lodash
-
Ejecute el flujo de trabajo con la discrepancia de versiones:
-
Cambie a la consola de CodeCatalyst.
-
En el panel de navegación, elija CI/CD y, a continuación, elija Flujos de trabajo.
-
Junto a
codecatalyst-package-workflow
, seleccione Acciones y Ejecutar.npm busca las dependencias en
package.json
y ve que “Hola, mundo” necesita la versión 4.17.21 delodash
; npm busca la dependencia en las siguientes ubicaciones y en el siguiente orden:-
En la imagen de Docker que ejecuta la acción. No lo encuentra aquí.
-
En el repositorio de paquetes de CodeCatalyst. No lo encuentra aquí.
-
En el repositorio de puerta de enlace. No lo encuentra aquí.
-
En npmjs.com. Lo encuentra aquí.
Cuando npm encuentra la versión 4.17.21 en npmjs.com, intenta importarla al repositorio de puerta de enlace, pero la importación no ocurre porque ha configurado la puerta de enlace para que bloquee las importaciones de
lodash
.Como no hay importación, se produce un error en el flujo de trabajo.
-
-
-
Compruebe que ha habido un error en el flujo de trabajo:
-
En la notificación verde de la parte superior, a la derecha, seleccione el enlace a la ejecución. El enlace tiene un aspecto similar a
View Run-2345
. -
En el diagrama de flujo de trabajo, selecciona la casilla RunHelloWorldApp.
-
Amplíe el mensaje de registro
npm install
.Aparecerá el siguiente mensaje:
[Container] 2024/04/25 17:20:34.995591 Running command npm install npm ERR! code ETARGET npm ERR! notarget No matching version found for lodash@4.17.21. npm ERR! notarget In most cases you or one of your dependencies are requesting npm ERR! notarget a package version that doesn't exist. npm ERR! A complete log of this run can be found in: /tmp/.npm/_logs/2024-05-08T22_03_26_493Z-debug-0.log
El error indica que no se ha encontrado la versión 4.17.21. Esto es de esperar porque la ha bloqueado.
-
Desbloqueo de las importaciones desde npmjs.com
-
En el panel de navegación, elija Packages (Paquetes).
-
Seleccione npm-publish-registry-gateway.
-
Elija
lodash
. -
Cerca de la parte superior, seleccione Controles de origen.
-
En Ascendente, selecciona Permitir.
-
Seleccione Guardar.
Ahora, ha desbloqueado las importaciones de
lodash
.Ahora, el flujo de trabajo puede importar la versión 4.17.21 de
lodash
.
Prueba de que las importaciones de npmjs.com se han desbloqueado
-
Ejecute el flujo de trabajo de nuevo. Esta vez, el flujo de trabajo debería funcionar correctamente porque la importación de la versión 4.17.21 debería ocurrir. Para ejecutar el flujo de trabajo de nuevo:
-
Elija CI/CD y, a continuación, elija Flujos de trabajo.
-
Junto a
codecatalyst-package-workflow
, seleccione Acciones y Ejecutar. -
En la notificación verde de la parte superior, a la derecha, seleccione el enlace a la ejecución. El enlace tiene un aspecto similar a
View Run-3456
.Aparecerá un diagrama de flujo de trabajo que muestra quién inició la ejecución y la acción RunHelloWorldApp.
-
Seleccione la casilla de acción RunHelloWorldApp para ver el progreso de la acción.
-
Expanda el mensaje de registro de
npm list
y compruebe que haya un mensaje similar al siguiente:└── lodash@4.17.21
Este mensaje indica que se ha descargado la versión 4.17.21 de
lodash
.
-
-
Compruebe que la versión 4.17.21 se haya importado en los repositorios de CodeCatalyst y puerta de enlace:
-
En el panel de navegación, elija Packages (Paquetes).
-
Seleccione npm-public-registry-gateway.
-
Busque
lodash
y asegúrese de que la versión sea4.17.21
.nota
Aunque la versión 4.17.20 no aparezca en esta página, puede encontrarla seleccionando
lodash
y, a continuación, seleccionando Versiones en la parte superior. -
Repita estos pasos para comprobar que la versión 4.17.21 se haya importado en
codecatalyst-package-repository
.
-
Limpieza
Limpie los archivos y servicios utilizados en este tutorial para evitar que le cobren por ellos.
Limpieza de los paquetes del tutorial
-
Elimine
codecatalyst-package-project
:-
En la consola de CodeCatalyst, vaya al proyecto
codecatalyst-package-project
si no está ya allí. -
En el panel de navegación, seleccione Configuración del proyecto.
-
Elija Eliminar proyecto, introduzca
delete
y elija Eliminar proyecto.CodeCatalyst elimina todos los recursos del proyecto, incluidos los repositorios de paquetes de CodeCatalyst, de puerta de enlace y de origen. También se elimina el entorno de desarrollo.
-
-
Elimine el token (PAT):
-
Elija el nombre de usuario, a la derecha y seleccione Mi configuración.
-
En Tokens de acceso personal, seleccione el token que ha creado en este tutorial y, luego, elija Eliminar.
-
En este tutorial, ha visto cómo crear un flujo de trabajo que ejecute una aplicación que extrae sus dependencias de un repositorio de paquetes de CodeCatalyst. También ha visto cómo bloquear y desbloquear paquetes para que no entren en sus repositorios de paquetes de CodeCatalyst y de puerta de enlace.