Solicitar una versión de paquete con repositorios ascendentes - CodeArtifact

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.

Solicitar una versión de paquete con repositorios ascendentes

Cuando un cliente (por ejemplo, npm) solicita una versión de paquete de un CodeArtifact repositorio denominado my_repo que tiene varios repositorios ascendentes, puede ocurrir lo siguiente:

  • Si my_repo contiene la versión del paquete solicitada, se devuelve al cliente.

  • Si my_repo no contiene la versión del paquete solicitada, la CodeArtifact busca en my_repo los repositorios originales. Si se encuentra la versión del paquete, se copia una referencia a la misma en my_repo y la versión del paquete se devuelve al cliente.

  • Si my_repo ni sus repositorios ascendentes contienen la versión del paquete, se devuelve una respuesta HTTP 404 Not Found al cliente.

Al añadir repositorios ascendentes mediante el comando create-repository o update-repository, el orden en que se pasan al parámetro --upstreams determina su prioridad cuando se solicita una versión de paquete. Especifique los repositorios ascendentes --upstreams en el orden en que desee usarlos cuando se CodeArtifact solicite una versión de paquete. Para obtener más información, consulte Orden de prioridad del repositorio ascendente.

El número máximo de repositorios ascendentes directos permitidos para un repositorio es 10. Como los repositorios ascendentes directos también pueden tener sus propios repositorios ascendentes directos, CodeArtifact pueden buscar versiones de paquetes en más de 10 repositorios. El número máximo de repositorios consultados cuando CodeArtifact se solicita una versión de paquete es 25.

Retención de paquetes de repositorios ascendentes

Si la versión de un paquete solicitada se encuentra en un repositorio ascendente, se conserva una referencia a la misma y siempre está disponible en el repositorio descendente. La versión del paquete retenida no se ve afectada por ninguno de los siguientes factores:

  • Eliminar el repositorio ascendente.

  • Desconectar el repositorio ascendente del repositorio descendente.

  • Eliminar la versión del paquete del repositorio ascendente.

  • Editar la versión del paquete en el repositorio ascendente (por ejemplo, añadiéndole un nuevo activo).

Obtener paquetes a través de una relación ascendente

Si un CodeArtifact repositorio tiene una relación ascendente con un repositorio que tiene una conexión externa, las solicitudes de paquetes que no estén en el repositorio ascendente se copian del repositorio externo. Por ejemplo, considere la siguiente configuración: un repositorio denominado repo-A tiene un repositorio ascendente denominado repo-B. repo-B tiene una conexión externa a https://npmjs.com.

Diagrama sencillo de un repositorio ascendente que muestra tres repositorios encadenados.

Si npm está configurado para usar el repositorio repo-A, la ejecución de npm install desencadena la copia de paquetes de https://npmjs.com a repo-B. También se incluyen las versiones instaladasrepo-A. El siguiente ejemplo instala lodash.

$ npm config get registry https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my-downstream-repo/ $ npm install lodash + lodash@4.17.20 added 1 package from 2 contributors in 6.933s

Después de ejecutarse npm install, repo-A contiene solo la versión más reciente (lodash 4.17.20), ya que es la versión de la que npm obtuvo de repo-A.

aws codeartifact list-package-versions --repository repo-A --domain my_domain \ --domain-owner 111122223333 --format npm --package lodash

Ejemplo de salida:

{ "package": "lodash", "format": "npm", "versions": [ { "version": "4.17.15", "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } ] }

Como repo-B tiene una conexión externa a https://npmjs.com, todas las versiones de los paquetes que se importan desde https://npmjs.com se almacenan en repo-B. Estas versiones de paquetes podrían haber sido recuperadas por cualquier repositorio descendente con una relación ascendente con repo-B.

El contenido de repo-B proporciona una forma de ver todos los paquetes y las versiones de los paquetes importados desde https://npmjs.com a lo largo del tiempo. Por ejemplo, para ver todas las versiones del paquete lodash importadas a lo largo del tiempo, puede utilizar list-package-versions de la siguiente manera.

aws codeartifact list-package-versions --repository repo-B --domain my_domain \ --domain-owner 111122223333 --format npm --package lodash --max-results 5

Ejemplo de salida:

{ "package": "lodash", "format": "npm", "versions": [ { "version": "0.10.0", "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.2.2", "revision": "REVISION-2-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.2.0", "revision": "REVISION-3-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.2.1", "revision": "REVISION-4-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, { "version": "0.1.0", "revision": "REVISION-5-SAMPLE-6C81EFF7DA55CC", "status": "Published" } ], "nextToken": "eyJsaXN0UGFja2FnZVZlcnNpb25zVG9rZW4iOiIwLjIuMiJ9" }

Retención de paquetes en repositorios intermedios

CodeArtifact permite encadenar los repositorios ascendentes. Por ejemplo, repo-A puede tener repo-B como un flujo ascendente y repo-B puede tener repo-C como un flujo ascendente. Esta configuración hace que las versiones del paquete en repo-B y repo-C estén disponibles de repo-A.

Diagrama sencillo de un repositorio ascendente que muestra tres repositorios encadenados.

Cuando un administrador de paquetes se conecta al repositorio repo-A y obtiene una versión del paquete del repositorio repo-C, la versión del paquete no se conservará en el repositorio repo-B. La versión del paquete solo se conservará en el repositorio más descendente, en este ejemplo, repo-A. No se conservará en ningún repositorio intermedio. Esto también es válido para cadenas más largas; por ejemplo, si hubiera cuatro repositorios repo-A, repo-B, repo-C y repo-D y un administrador de paquetes conectado a repo-A extrajo una versión de paquete de repo-D, la versión del paquete se conservaría en repo-A, pero no en repo-B ni repo-C.

El comportamiento de retención de paquetes es similar cuando se extrae una versión de paquete de un repositorio externo, excepto que la versión del paquete siempre se conserva en el repositorio que tiene la conexión externa adjunta. Por ejemplo, repo-A tiene repo-B como flujo ascendente. repo-B tiene repo-C como conexión ascendente y repo-C también tiene npmjs.com configurado como una conexión externa; consulte el siguiente diagrama.

Diagrama de repositorios ascendentes que muestra tres repositorios encadenados entre sí con una conexión externa a npmjs.com.

Si un administrador de paquetes conectado a repo-A solicita una versión de paquete, por ejemplo, lodash 4.17.20, y la versión del paquete no está presente en ninguno de los tres repositorios, se obtendrá de npmjs.com. Cuando se extraiga lodash 4.17.20, se conservará en repo-A, ya que es el repositorio más avanzado y repo-C ya que tiene conectada la conexión externa a npmjs.com. lodash 4.17.20 no se conservará en repo-B porque se trata de un repositorio intermedio.