Panoramica dei repository virtuali

Questo documento offre una panoramica dei repository virtuali. Per istruzioni su come creare un repository virtuale, consulta Creare repository virtuali.

Artifact Registry Quote e limiti si applicano ai repository virtuali.

Come funzionano i repository virtuali

I repository virtuali fungono da singolo punto di accesso per scaricare, installare o eseguire il deployment degli artefatti nello stesso formato da uno o più repository upstream. Un repository a monte può essere un repository standard o remoto di Artifact Registry.

Le altre modalità del repository sono:

  • Standard: la modalità predefinita per il repository. Puoi caricare o pubblicare artefatti come pacchetti privati direttamente nei repository standard. Sebbene sia possibile scaricare direttamente da singoli repository standard, l'accesso a gruppi di repository con un repository virtuale semplifica la configurazione dello strumento.
  • Remote (solo repository di pacchetti di linguaggio): una cache pull-through per gli artefatti nei repository pubblici come Maven Central o PyPI. Agisce da proxy per i repository pubblici, in modo da avere un maggiore controllo sulle dipendenze esterne.

Casi d'uso e vantaggi

Configurazione client più semplice

Per le attività che richiedono solo l'accesso in lettura ai repository, devi solo configurare un singolo repository Artifact Registry per accedere agli artefatti archiviati in più repository a monte.

Ad esempio:

  • Un repository virtuale per i pacchetti Maven può gestire pacchetti Java privati da un repository standard di Artifact Registry e pacchetti Java pubblici da un repository remoto che memorizza nella cache pacchetti pubblici di Maven Central.
  • Un repository virtuale può gestire pacchetti Python privati da più repository standard upstream di proprietà di team diversi. Ogni team ha accesso in scrittura al proprio repository upstream, ma scarica pacchetti da altri team utilizzando il repository virtuale.
Risoluzione più sicura delle dipendenze

Puoi assegnare una priorità ai repository a monte per avere un maggiore controllo sul repository scelto da Artifact Registry quando un artefatto richiesto si trova in più repository upstream.

Alcuni strumenti, come lo strumento Python pip, non forniscono un modo per controllare l'ordine di ricerca quando nel client è configurato una combinazione di repository privati e pubblici. Questo tipo di configurazione è vulnerabile a un attacco di confusione delle dipendenze in cui qualcuno carica una nuova versione di un pacchetto con codice non valido in un repository pubblico per indurre con l'inganno i client a scegliere la versione non valida.

Puoi utilizzare repository remoti e virtuali insieme per mitigare questo rischio:

  1. Crea un repository remoto come proxy per il repository pubblico.
  2. Creare un repository standard per i pacchetti privati.
  3. Crea un repository virtuale configurato per dare priorità al tuo repository standard se esiste una versione dello stesso pacchetto in entrambi i repository.
  4. Configura gestori di pacchetti e altri strumenti in modo che leggano solo dal repository virtuale in modo che la logica del client non sia coinvolta nella selezione del repository.

Per scoprire di più su altre best practice per la gestione delle dipendenze, consulta Gestione delle dipendenze.

In che modo i repository virtuali selezionano un repository a monte

Ogni repository upstream deve avere una priorità configurata. La priorità è un numero intero che agisce come ponderazione, non come ranking. Ciò significa che i repository con un valore di priorità più elevato hanno la priorità rispetto ai repository con valori di priorità più bassi.

Quando richiedi un artefatto che si trova in più repository upstream, Artifact Registry utilizza la seguente logica di priorità:

  • Il repository con il valore più alto ha la priorità. Ad esempio, il valore 10 viene considerato una priorità maggiore rispetto al valore 1.
  • Se più repository upstream hanno la stessa priorità, l'artefatto può essere fornito da uno qualsiasi di questi repository.

Quando configuri direttamente un client per eseguire ricerche in un repository virtuale e in altri repository, il client potrebbe comunque scaricare artefatti da repository esterni ad Artifact Registry.

Ad esempio, se configuri lo strumento Python pip per eseguire ricerche in PyPI e in un repository virtuale, il pacchetto potrebbe essere scaricato direttamente da PyPI perché pip sceglierà sempre la versione più recente di un pacchetto, indipendentemente dal repository da cui proviene. Se pip è configurato per eseguire ricerche solo nel repository virtuale, puoi controllare la priorità di tutti i repository a monte, incluso un repository remoto a monte che funge da proxy per PyPI.

Formati di repository supportati

Puoi creare repository virtuali per i seguenti formati di repository Artifact Registry di Artifact Registry:

Pacchetti lingua:

Pacchetti del sistema operativo:

Se non hai mai utilizzato Artifact Registry, puoi utilizzare le guide rapide per scoprire come configurare repository standard per questi formati.

Limitazioni

Oltre alle quote e alle limitazioni di Artifact Registry, i repository virtuali presentano le seguenti limitazioni:

  • I repository upstream devono trovarsi nella stessa regione o in più regioni del repository virtuale, ma possono trovarsi in progetti Google Cloud diversi.
  • I repository virtuali Maven non consentono di impostare il criterio di versione su snapshot o release.

Durante l'anteprima si applicano limitazioni aggiuntive ai repository Apt e Yum:

  • Puoi utilizzare solo repository standard come repository upstream.

I repository standard Apt e Yum aggiornano l'indice dei pacchetti in modo asincrono dopo l'importazione, il caricamento o l'eliminazione di un pacchetto. Per i repository di piccole dimensioni, la rigenerazione dell'indice può richiedere diversi secondi. Per repository più grandi, la reindicizzazione potrebbe richiedere diversi minuti o più. Una volta completata la reindicizzazione, la modifica al repository è visibile ai client Apt e Yum.

Passaggi successivi