Solicitar uma versão do pacote com repositórios upstream - 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á.

Solicitar uma versão do pacote com repositórios upstream

Quando um cliente (por exemplo, npm) solicita uma versão de pacote de um CodeArtifact repositório chamado my_repo que tem vários repositórios upstream, o seguinte pode ocorrer:

  • Se my_repo contiver a versão do pacote solicitada, ela será devolvida ao cliente.

  • Se my_repo não contiver a versão do pacote solicitada, CodeArtifact procure-a nos my_repo repositórios upstream. Se a versão do pacote for encontrada, uma referência a ela será copiada para my_repo e a versão do pacote será devolvida ao cliente.

  • Se my_repo nem seus repositórios upstream contiverem a versão do pacote, uma resposta HTTP 404 de Not Found será exibida ao cliente.

Quando você adiciona repositórios upstream usando o comando create-repository ou update-repository, a ordem em que eles são passados para o parâmetro --upstreams determina a prioridade quando uma versão do pacote é solicitada. Especifique os repositórios upstream --upstreams na ordem em que você deseja CodeArtifact usar quando uma versão do pacote for solicitada. Para ter mais informações, consulte Ordem de prioridade do repositório upstream.

A quantidade máxima de repositórios upstream diretos permitidos para um repositório é dez. Como os repositórios upstream diretos também podem ter seus próprios repositórios diretos, é CodeArtifact possível pesquisar versões de pacotes em mais de 10 repositórios. O número máximo de repositórios CodeArtifact examinados quando uma versão do pacote é solicitada é 25.

Retenção de pacotes de repositórios upstream

Se uma versão de pacote solicitada for encontrada em um repositório upstream, uma referência a ela será retida e estará sempre disponível no repositório downstream. A versão retida do pacote não é afetada por nenhum das seguintes ações:

  • Excluir o repositório upstream.

  • Desconectar o repositório upstream do repositório downstream.

  • Excluir a versão do pacote do repositório upstream.

  • Editar a versão do pacote no repositório upstream (por exemplo, adicionar um novo ativo a ele).

Buscar pacotes por meio de uma relação upstream

Se um CodeArtifact repositório tiver um relacionamento upstream com um repositório que tenha uma conexão externa, as solicitações de pacotes que não estão no repositório upstream serão copiadas do repositório externo. Por exemplo, considere a seguinte configuração: um repositório chamado repo-A tem um repositório upstream chamado repo-B. repo-B tem uma conexão externa com https://npmjs.com.

Diagrama de repositório upstream simples mostrando três repositórios encadeados.

Se npm estiver configurado para usar o repositório repo-A, a execução de npm install acionará a cópia dos pacotes de https://npmjs.com para repo-B. As versões instaladas também são incorporadas em repo-A. O exemplo a seguir instala o 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

Depois de executar npm install, repo-A contém apenas a versão mais recente (lodash 4.17.20) porque essa é a versão que foi obtida por npm de repo-A.

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

Resultado do exemplo:

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

Como repo-B tem uma conexão externa com https://npmjs.com, todas as versões do pacote importadas de https://npmjs.com são armazenadas em repo-B. Essas versões do pacote poderiam ter sido obtidas por qualquer repositório downstream com uma relação upstream com repo-B.

O conteúdo de repo-B fornece uma maneira de ver todos os pacotes e versões de pacotes importados de https://npmjs.com ao longo do tempo. Por exemplo, para ver todas as versões do pacote lodash importadas ao longo do tempo, você pode usar list-package-versions, como abaixo.

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

Resultado do exemplo:

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

Retenção de pacotes em repositórios intermediários

CodeArtifact permite encadear repositórios upstream. Por exemplo, repo-A pode ter repo-B como upstream e repo-B pode ter repo-C como upstream. Essa configuração faz com que as versões do pacote sejam inseridas no repo-B e repo-C disponíveis do repo-A.

Diagrama de repositório upstream simples mostrando três repositórios encadeados.

Quando um gerenciador de pacotes se conecta ao repositório repo-A e busca uma versão do pacote no repositório repo-C, a versão do pacote não será retida no repositório repo-B. A versão do pacote só será mantida no repositório mais downstream, neste exemplo repo-A. Ele não será retido em nenhum repositório intermediário. Isso também vale para cadeias mais longas. Por exemplo, se houvesse quatro repositórios: repo-A, repo-B, repo-C e repo-D e um gerenciador de pacotes conectado ao repo-A buscasse uma versão do pacote no repo-D, a versão do pacote seria retida em repo-A, mas não em repo-B ou repo-C.

O comportamento de retenção de pacotes é semelhante ao extrair uma versão de pacote de um repositório externo, exceto que a versão do pacote sempre é retida no repositório que tem a conexão externa anexada. Por exemplo, o repo-A tem o repo-B como um upstream. O repo-B tem o repo-C como upstream e o repo-C também tem o npmjs.com configurado como uma conexão externa; veja o diagrama a seguir.

Diagrama do repositório upstream mostrando três repositórios encadeados com uma conexão externa com npmjs.com.

Se um gerenciador de pacotes conectado ao repo-A solicitar uma versão de pacote, por exemplo, lodash 4.17.20, e a versão do pacote não estiver presente em nenhum dos três repositórios, ela será obtida em npmjs.com. Quando o lodash 4.17.20 for obtido, ele será retido no repo-A, pois é o repositório mais downstream e o repo-C, pois tem a conexão externa com npmjs.com anexada. O lodash 4.17.20 não será retido no repo-B, pois é um repositório intermediário.