

Amazon ya no CodeCatalyst está abierto a nuevos clientes. Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte [Cómo migrar desde CodeCatalyst](migration.md).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Conexión de repositorios de paquetes a flujos de trabajo
<a name="workflows-packages"></a>

Un *paquete* es un paquete que incluye el software y los metadatos necesarios para instalar el software y resolver cualquier dependencia. CodeCatalyst admite el formato de paquete npm.

Un paquete se compone de lo siguiente:
+ Un nombre (por ejemplo, `webpack` es el nombre de un paquete npm conocido).
+ Un [espacio de nombres](packages-concepts.md#packages-concepts-package-namespaces) opcional (por ejemplo, `@types` en `@types/node`).
+ Un conjunto de [versiones](packages-concepts.md#packages-concepts-package-versions) (por ejemplo, `1.0.0`, `1.0.1` o `1.0.2`).
+ Metadatos en el nivel del paquete (por ejemplo, etiquetas dist de npm).

En CodeCatalyst, puede publicar paquetes y consumir paquetes de los repositorios de CodeCatalyst paquetes de sus flujos de trabajo. Puedes configurar una acción de compilación o prueba con un repositorio de CodeCatalyst paquetes para configurar automáticamente el cliente npm de una acción para enviar y extraer paquetes del repositorio especificado.

Para obtener más información sobre los paquetes, consulte [Publica y comparte paquetes de software en CodeCatalyst](packages.md).

**nota**  
Actualmente, las acciones de compilación y prueba son compatibles con los repositorios de CodeCatalyst paquetes.

**Topics**
+ [Tutorial: Extracción de un repositorio de paquetes](packages-tutorial.md)
+ [Especificar los repositorios de CodeCatalyst paquetes en los flujos de trabajo](workflows-package-specify-action.md)
+ [Uso de tokens de autorización en acciones del flujo de trabajo](workflows-package-export-token.md)
+ [Ejemplos: Repositorios de paquetes en flujos de trabajo](workflows-working-packages-ex.md)

# Tutorial: Extracción de un repositorio de paquetes
<a name="packages-tutorial"></a>

En este tutorial, aprenderá a crear un flujo de trabajo que ejecute una aplicación cuyas dependencias se extraigan de un repositorio de [CodeCatalyst paquetes](packages-concepts.md#packages-concepts-repository). La aplicación es una sencilla aplicación de Node.js que imprime un mensaje de «Hola mundo» en los registros. CodeCatalyst La aplicación tiene una sola dependencia: el paquete npm [lodash](https://www.npmjs.com/package/lodash). El paquete `lodash` 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 configurarlos CodeCatalyst para bloquear la importación de `lodash` versiones adicionales de al repositorio de CodeCatalyst paquetes desde el registro público externo ([npmjs.com](https://www.npmjs.com/)). A continuación, compruebe que las versiones adicionales de `lodash` se hayan bloqueado correctamente.

Al final de este tutorial, deberías tener una buena idea de cómo interactúa un flujo de trabajo con los repositorios de paquetes, tanto internos como externos CodeCatalyst, para recuperar los paquetes. También debes entender las behind-the-scenes interacciones que se producen entre npm, tu repositorio de paquetes, tu flujo de trabajo y el archivo de tu aplicación. `package.json` 

**Topics**
+ [Requisitos previos](#packages-tutorial-prereqs)
+ [Paso 1: creación de un repositorio de código fuente](#packages-tutorial-source-repo)
+ [Paso 2: Cree los repositorios de paquetes CodeCatalyst y gateway](#packages-tutorial-package-repo)
+ [Paso 3: creación de la aplicación “Hola, mundo”](#packages-tutorial-create-app)
+ [Paso 4: creación de un flujo de trabajo que ejecute “Hola, mundo”](#packages-tutorial-create-workflow)
+ [Paso 5: verificación del flujo de trabajo](#packages-tutorial-verify)
+ [Paso 6: bloqueo de las importaciones desde npmjs.com](#packages-tutorial-block)
+ [Paso 7: prueba de la característica de bloqueo](#packages-tutorial-test-block)
+ [Limpieza](#packages-tutorial-cleanup)

## Requisitos previos
<a name="packages-tutorial-prereqs"></a>

Antes de empezar:
+ Necesitas un CodeCatalyst **espacio.** Para obtener más información, consulte [Creación de un espacio](spaces-create.md).
+ En tu CodeCatalyst espacio, necesitas 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 [Crear un proyecto vacío en Amazon CodeCatalyst](projects-create.md#projects-create-empty).

## Paso 1: creación de un repositorio de código fuente
<a name="packages-tutorial-source-repo"></a>

En este paso, crearás un repositorio de origen 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](source-repositories-create.md).

**Creación de un repositorio de código fuente**

1. Abra la CodeCatalyst consola en [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Vaya a su proyecto, `codecatalyst-package-project`.

1. En el panel de navegación, elija **Código** y, a continuación, elija **Repositorios de origen**. 

1. Elija **Agregar repositorio** y, a continuación, elija **Crear repositorio**.

1. En **Nombre del repositorio**, escriba:

   ```
   hello-world-app
   ```

1. Seleccione **Crear**.

## Paso 2: Cree los repositorios de paquetes CodeCatalyst y gateway
<a name="packages-tutorial-package-repo"></a>

En este paso, creará un repositorio de paquetes en su CodeCatalyst proyecto y lo conectará a un repositorio de puerta de enlace, también en su CodeCatalyst proyecto. Luego, importará la dependencia del tutorial (`lodash`) desde npmjs.com a ambos repositorios.

El repositorio de puerta de enlace es el «pegamento» que conecta tu repositorio de paquetes con el npmjs.com público. CodeCatalyst 

Para obtener más información sobre los repositorios de paquetes, consulte [Publica y comparte paquetes de software en CodeCatalyst](packages.md).

**nota**  
En este tutorial, se utilizan los términos repositorio de *CodeCatalyst paquetes y repositorio* de *puerta* de enlace para hacer referencia a los dos repositorios en los que se crean CodeCatalyst en el siguiente procedimiento.

**Para crear repositorios de CodeCatalyst paquetes y puertas de enlace**

1. En el panel de navegación, elija **Paquetes**. 

1. Seleccione **Crear repositorio de paquetes**.

1. En **Nombre del repositorio**, escriba:

   ```
   codecatalyst-package-repository
   ```

1. Elija **\$1 Seleccionar repositorios ascendentes**.

1. Seleccione **Repositorios de puerta de enlace**.

1. En el **npm-public-registry-gateway**cuadro, selecciona **Crear**.

1. Elija **Seleccionar**.

1. 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: creación de la aplicación “Hola, mundo”
<a name="packages-tutorial-create-app"></a>

En este paso, crea una aplicación Node.js de «Hello World» e importa su dependencia (`lodash`) a su pasarela y a los repositorios de paquetes. CodeCatalyst 

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 asume que utilizarás un entorno de CodeCatalyst desarrollo como máquina de desarrollo. Aunque no es necesario utilizar un entorno CodeCatalyst de desarrollo, es recomendable porque proporciona un entorno de trabajo limpio, tiene Node.js `npm` preinstalado y es fácil de eliminar cuando haya terminado el tutorial. Para obtener más información sobre los CodeCatalyst entornos de desarrollo, consulte[Creación de un entorno de desarrollo](devenvironment-create.md).

Siga las instrucciones siguientes para iniciar un entorno CodeCatalyst de desarrollo y utilizarlo para crear la aplicación «Hello World».

**Para lanzar un entorno de desarrollo CodeCatalyst**

1. En el panel de navegación, elija **Código** y, a continuación, **Entornos de desarrollo**. 

1. Cerca de la parte superior, elija **Crear entorno de desarrollo** y, a continuación, elija **AWS Cloud9 (en el navegador)**.

1. Asegúrese de que **Repositorio** se haya configurado como `hello-world-app` y que **Ramificación existente** se haya configurado como `main`. 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.

1. Deje abiertas las dos pestañas CodeCatalyst del navegador y continúe con el siguiente procedimiento.

**Creación de la aplicación Node.js “Hola, mundo”**

1. Vaya a su entorno de desarrollo.

1. 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
   ```

1. Inicialice un proyecto de Node.js:

   ```
   npm init -y
   ```

   La inicialización crea un archivo `package.json` en el directorio raíz de `hello-world-app`.

1. Conecte el cliente npm de su entorno de desarrollo a su repositorio de CodeCatalyst paquetes:

   1. Cambie a la CodeCatalyst consola.

   1. En el panel de navegación, elija **Paquetes**.

   1. Elija `codecatalyst-package-repository`.

   1. Seleccione **Establecer conexión con el repositorio**.

   1. Seleccione **Crear token**. Se creará un token de acceso personal (PAT) para usted.

   1. Seleccione **Copiar** para copiar los comandos.

   1. Cambie a su entorno de desarrollo.

   1. Asegúrese de estar en el directorio `hello-world-app`.

   1. 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
      ```

1. 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 CodeCatalyst paquetes. 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 la puerta de enlace, al repositorio de CodeCatalyst paquetes y al entorno de desarrollo.
**nota**  
Si no hubieras conectado el cliente npm a tu repositorio de CodeCatalyst paquetes en el paso 4, npm lo 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 dependencia `lodash` y crea un directorio `node_modules` que contiene `lodash` y todas sus dependencias.

1. 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
   ```

1. (Opcional) Abre `hello-world-app/package.json` y verifica que se hayan agregado las líneas: ***red bold***

   ```
   {
     "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"
     }
   }
   ```

1. En `/hello-world-app`, cree un archivo llamado `index.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);
   ```

**Para comprobar que 'lodash' se importó a su puerta de enlace y a los repositorios de CodeCatalyst paquetes**

1. Cambie a la consola. CodeCatalyst 

1. En el panel de navegación, elija **Paquetes**.

1. Elija **npm-public-registry-gateway**.

1. Asegúrese de que aparezca `lodash`. La columna **Última versión** indica `4.17.20`.

1. 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**

1. Cambie a su entorno de desarrollo.

1. 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 paquete `lodash` que ha descargado en el entorno de desarrollo en un paso anterior.

**Método para ignorar el directorio “node\$1modules” y confirmar “Hola, mundo”**

1. 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.

1. 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: creación de un flujo de trabajo que ejecute “Hola, mundo”
<a name="packages-tutorial-create-workflow"></a>

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 CodeCatalyst paquetes al que se debe conectar la acción cuando se ejecuta. `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 archivo `package.json` es `lodash`; npm busca `lodash` en las siguientes ubicaciones:
  + En la imagen de Docker que ejecuta la acción. No lo encuentra aquí.
  + En el repositorio de CodeCatalyst paquetes. 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](build-workflow-actions.md).

Usa las siguientes instrucciones para crear un flujo de trabajo que extraiga la `lodash` dependencia del repositorio de CodeCatalyst paquetes y, a continuación, ejecute la aplicación «Hello World».

**Para crear un flujo de trabajo**

1. Cambie a la consola. CodeCatalyst 

1. En el panel de navegación, elija **CI/CD** y, a continuación, elija **Flujos de trabajo**.

1. Seleccione **Crear flujo de trabajo**.

1. En **Repositorio de código fuente**, elija `hello-world-app`.

1. 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.

1. Seleccione **Crear**.

1. Seleccione **YAML** cerca de la parte superior.

1. Elimine el código de ejemplo de YAML.

1. 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, *codecatalyst-package-repository* sustitúyalo por el nombre del repositorio de CodeCatalyst paquetes en el que lo creaste[Paso 2: Cree los repositorios de paquetes CodeCatalyst y gateway](#packages-tutorial-package-repo).

   Para obtener información sobre las propiedades de este archivo, consulte el [Acciones de compilación y prueba de YAML](build-action-ref.md).

1. (Opcional) Seleccione **Validar** para asegurarse de que el código de YAML del flujo de trabajo sea válido antes de confirmarlo.

1. Elija **Confirmar**.

1. En el cuadro de diálogo **Confirmar flujo de trabajo**, escriba lo siguiente:

   1. En **Nombre del archivo de flujo de trabajo**, deje el valor predeterminado, `codecatalyst-package-workflow`.

   1. En **Mensaje de confirmación**, escriba:

      ```
      add initial workflow file
      ```

   1. En **Repositorio**, elija **hello-world-app**.

   1. En **Nombre de la ramificación**, elija **principal**.

   1. Elija **Confirmar**.

   Ahora ha creado un flujo de trabajo.

**Ejecución del flujo de trabajo**

1. 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.

1. 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`.

   Aparece un diagrama de flujo de trabajo que muestra quién inició la ejecución y la **RunHelloWorldApp**acción.

1. Selecciona la casilla de **RunHelloWorldApp**acción para ver el progreso de la acción. 

1. Cuando termine la ejecución, vaya a [Paso 5: verificación del flujo de trabajo](#packages-tutorial-verify).

## Paso 5: verificación del flujo de trabajo
<a name="packages-tutorial-verify"></a>

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**

1. En el diagrama de flujo de trabajo, selecciona la **RunHelloWorldApp**casilla.

   Aparecerá una lista de mensajes de registro.

1. 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 de `hello-world`) indica que la dependencia `lodash` se ha empleado correctamente.

1. 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: bloqueo de las importaciones desde npmjs.com
<a name="packages-tutorial-block"></a>

 Ahora que la `lodash` versión 4.17.20 está presente en tu gateway y en los repositorios de CodeCatalyst paquetes, puedes 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 de los paquetes](package-origin-controls.md) y [Ataques de sustitución de dependencias](package-origin-controls.md#dependency-substitution-attacks).

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**

1. En el panel de navegación, elija **Paquetes**.

1. Elija **npm-publish-registry-gateway**.

1. Elija `lodash`.

1. Cerca de la parte superior, seleccione **Controles de origen**.

1. En **Ascendente**, seleccione **Bloquear**.

1. Seleccione **Save**.

   Ahora, ha bloqueado las importaciones al repositorio de puerta de enlace (y a los repositorios y ordenadores descendentes) desde npmjs.com.

## Paso 7: prueba de la característica de bloqueo
<a name="packages-tutorial-test-block"></a>

En esta sección, verificará el funcionamiento del bloqueo que configuró en [Paso 6: bloqueo de las importaciones desde npmjs.com](#packages-tutorial-block). Para empezar, configure “Hola, mundo” de tal modo que solicite la versión 4.17.2**1** de `lodash` en lugar de la que está disponible en el repositorio de puerta de enlace, que es la versión 4.17.2**0**. 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**

1. Cambie a su entorno de desarrollo.

1. Extraiga el `codecatalyst-package-workflow.yaml` archivo que creó anteriormente con la CodeCatalyst consola:

   ```
   git pull
   ```

**Configuración de “Hola, mundo” para solicitar la versión 4.17.21 de lodash**

1. Abra `/hello-world-app/package.json`.

1. Cambie la `lodash` versión a la 4.17.21 como se muestra en: ***red bold***

   ```
   {
     "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 del `package.json` archivo (4.17.21) y la versión de los repositorios de CodeCatalyst paquetes y de la puerta de enlace (4.17.20).

1. 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**

1. Ejecute el flujo de trabajo con la discrepancia de versiones:

   1. Cambie CodeCatalyst a la consola.

   1. En el panel de navegación, elija **CI/CD** y, a continuación, elija **Flujos de trabajo**.

   1. 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 de `lodash`; 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 CodeCatalyst paquetes. 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.

1. Compruebe que ha habido un error en el flujo de trabajo:

   1. 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`.

   1. En el diagrama de flujo de trabajo, seleccione la **RunHelloWorldApp**casilla.

   1. 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**

1. En el panel de navegación, elija **Paquetes**.

1. Elija **npm-publish-registry-gateway**.

1. Elija `lodash`.

1. Cerca de la parte superior, seleccione **Controles de origen**.

1. En **Ascendente**, seleccione **Permitir**.

1. Seleccione **Save**.

   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**

1. 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:

   1. Elija **CI/CD** y, a continuación, elija **Flujos de trabajo**.

   1. Junto a `codecatalyst-package-workflow`, seleccione **Acciones** y **Ejecutar**.

   1. 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`.

      Aparece un diagrama de flujo de trabajo que muestra quién inició la ejecución y la **RunHelloWorldApp**acción.

   1. Selecciona la casilla de **RunHelloWorldApp**acción para ver el progreso de la acción. 

   1. 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`.

1. Compruebe que la versión 4.17.21 se haya importado a sus repositorios CodeCatalyst y a los de Gateway:

   1. En el panel de navegación, elija **Paquetes**.

   1. Elija **npm-public-registry-gateway**.

   1. Busque `lodash` y asegúrese de que la versión sea `4.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.

   1. Repita estos pasos para comprobar que la versión 4.17.21 se haya importado en `codecatalyst-package-repository`.

## Limpieza
<a name="packages-tutorial-cleanup"></a>

Limpie los archivos y servicios utilizados en este tutorial para evitar que le cobren por ellos.

**Limpieza de los paquetes del tutorial**

1. Elimine `codecatalyst-package-project`:

   1. En la CodeCatalyst consola, navegue hasta el `codecatalyst-package-project` proyecto si aún no está allí.

   1. En el panel de navegación, seleccione **Configuración del proyecto**.

   1. Elija **Eliminar proyecto**, introduzca **delete** y elija **Eliminar proyecto**.

      CodeCatalyst elimina todos los recursos del proyecto, incluidos los repositorios de código fuente, puerta de enlace y CodeCatalyst paquetes. También se elimina el entorno de desarrollo.

1. Elimine el token (PAT):

   1. Elija el nombre de usuario, a la derecha y seleccione **Mi configuración**.

   1. En **Tokens de acceso personal**, seleccione el token que ha creado en este tutorial y, luego, elija **Eliminar**.

En este tutorial, aprendió a crear un flujo de trabajo que ejecute una aplicación que extraiga sus dependencias de un repositorio de paquetes. CodeCatalyst También aprendiste a bloquear y desbloquear paquetes para que no ingresen a tu puerta de enlace y a los repositorios de CodeCatalyst paquetes.

# Especificar los repositorios de CodeCatalyst paquetes en los flujos de trabajo
<a name="workflows-package-specify-action"></a>

En CodeCatalyst, puedes añadir un repositorio de CodeCatalyst paquetes a tus acciones de compilación y prueba en tu flujo de trabajo. El repositorio de paquetes debe estar configurado con un formato de paquete, como npm. También puede elegir incluir una secuencia de ámbitos para el repositorio de paquetes seleccionado.

Utilice las siguientes instrucciones para especificar una configuración de paquete para utilizarla con una acción de flujo de trabajo.

------
#### [ Visual ]

**Especificación de la configuración de paquete que utilizará una acción (editor visual)**

1. Abre la CodeCatalyst consola en [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Elija el proyecto.

1. En el panel de navegación, elija **CI/CD** y, a continuación, elija **Flujos de trabajo**.

1. Elija el nombre del flujo de trabajo. Puede filtrar por el nombre del repositorio de código fuente o la ramificación donde esté definido el flujo de trabajo, o bien por el nombre o el estado del flujo de trabajo.

1. Elija **Edit (Edición de)**.

1. Elija **Visual**.

1. En el diagrama de flujo de trabajo, seleccione la acción **Compilación** o **Probar** con la que desee configurar un repositorio de paquetes.

1. Seleccione **Paquetes**.

1. En el menú desplegable **Añadir configuración**, elija la configuración de paquete que desee utilizar con sus acciones del flujo de trabajo.

1. Seleccione **Agregar repositorio de paquetes**.

1. En el menú desplegable **del repositorio de paquetes**, especifique el nombre del *repositorio de CodeCatalyst paquetes* que desea que utilice la acción.

   Para obtener más información sobre los repositorios de paquetes, consulte [Repositorios de paquetes](packages-concepts.md#packages-concepts-repository).

1. (Opcional) En **Ámbitos (opcional)**, especifique la secuencia de *ámbitos* que desee definir en el registro de paquetes.

   Al definir los ámbitos, el repositorio de paquetes especificado se configura como el registro de todos los ámbitos de la lista. Si se solicita un paquete con ese ámbito a través del cliente npm, se utilizará ese repositorio en lugar del predeterminado. El nombre de cada ámbito debe tener el prefijo @.

   Si `Scopes` se omite, el repositorio de paquetes especificado se configura como el registro predeterminado para todos los paquetes utilizados por la acción.

   Para obtener más información sobre los ámbitos, consulte [Espacios de nombres en paquetes](packages-concepts.md#packages-concepts-package-namespaces) y [Scoped packages](https://docs.npmjs.com/cli/v10/using-npm/scope).

1. Seleccione **Agregar**.

1. (Opcional) Seleccione **Validar** para validar el código de YAML del flujo de trabajo antes de confirmarlo.

1. Seleccione **Confirmar**, introduzca un mensaje de confirmación y vuelva a seleccionar **Confirmar**.

------
#### [ YAML ]

**Especificación de la configuración de paquete que utilizará una acción (editor de YAML)**

1. Abre la CodeCatalyst consola en [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Elija el proyecto.

1. En el panel de navegación, elija **CI/CD** y, a continuación, elija **Flujos de trabajo**.

1. Elija el nombre del flujo de trabajo. Puede filtrar por el nombre del repositorio de código fuente o la ramificación donde esté definido el flujo de trabajo, o bien por el nombre o el estado del flujo de trabajo.

1. Elija **Edit (Edición de)**.

1. Elija **YAML**.

1. En una acción de **Compilación** o **Probar**, agregue un código similar al siguiente:

   ```
   action-name:
    Configuration:
       Packages:
           NpmConfiguration:
             PackageRegistries:
               - PackagesRepository: package-repository
                 Scopes:
                   - "@scope"
   ```

   Para obtener más información, consulte la descripción de la propiedad `Packages` en la [Acciones de compilación y prueba de YAML](build-action-ref.md) para la acción.

1. (Opcional) Seleccione **Validar** para validar el código de YAML del flujo de trabajo antes de confirmarlo.

1. Seleccione **Confirmar**, introduzca un mensaje de confirmación y vuelva a seleccionar **Confirmar**.

------

# Uso de tokens de autorización en acciones del flujo de trabajo
<a name="workflows-package-export-token"></a>

Puede usar un token proporcionado por la acción del flujo de trabajo para configurar manualmente un administrador de paquetes para autenticarse en los repositorios de CodeCatalyst paquetes. CodeCatalyst hace que este token esté disponible como una variable de entorno para que pueda consultarlo en sus acciones.


| Variable de entorno | Valor | 
| --- | --- | 
|  CATALYST\$1MACHINE\$1RESOURCE\$1NAME  |  La identidad de usuario de un token de autorización.  | 
|  CATALYST\$1PACKAGES\$1AUTHORIZATION\$1TOKEN  |  El valor de un token de autorización.  | 

**nota**  
Tenga en cuenta que estas variables de entorno solo se rellenarán si ha configurado su acción para exportar el token de autorización.

Siga estas instrucciones para usar un token de autorización con una acción de flujo de trabajo.

------
#### [ Visual ]

**Uso de un token de autorización exportado con una acción (editor visual)**

1. Abre la CodeCatalyst consola en [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Elija el proyecto.

1. En el panel de navegación, elija **CI/CD** y, a continuación, elija **Flujos de trabajo**.

1. Elija el nombre del flujo de trabajo. Puede filtrar por el nombre del repositorio de código fuente o la ramificación donde esté definido el flujo de trabajo, o bien por el nombre o el estado del flujo de trabajo.

1. Elija **Edit (Edición de)**.

1. Elija **Visual**.

1. En el diagrama de flujo de trabajo, seleccione la acción **Compilación** o **Probar** con la que desee configurar un repositorio de paquetes.

1. Seleccione **Paquetes**.

1. Active el **Token de autorización de exportación**.

------
#### [ YAML ]

**Uso de un token de autorización exportado con una acción (editor de YAML)**

1. Abra la CodeCatalyst consola en [https://codecatalyst.aws/](https://codecatalyst.aws/).

1. Elija el proyecto.

1. En el panel de navegación, elija **CI/CD** y, a continuación, elija **Flujos de trabajo**.

1. Elija el nombre del flujo de trabajo. Puede filtrar por el nombre del repositorio de código fuente o la ramificación donde esté definido el flujo de trabajo, o bien por el nombre o el estado del flujo de trabajo.

1. Elija **Edit (Edición de)**.

1. Elija **YAML**.

1. En una acción de **Compilación** o **Probar**, agregue un código similar al siguiente:

   ```
   Actions:
     action-name:
       Packages:
         ExportAuthorizationToken: true
   ```

   Puede hacer referencia a las variables de entorno `$CATALYST_MACHINE_RESOURCE_NAME` y `$CATALYST_PACKAGES_AUTHORIZATION_TOKEN` en la sección `Steps` de YAML. Para obtener más información, consulta [Ejemplo: configuración manual `pip` para autenticarse con CodeCatalyst](workflows-working-packages-ex.md#workflows-working-packages-pypi-token).

1. (Opcional) Seleccione **Validar** para validar el código de YAML del flujo de trabajo antes de confirmarlo.

1. Seleccione **Confirmar**, introduzca un mensaje de confirmación y vuelva a seleccionar **Confirmar**.

------

# Ejemplos: Repositorios de paquetes en flujos de trabajo
<a name="workflows-working-packages-ex"></a>

En los siguientes ejemplos se muestra cómo hacer referencia a paquetes en el archivo de definición del flujo de trabajo.

**Topics**
+ [Ejemplo: Definición de paquetes con `NpmConfiguration`](#workflows-working-packages-ex-basic)
+ [Ejemplo: Anulación del registro predeterminado](#workflows-working-packages-ex-overriding-registry)
+ [Ejemplo: Anulación de los ámbitos del registro de paquetes](#workflows-working-packages-ex-overriding-scopes)
+ [Ejemplo: configuración manual `pip` para autenticarse con CodeCatalyst](#workflows-working-packages-pypi-token)

## Ejemplo: Definición de paquetes con `NpmConfiguration`
<a name="workflows-working-packages-ex-basic"></a>

En el siguiente ejemplo se muestra cómo definir un paquete con `NpmConfiguration` en un archivo de definición de flujo de trabajo.

```
Actions:
  Build:
  Identifier: aws/build-beta@v1
  Configuration:
    Packages:
        NpmConfiguration:
          PackageRegistries:
            - PackagesRepository: main-repo
            - PackagesRepository: scoped-repo
              Scopes:
                - "@scope1"
```

En este ejemplo, se configura el cliente npm de la siguiente manera:

```
default: main-repo
@scope1: scoped-repo
```

En este ejemplo, hay dos repositorios definidos. El registro predeterminado se establece como `main-repo`, ya que se ha definido sin un ámbito. El ámbito `@scope1` está configurado como `PackageRegistries` para `scoped-repo`.

## Ejemplo: Anulación del registro predeterminado
<a name="workflows-working-packages-ex-overriding-registry"></a>

En el siguiente ejemplo se muestra cómo anular el registro predeterminado.

```
NpmConfiguration:
  PackageRegistries:
    - PackagesRepository: my-repo-1
    - PackagesRepository: my-repo-2
    - PackagesRepository: my-repo-3
```

En este ejemplo, se configura el cliente npm de la siguiente manera:

```
default: my-repo-3
```

Si especifica varios repositorios predeterminados, el último repositorio tendrá prioridad. En este ejemplo, el último repositorio de la lista es `my-repo-3`, lo que significa que npm se conectará a `my-repo-3`. Esto anula los repositorios `my-repo-1` y `my-repo-2`.

## Ejemplo: Anulación de los ámbitos del registro de paquetes
<a name="workflows-working-packages-ex-overriding-scopes"></a>

En el siguiente ejemplo se muestra cómo anular un ámbito en un registro de paquetes.

```
NpmConfiguration:
  PackageRegistries:
    - PackagesRepository: my-default-repo
    - PackagesRepository: my-repo-1
      Scopes:
        - "@scope1"
        - "@scope2"
    - PackagesRepository: my-repo-2
      Scopes:
        - "@scope2"
```

En este ejemplo, se configura el cliente npm de la siguiente manera:

```
default: my-default-repo
@scope1: my-repo-1
@scope2: my-repo-2
```

Si incluye ámbitos solapados, el último repositorio tendrá prioridad. En este ejemplo, la última vez que se configuró el ámbito `@scope2` en `PackageRegistries` es para `my-repo-2`. Esto anula el ámbito `@scope2` configurado para `my-repo-1`.

## Ejemplo: configuración manual `pip` para autenticarse con CodeCatalyst
<a name="workflows-working-packages-pypi-token"></a>

En el siguiente ejemplo, se muestra cómo hacer referencia a las variables de entorno de CodeCatalyst autorización en una acción de compilación.

```
Actions:
  Build:
    Identifier: aws/build@v1.0.0
    Configuration:
      Steps:
        - Run: pip config set global.index-url https://$CATALYST_MACHINE_RESOURCE_NAME:$CATALYST_PACKAGES_AUTHORIZATION_TOKEN@codecatalyst.aws/pypi/my-space/my-project/my-repo/simple/
    Packages:
      ExportAuthorizationToken: true
```