Questo documento fornisce una panoramica dei repository virtuali. Per istruzioni su come creare un repository virtuale, consulta Creare repository virtuali.
Agli repository virtuali si applicano le quote e i limiti di Artifact Registry.
Come funzionano i repository virtuali
I repository virtuali fungono da un unico punto di accesso per scaricare, installare o eseguire il deployment di artefatti nello stesso formato da uno o più repository upstream. Un repository upstream può essere un repository Artifact Registry standard o remoto.
Le altre modalità del repository sono:
- Standard: la modalità del repository predefinita. Carichi o pubblichi gli elementi, come i pacchetti privati, direttamente nei repository standard. Sebbene tu possa 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 linguaggi): una cache pull through per gli elementi nei repository pubblici come Maven Central o PyPI. Agisce come 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 elementi archiviati in più repository a monte.
Ad esempio:
- Un repository virtuale per i pacchetti Maven può fornire pacchetti Java privati da un repository standard di Artifact Registry e pacchetti Java pubblici da un repository remoto che memorizza nella cache i pacchetti pubblici di Maven Central.
- Un repository virtuale può fornire 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 i pacchetti da altri team utilizzando il repository virtuale.
- Risoluzione delle dipendenze più sicura
Puoi assegnare una priorità ai repository a monte per avere un maggiore controllo sul repository scelto da Artifact Registry quando un elemento richiesto si trova in più di un repository a monte.
Alcuni strumenti, come lo strumento
pip
di Python, non forniscono un modo per controllare l'ordine di ricerca quando nel client è configurato un mix 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 i clienti a scegliere la versione non valida.Per ridurre questo rischio, puoi utilizzare insieme i repository remoti e virtuali:
- Crea un repository remoto come proxy per il repository pubblico.
- Crea un repository standard per i tuoi pacchetti privati.
- Crea un repository virtuale configurato per dare la priorità al repository standard se esiste una versione dello stesso pacchetto in entrambi i repository.
- Configura i gestori dei 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 altre best practice per la gestione delle dipendenze, consulta Gestione delle dipendenze.
In che modo i repository virtuali selezionano un repository upstream
Ogni repository upstream deve avere una priorità configurata. La priorità è un numero intero che funge da ponderazione, non da ranking. Ciò significa che i repository con un valore di priorità più elevato hanno la precedenza sui repository con valori di priorità inferiori.
Quando richiedi un artifact presente in più repository a monte, Artifact Registry utilizza la seguente logica di assegnazione della priorità:
- Viene data la priorità al repository con il valore più alto. Ad esempio, un valore di
10
viene considerato di priorità superiore rispetto a un valore di1
. - Se più repository upstream hanno la stessa priorità, l'elemento può essere pubblicato 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 gli artefatti da repository esterni ad Artifact Registry.
Ad esempio, se configuri lo strumento pip
di Python per cercare su 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 cercare solo nel repository virtuale, puoi controllare la priorità di tutti i repository upstream, incluso un repository remoto upstream che funge da proxy per PyPI.
Formati dei repository supportati
Puoi creare repository virtuali per i seguenti formati di repository Artifact Registry:
Pacchetti di lingue:
Pacchetti del sistema operativo:
Se non hai mai utilizzato Artifact Registry, puoi utilizzare le guide rapide per scoprire come configurare i repository standard per questi formati.
Limitazioni
Oltre alle quote e ai limiti di Artifact Registry, i repository virtuali presentano le seguenti limitazioni:
- I repository upstream di Artifact Registry standard devono trovarsi nella stessa regione o nella stessa località a 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.
I repository upstream Apt e Yum devono essere repository standard di Artifact Registry.
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 i repository più grandi, la reindicizzazione potrebbe richiedere diversi minuti o più. Al termine dell'indicizzazione, la modifica al repository è visibile ai client Apt e Yum.
Passaggi successivi
- Crea repository virtuali.
- Scopri di più sui repository Artifact Registry leggendo la panoramica dei repository.