Copiar pacotes entre repositórios - CodeArtifact

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Copiar pacotes entre repositórios

Você pode copiar versões de pacotes de um repositório para outro no CodeArtifact. Isso pode ser útil para cenários como fluxos de trabalho de promoção de pacotes ou compartilhamento de versões de pacotes entre equipes ou projetos. Os repositórios de origem e de destino devem ter o mesmo domínio para copiar versões de pacotes.

Permissões obrigatórias do IAM para copiar pacotes

Para copiar as versões do pacote CodeArtifact, o usuário chamador deve ter as permissões necessárias do IAM e a política baseada em recursos anexada aos repositórios de origem e destino deve ter as permissões necessárias. Para obter mais informações sobre políticas e CodeArtifact repositórios de permissões com base em recursos, consulte. Políticas de repositório

O usuário que está chamando copy-package-versions deve ter a permissão ReadFromRepository no repositório de origem e a permissão CopyPackageVersions no repositório de destino.

O repositório de origem deve ter a permissão ReadFromRepository e o repositório de destino deve ter a permissão CopyPackageVersions atribuída à conta do IAM ou ao usuário que copia pacotes. As políticas a seguir são exemplos de políticas de repositório a serem adicionadas ao repositório de origem ou ao repositório de destino com o comando put-repository-permissions-policy. Substitua 111122223333 pelo ID da conta que está chamando copy-package-versions.

nota

Chamar put-repository-permissions-policy substituirá a política atual do repositório, se houver. Você pode usar o comando get-repository-permissions-policy para ver se existe uma política. Para obter mais informações, consulte Ler uma política. Se existir uma política, talvez você queira adicionar essas permissões a ela em vez de substituí-la.

Exemplo de política de permissões do repositório de origem

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

Exemplo de política de permissões do repositório de destino

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

Copiar versões do pacote

Use o copy-package-versions comando in CodeArtifact para copiar uma ou mais versões do pacote de um repositório de origem para um repositório de destino no mesmo domínio. O exemplo a seguir copiará as versões 6.0.2 e 4.0.0 de um pacote npm chamado my-package do repositório my_repo para o repositório 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

Copie várias versões do mesmo nome de pacote em uma única operação. Para copiar versões de nomes de pacotes diferentes, você deve chamar copy-package-versions para cada um deles.

O comando anterior produzirá a seguinte saída, supondo que ambas as versões possam ser copiadas com sucesso.

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

Copiar um pacote dos repositórios upstream

Normalmente, copy-package-versions só procura no repositório especificado pela opção --source-repository as versões a serem copiadas. No entanto, você pode copiar versões do repositório de origem e dos repositórios upstream usando a opção --include-from-upstream. Se você usa o CodeArtifact SDK, chame a CopyPackageVersions API com o includeFromUpstream parâmetro definido como true. Para ter mais informações, consulte Trabalhando com repositórios upstream em CodeArtifact.

Copiar um pacote npm com escopo definido

Para copiar uma versão do pacote npm em um escopo, use a opção --namespace para especificar o escopo. Por exemplo, para copiar o pacote @types/react, use --namespace types. O símbolo @ deve ser omitido ao usar --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 versões do pacote Maven

Para copiar versões do pacote Maven entre repositórios, especifique o pacote a ser copiado passando o ID do grupo Maven com a opção --namespace e o artifactID Maven com a opção --name. Por exemplo, para copiar uma única versão 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

Se a versão do pacote for copiada com sucesso, o resultado será semelhante ao seguinte.

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

Versões que não existem no repositório de origem

Se você especificar uma versão que não existe no repositório de origem, a cópia falhará. Se existirem algumas versões no repositório de origem e outras não existirem, nenhuma versão será copiada. No exemplo a seguir, a versão 0.2.0 do pacote npm do array-unique está presente no repositório de origem, mas a versão 5.6.7 não está:

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

A saída neste cenário será semelhante ao seguinte:

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

O código de erro SKIPPED é usado para indicar que a versão não foi copiada para o repositório de destino porque outra versão não pôde ser copiada.

Versões que já existem no repositório de destino

Quando uma versão do pacote é copiada para um repositório onde ela já existe, CodeArtifact compara os ativos do pacote e os metadados do nível da versão do pacote nos dois repositórios.

Se os ativos e metadados da versão do pacote forem idênticos nos repositórios de origem e de destino, uma cópia não será executada, mas a operação será considerada bem-sucedida. Isso significa que copy-package-versions é idempotente. Quando isso ocorrer, a versão que já estava presente nos repositórios de origem e de destino não será listada na saída docopy-package-versions.

No exemplo a seguir, duas versões do pacote npm array-unique estão presentes no repositório de origem repo-1. A versão 0.2.1 também está presente no repositório de destino dest-repo e a versão 0.2.0 não está.

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

A saída neste cenário será semelhante ao seguinte:

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

A versão 0.2.0 está listada no successfulVersions porque foi copiada com sucesso do repositório de origem para o de destino. A versão 0.2.1 não é mostrada na saída, pois já estava presente no repositório de destino.

Se os ativos ou metadados da versão do pacote forem diferentes nos repositórios de origem e de destino, a operação de cópia falhará. Você pode usar o parâmetro --allow-overwrite para forçar uma substituição.

Se existirem algumas versões no repositório de destino e outras não existirem, nenhuma versão será copiada. No exemplo a seguir, a versão 0.3.2 do pacote npm array-unique está presente nos repositórios de origem e de destino, mas o conteúdo da versão do pacote é diferente. A versão 0.2.1 está presente no repositório de origem, mas não no 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

A saída neste cenário será semelhante ao seguinte:

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

A versão 0.2.1 está marcada como SKIPPED porque não foi copiada para o repositório de destino. Ela não foi copiada porque a cópia da versão 0.3.2 falhou porque ela já estava presente no repositório de destino, mas não era idêntica nos repositórios de origem e de destino.

Especificar uma revisão da versão do pacote

A revisão da versão do pacote é uma string que especifica um determinado conjunto de ativos e metadados da versão de um pacote. Você pode especificar uma revisão da versão do pacote para copiar as versões do pacote que estão em um estado definido. Para especificar uma revisão da versão do pacote, use o parâmetro --version-revisions para passar uma ou mais versões do pacote separadas por vírgula e os pares de revisão da versão do pacote para o comando copy-package-versions.

nota

É necessário especificar o parâmetro --versions ou --version-revisions com copy-package-versions. Não é possível especificar ambos.

O exemplo a seguir só copiará a versão 0.3.2 do pacote my-package se ela estiver presente no repositório de origem com a revisão da versão do pacote 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

O exemplo a seguir copia duas versões do pacote my-package, 0.3.2 e 0.3.13. A cópia só será bem-sucedida se, no repositório de origem, a versão 0.3.2 do my-package tiver revisão REVISION-1-SAMPLE-6C81EFF7DA55CC e a versão 0.3.13 tiver revisão 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 localizar as revisões de uma versão do pacote, use o comando describe-package-version ou list-package-versions.

Para obter mais informações, consulte Revisão da versão do pacote e CopyPackageVersionna Referência CodeArtifact da API.

Copiar pacotes npm

Para obter mais informações sobre o copy-package-versions comportamento com pacotes npm, consulte as tags npm e a CopyPackageVersions API.