Fontes upstream

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

As fontes upstream permitem que você use um único feed para armazenar pacotes de diferentes fontes: os publicados e os que você consome de feeds e registros públicos, como NuGet.org, npmjs.com, Maven Central e PyPI. Depois de habilitar uma fonte upstream, qualquer usuário conectado ao feed poderá instalar um pacote de upstream e uma cópia será salva no feed.

Observação

Só há suporte para fontes upstream personalizadas para pacotes npm.

Vantagens

As fontes upstream permitem que você gerencie todas as dependências do produto em um único feed. Publicar todos os pacotes em um único feed tem alguns benefícios:

  • Simplicidade: seu arquivo de configuração, como NuGet.config, .npmrc ou settings.xml conterá apenas um feed para que ele seja menos propenso a erros e bugs.
  • Determinismo: o feed resolve solicitações de pacote em ordem, portanto, a recompilação do código será mais consistente.
  • Procedência: seu feed conhece a procedência dos pacotes salvos de fontes upstream, portanto, você pode verificar se está usando o pacote original e não uma cópia ou pacote mal-intencionado.
  • Paz de espírito: uma cópia será salva no feed para qualquer pacote instalado de fontes upstream. Portanto, se a fonte upstream estiver desabilitada, removida ou em manutenção, você ainda poderá continuar a desenvolver e compilar porque tem uma cópia desse pacote no feed.

Práticas recomendadas – empacotar consumidores

Para aproveitar ao máximo os benefícios das fontes upstream como consumidor de pacote, siga estas práticas recomendadas:

Usar um único feed no arquivo de configuração

Para que o feed forneça restauração determinística, é importante garantir que o arquivo de configuração, como nuget.config ou .npmrc, referencie apenas um feed com as fontes upstream habilitadas.

Exemplo:

  • nuget.config

    <packageSources>
      <clear />
      <add key="FabrikamFiber" value="https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/nuget/v3/index.json" />
    </packageSources>
    

    Observação

    NuGet compõe vários arquivos de configuração para determinar o conjunto completo de opções a serem usadas. O uso <clear /> nos permite ignorar todas as outras fontes de pacote definidas em arquivos de configuração de nível superior.

  • .npmrc:

    registry=https://pkgs.dev.azure.com/fabrikam/_packaging/FabrikamFiber/npm/registry/
    always-auth=true
    

Ordenar suas fontes upstream intencionalmente

Se você estiver usando apenas registros públicos, como nuget.org ou npmjs.com, a ordem das fontes upstream será irrelevante. As solicitações para o feed seguirão a ordem de pesquisa.

Se você estiver usando várias fontes, como uma mistura de feeds e registros públicos, cada upstream será pesquisado na ordem em que está listado nas configurações do feed. Nesse caso, recomendamos colocar os registros públicos em primeiro lugar na lista de fontes upstream.

Em casos raros, algumas organizações optam por modificar pacotes de OSS para corrigir problemas de segurança, adicionar funcionalidade ou atender aos requisitos que o pacote é criado do zero internamente, em vez de ser consumido diretamente do repositório público. Se sua organização seguir esse padrão, coloque a fonte upstream que contém esses pacotes de OSS modificados antes dos gerentes de pacotes públicos para garantir que você use as versões modificadas da sua organização.

Usar a exibição padrão sugerida

Ao adicionar um feed remoto como uma fonte upstream, você deve selecionar o modo de exibição do feed. Isso permite que as fontes upstream construam um conjunto de pacotes disponíveis. Consulte grafos de pacote completos para obter mais detalhes.

Práticas recomendadas: alimentar proprietários/editores de pacotes

Observação

Não há suporte para fontes upstream em feeds públicos.

Para garantir que o feed seja facilmente configurado como uma fonte upstream, considere aplicar as seguintes práticas recomendadas:

Usar o modo de exibição padrão

O @local modo de exibição é o modo de exibição padrão para todos os feeds recém-criados. Ele contém todos os pacotes publicados no feed ou salvos de fontes upstream.

Se você quiser usar modos de exibição para lançar novas versões de pacote, poderá promover seu pacote para um modo de exibição como @release e disponibilizá-lo para seus consumidores.

Construir um grafo de pacote

Quando um feed consulta sua fonte upstream para um pacote, Azure Artifacts retornar os pacotes no modo de exibição que foi configurado para essa fonte upstream específica. Para construir um grafo de pacote, basta conectar-se ao modo de exibição padrão do feed e instalar o pacote que você deseja compartilhar. Quando o pacote for instalado corretamente no modo de exibição padrão, os usuários que desejarem consumi-lo poderão resolver o grafo do pacote e instalar o pacote desejado.

Ordem de pesquisa

Para gerentes de pacotes públicos que dão suporte a vários feeds (NuGet e Maven), a ordem na qual os feeds são consultados às vezes não é clara ou não determinística. Por exemplo, em NuGet, consultas paralelas são feitas em todos os feeds no arquivo de configuração e as respostas são processadas primeiro em FIFO inicial.

As fontes upstream impedem esse comportamento não determinístico pesquisando o feed e suas fontes upstream usando a seguinte ordem:

  1. Pacotes enviados por push para o feed.

  2. Pacotes salvos de uma fonte upstream.

  3. Pacotes disponíveis de fontes upstream: cada upstream é pesquisado na ordem em que está listado na configuração do feed

Para aproveitar ao máximo o recurso de pesquisa rápida, recomendamos que você inclua apenas um feed no arquivo de configuração.

Observação

Não há suporte para a pesquisa de pacotes em upstreams com NuGet Gerenciador de Pacotes.

Salvar pacotes de fontes upstream

Quando você habilita fontes upstream para o feed, os pacotes instalados de fontes upstream serão salvos automaticamente no feed. Esses pacotes podem ser instalados diretamente do upstream da seguinte maneira ou podem ser instalados npm install express como parte de uma resolução de dependência (a instalação express também salvaria dependências como accepts).

Salvar pacotes pode melhorar o desempenho do download e salvar a largura de banda de rede, especialmente para servidores TFS em redes internas.

Substituir pacotes de fontes upstream

Ao habilitar fontes upstream, você deve estar ciente de que a publicação de uma versão do pacote que já existe no upstream não será possível. Por exemplo, quando você habilita o upstream NuGet.org, não é possível publicar o Newtonsoft.Json 10.0.3 pacote porque essa mesma versão do pacote já está presente NuGet.org.

Se você precisar publicar uma versão do pacote que já existe em uma de suas fontes upstream, desabilite essa fonte upstream, publique seu pacote e habilite novamente a fonte upstream.

Observação

As versões do pacote são imutáveis. Os pacotes salvos permanecem no feed mesmo se a origem upstream estiver desabilitada ou removida.

Status de integridade

Se um feed tiver uma fonte upstream com falha, os metadados não poderão mais ser atualizados para pacotes do mesmo protocolo. Para exibir o status de integridade da fonte upstream, selecione o ícone gear icon de engrenagem para acessar as configurações do Feed e selecione fontes upstream.

Se houver falhas, uma mensagem de aviso será exibida. A página de configurações também indicará qual das fontes upstream está falhando. Selecionar o upstream com falha fornecerá mais detalhes, como o motivo da falha e instruções sobre como resolvê-lo.

Screenshot showing the upstream source's health status

Observação

Para registros públicos como NuGet.org, há um atraso de 3 a 6 horas entre quando um pacote é enviado por push para o registro público e quando ele está disponível para download. Esse atraso depende do tempo do trabalho e da propagação de dados. Não há latência quando a origem upstream é um feed Azure Artifacts.

Fontes upstream offline

Fontes upstream são uma ótima maneira de proteger seus consumidores e infraestrutura contra interrupções não planejadas. Quando você instala um pacote de uma fonte upstream, uma cópia desse pacote é salva no feed. Se a fonte upstream estiver inativa, passando por manutenção ou não disponível, você ainda poderá acessar os pacotes necessários no feed.

Perguntas frequentes

P: Eu não consigo encontrar meu pacote mesmo que eu possa vê-lo em um dos upstreams do meu feed?

R: Os pacotes pertencentes a um upstream estão disponíveis downstream logo após a publicação. No entanto, o pacote só aparecerá na interface do usuário do feed depois que eles forem ingeridos, o que requer a instalação da versão do pacote pela primeira vez no feed downstream.

P: O que são exibições de feed?

R: Os modos de exibição permitem que os desenvolvedores compartilhem apenas um subconjunto de versões de pacote que foram testadas e validadas e excluindo todos os pacotes que ainda estão em desenvolvimento e/ou não atenderam à barra de qualidade. Veja o que são modos de exibição de feed para obter mais detalhes.

P: Não consigo encontrar o feed que quero configurar como uma fonte upstream?

R: Verifique se o proprietário do feed está compartilhando uma exibição como uma fonte upstream.

P: Um usuário com função Leitor pode baixar pacotes de uma fonte upstream?

R: Não. Um usuário com função Leitor em um feed de Azure Artifacts só pode baixar pacotes que foram salvos no feed. Os pacotes são salvos no feed quando um Colaborador, um Colaborador ou um Proprietário instala esses pacotes de upstream.

P: O que acontece quando um usuário exclui ou cancela a publicação de um pacote salvo de uma fonte upstream?

R: O pacote não estará disponível para download no feed e o número da versão será reservado permanentemente. O pacote também não será mais salvo na origem upstream. Versões anteriores e posteriores do pacote não serão afetadas.

P: O que acontece quando um usuário preteri um pacote salvo de uma fonte upstream?

R: Uma mensagem de aviso é adicionada aos metadados do pacote e exibida sempre que o pacote é exibido ou instalado no feed.