Copiar paquetes entre repositorios - 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.

Copiar paquetes entre repositorios

Puede copiar versiones de paquetes de un repositorio a otro en CodeArtifact. Esto puede resultar útil en situaciones como los flujos de trabajo de promoción de paquetes o el intercambio de versiones de paquetes entre equipos o proyectos. Los repositorios de origen y destino deben estar en el mismo dominio para copiar versiones de paquetes.

IAMPermisos necesarios para copiar paquetes

Para copiar las versiones de los paquetes CodeArtifact, el usuario que realiza la llamada debe tener IAM los permisos necesarios y la política basada en recursos adjunta a los repositorios de origen y destino debe tener los permisos necesarios. Para obtener más información sobre las políticas de permisos y los repositorios basados en recursos, consulte. CodeArtifact Políticas de repositorios

El usuario que realiza la llamada a copy-package-versions debe tener el permiso ReadFromRepository en el repositorio de origen y el permiso CopyPackageVersions en el repositorio de destino.

El repositorio de origen debe tener el ReadFromRepository permiso y el repositorio de destino debe tener el CopyPackageVersions permiso asignado a la IAM cuenta o al usuario que copia los paquetes. Las siguientes políticas son ejemplos de políticas de repositorio que se deben añadir al repositorio de origen o al repositorio de destino con el comando put-repository-permissions-policy. Reemplazar 111122223333 con el identificador de la cuenta que realiza la llamadacopy-package-versions.

nota

La llamada put-repository-permissions-policy sustituirá a la política de repositorio actual, si existe alguna. Puede usar el comando get-repository-permissions-policy para comprobar si existe una política; para obtener más información, consulte Leer una política. Si existe una política, es posible que desee agregarle estos permisos en lugar de reemplazarla.

Ejemplo de política de permisos del repositorio de origen

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:ReadFromRepository" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Resource": "*" } ] }

Ejemplo de política de permisos del repositorio de destino

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "codeartifact:CopyPackageVersions" ], "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Resource": "*" } ] }

Copiar versiones de los paquetes

Use el copy-package-versions comando in CodeArtifact para copiar una o más versiones de paquetes de un repositorio de origen a un repositorio de destino del mismo dominio. El siguiente ejemplo copiará las versiones 6.0.2 y 4.0.0 de un paquete npm denominado my-package del repositorio my_repo al repositorio repo-2.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository my_repo \ --destination-repository repo-2 --package my-package --format npm \ --versions 6.0.2 4.0.0

Puede copiar varias versiones del mismo nombre de paquete en una sola operación. Para copiar versiones de distintos nombres de paquetes, debe llamar a copy-package-versions para cada una.

El comando anterior producirá el siguiente resultado, suponiendo que ambas versiones se hayan copiado correctamente.

{ "successfulVersions": { "6.0.2": { "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" }, "4.0.0": { "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } }, "failedVersions": {} }

Copiar un paquete de los repositorios originales

Normalmente, copy-package-versions solo busca en el repositorio especificado por la opción --source-repository las versiones que desee copiar. Sin embargo, puede copiar versiones tanto del repositorio de origen como de sus repositorios anteriores mediante la opción --include-from-upstream. Si usa el CodeArtifact SDK, llame al CopyPackageVersions API con el includeFromUpstream parámetro establecido en true. Para obtener más información, consulte Trabajar con repositorios ascendentes en CodeArtifact.

Copiar un paquete npm con alcance

Para copiar una versión del paquete npm en un alcance, utilice la opción --namespace para especificar el alcance. Por ejemplo, para copiar el paquete @types/react, utilice --namespace types. Se debe omitir el símbolo @ cuando se utilice --namespace.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \ --destination-repository repo-2 --format npm --namespace types \ --package react --versions 0.12.2

Copiar las versiones de los paquetes de Maven

Para copiar versiones de paquetes de Maven entre repositorios, especifique el paquete que desea copiar pasando el ID de grupo de Maven con la opción --namespace y el Maven ArtifactID con la opción --name. Por ejemplo, para copiar una sola versión de: com.google.guava:guava

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format maven --namespace com.google.guava \ --package guava --versions 27.1-jre

Si se copia correctamente la versión del paquete, el resultado será similar al que se incluye a continuación.

{ "successfulVersions": { "27.1-jre": { "revision": "REVISION-1-SAMPLE-6C81EFF7DA55CC", "status": "Published" } }, "failedVersions": {} }

Versiones que no existen en el repositorio de origen

Si especifica una versión que no existe en el repositorio de origen, se producirá un error en la copia. Si existen algunas versiones en el repositorio de origen y otras no, no se copiarán todas las versiones. En el siguiente ejemplo, la versión 0.2.0 del paquete npm array-unique está presente en el repositorio de origen, pero la versión 5.6.7 no:

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format npm \ --package array-unique --versions 0.2.0 5.6.7

El resultado en esta situación será similar al siguiente.

{ "successfulVersions": {}, "failedVersions": { "0.2.0": { "errorCode": "SKIPPED", "errorMessage": "Version 0.2.0 was skipped" }, "5.6.7": { "errorCode": "NOT_FOUND", "errorMessage": "Could not find version 5.6.7" } } }

El código de error SKIPPED se usa para indicar que la versión no se copió en el repositorio de destino porque no se pudo copiar otra versión.

Versiones que ya existen en el repositorio de destino

Cuando la versión de un paquete se copia en un repositorio donde ya existe, CodeArtifact compara los activos del paquete y los metadatos a nivel de versión del paquete en los dos repositorios.

Si los activos y los metadatos de la versión del paquete son idénticos en los repositorios de origen y destino, no se realiza una copia, pero la operación se considera correcta. Esto significa que copy-package-versions es idempotente. Cuando esto ocurre, la versión que ya estaba presente en los repositorios de origen y destino no aparecerá en la salida de copy-package-versions.

En el siguiente ejemplo, hay dos versiones del paquete npm array-unique en el repositorio de origen repo-1. La versión 0.2.1 también está presente en el repositorio de destino dest-repo y la versión 0.2.0 no.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \ --versions 0.2.1 0.2.0

El resultado en esta situación será similar al siguiente.

{ "successfulVersions": { "0.2.0": { "revision": "Yad+B1QcBq2kdEVrx1E1vSfHJVh8Pr61hBUkoWPGWX0=", "status": "Published" } }, "failedVersions": {} }

La versión 0.2.0 aparece en la lista successfulVersions porque se copió correctamente del repositorio de origen al de destino. La versión 0.2.1 no se muestra en la salida porque ya estaba presente en el repositorio de destino.

Si los activos o los metadatos de la versión del paquete difieren en los repositorios de origen y destino, la operación de copia fallará. Puede usar el parámetro --allow-overwrite para forzar una sobrescritura.

Si existen algunas versiones en el repositorio de destino y otras no, no se copiarán todas las versiones. En el siguiente ejemplo, la versión 0.3.2 del paquete npm array-unique está presente en los repositorios de origen y de destino, pero el contenido de la versión del paquete es diferente. La versión 0.2.1 está presente en el repositorio de origen pero no en el de destino.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 \ --source-repository my_repo --destination-repository repo-2 --format npm --package array-unique \ --versions 0.3.2 0.2.1

El resultado en esta situación será similar al siguiente.

{ "successfulVersions": {}, "failedVersions": { "0.2.1": { "errorCode": "SKIPPED", "errorMessage": "Version 0.2.1 was skipped" }, "0.3.2": { "errorCode": "ALREADY_EXISTS", "errorMessage": "Version 0.3.2 already exists" } } }

La versión 0.2.1 está marcada como SKIPPED porque no se copió en el repositorio de destino. No se copió porque la copia de la versión 0.3.2 falló porque ya estaba presente en el repositorio de destino, pero no era idéntica en los repositorios de origen y destino.

Especificación de una versión de paquete

La revisión de la versión de un paquete es una cadena que especifica un conjunto específico de activos y metadatos para una versión de paquete. Puede especificar una revisión de la versión del paquete para copiar las versiones del paquete que se encuentran en un estado específico. Para especificar una revisión de la versión del paquete, utilice el parámetro --version-revisions para pasar una o más versiones del paquete separadas por comas y los pares de revisión de la versión del paquete al comando copy-package-versions.

nota

Debe especificar el parámetro --versions o --version-revisions con copy-package-versions. No puede especificar ambos.

El siguiente ejemplo solo copiará la versión 0.3.2 del paquete my-package si está presente en el repositorio de origen con la versión revisada del paquete REVISION-1-SAMPLE-6C81EFF7DA55CC.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \ --destination-repository repo-2 --format npm --namespace my-namespace \ --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC

En el siguiente ejemplo, se copian dos versiones del paquete my-package, la 0.3.2 y la 0.3.13. La copia solo se realizará correctamente si en el repositorio de origen la versión 0.3.2 de my-package tiene una revisión REVISION-1-SAMPLE-6C81EFF7DA55CC y la versión 0.3.13 tiene una revisión REVISION-2-SAMPLE-55C752BEE772FC.

aws codeartifact copy-package-versions --domain my_domain --domain-owner 111122223333 --source-repository repo-1 \ --destination-repository repo-2 --format npm --namespace my-namespace \ --package my-package --version-revisions 0.3.2=REVISION-1-SAMPLE-6C81EFF7DA55CC,0.3.13=REVISION-2-SAMPLE-55C752BEE772FC

Para buscar las revisiones de una versión de paquete, utilice el comando describe-package-version o list-package-versions.

Para obtener más información, consulte Revisión de la versión del paquete y CopyPackageVersionen la CodeArtifact APIReferencia.

Copiar paquetes npm

Para obtener más información sobre copy-package-versions el comportamiento de los paquetes npm, consulte las etiquetas npm y. CopyPackageVersions API