1. Panoramica
Artifact Registry ti consente di archiviare diversi tipi di artefatti, creare più repository in un unico progetto e associare una regione o più regioni specifiche a ogni repository. Esistono diverse modalità di repository. Ogni modalità ha uno scopo diverso. Il seguente diagramma mostra uno dei tanti modi possibili per utilizzare i repository in diverse modalità. Il diagramma mostra un flusso di lavoro in due progetti Google Cloud. In un progetto di sviluppo, gli sviluppatori creano un'applicazione Java. In un progetto di runtime separato, un'altra build crea un'immagine container con l'applicazione per il deployment in Google Kubernetes Engine.

In questo lab imparerai a:
- Utilizza i repository standard per il deployment dei pacchetti privati
- Utilizza i repository remoti per memorizzare nella cache i pacchetti Maven Central
- Utilizza i repository virtuali per combinare più repository upstream in un'unica configurazione
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID). Se non ti piace l'ID generato, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Configurazione di Workspace
Configura gcloud
In Cloud Shell, imposta l'ID e il numero del progetto. Salvali come variabili PROJECT_ID e PROJECT_NUMBER.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Abilita API
gcloud services enable artifactregistry.googleapis.com
Clona il repository
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Repository standard
I repository standard offrono un modo per archiviare i pacchetti privati e condividerli con le altre applicazioni
Crea un repository Maven standard
Da Cloud Shell, esegui questo comando per creare un repository per gli artefatti Java:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Fai clic su Autorizza se viene visualizzato il prompt di autorizzazione di Cloud Shell
Vai a console Google Cloud - Artifact Registry - Repository e nota il repository Maven appena creato denominato container-dev-java-repo. Se fai clic su questo repository, puoi vedere che al momento è vuoto.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Dovrebbe restituire una risposta simile alla seguente
Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'
Configura Maven per Artifact Registry
Esegui questo comando per stampare la configurazione del repository da aggiungere al tuo progetto Java:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Il comando precedente restituisce il codice XML da aggiungere al file pom.xml dei tuoi progetti.
- La sezione repositories specifica dove Maven può scaricare gli artefatti remoti da utilizzare nel progetto corrente.
- La sezione distributionManagement specifica il repository remoto in cui verrà eseguito il push del progetto al momento del deployment.
- La sezione extensions aggiunge artifactregistry-maven-wagon, che abilita l'autenticazione e il livello di trasporto necessari per la connessione ad Artifact Registry
- Nota: le estensioni possono esistere in pom.xml o extensions.xml. Nei casi in cui il progetto dipende da un progetto principale, si accede a queste dipendenze prima che vengano caricate le altre voci nel file pom.xml. Per garantire che il genitore abbia accesso all'estensione, questa può essere inserita in un file extensions.xml caricato prima di pom.xml, rendendola disponibile per le dipendenze del genitore.
Copia le tre sezioni, poi apri pom.xml nell'editor di Cloud Shell e aggiungi le impostazioni restituite in fondo al file, appena all'interno del tag project di chiusura.
Suggerimento: in Cloud Shell, esegui questo comando nel terminale per aprire l'editor nella directory corrente.
cloudshell workspace .
Esempio: (i nomi dei tuoi progetti saranno diversi negli URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Carica il pacchetto Java su Artifact Registry
Con Artifact Registry configurato in Maven, ora puoi utilizzare Artifact Registry per archiviare i file JAR Java da utilizzare in altri progetti della tua organizzazione.
Esegui questo comando per caricare il pacchetto Java su Artifact Registry:
mvn deploy -DskipTests
Se vuoi eseguire di nuovo questo comando, assicurati di aumentare la versione nel file pom.xml.
Controlla il pacchetto Java in Artifact Registry
Vai a console Cloud - Artifact Registry - Repositories fai clic su container-dev-java-repo e verifica che l'artefatto binario hello-world sia presente:

3. Repository remoti
I repository remoti consentono di memorizzare nella cache i pacchetti di terze parti per una maggiore affidabilità e sicurezza.
Crea un repository remoto
Nota: per informazioni dettagliate su autenticazione e configurazione, consulta la documentazione del prodotto.
Da Cloud Shell, esegui questo comando per creare un repository remoto per gli artefatti Maven Central:
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Esaminare il repository nella console
Vai a console Cloud - Artifact Registry - Repository fai clic su maven-central-cache e noterai che è stato creato ed è attualmente vuoto
Esamina il repository nel terminale
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Integrare il repository nel progetto
Esegui questo comando per stampare la configurazione del repository da aggiungere al tuo progetto Java:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Aggiungi la sezione del repository a pom.xml. Assicurati di non copiare il tag esterno <repositories> dall'output.
Modifica l'ID del repository appena aggiunto in "central" per assicurarti che ogni voce del repository abbia un ID univoco.
Esempio: (i nomi dei tuoi progetti saranno diversi negli URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Esegui questi comandi nel terminale per creare un extensions.xml per il tuo progetto. Utilizza il meccanismo delle estensioni principali per assicurarti che Maven possa risolvere le dipendenze padre o dei plug-in da Artifact Registry.
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
Esegui il pull delle dipendenze dal repository remoto
Esegui questo comando per compilare l'applicazione utilizzando il repository remoto:
rm -rf ~/.m2/repository
mvn compile
Esaminare i pacchetti nella console
Vai a console Cloud - Artifact Registry - Repository. Fai clic su maven-central-cache e verifica che gli artefatti binari memorizzati nella cache:

4. Repository virtuali
I repository virtuali fungono da interfaccia per accedere a più repository tramite un'unica configurazione. In questo modo, la configurazione del client per i consumatori degli artefatti viene semplificata e la sicurezza viene aumentata grazie alla mitigazione degli attacchi di confusione delle dipendenze.
Creare un file di criteri
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
Crea il repository virtuale
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
Integrare il repository nel progetto
Esegui questo comando per stampare la configurazione del repository da aggiungere al tuo progetto Java:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Sostituisci l'intera sezione dei repository nel file pom con la sezione dei repository virtuali dell'output.
Esempio: (i nomi dei tuoi progetti saranno diversi negli URL)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Pull delle dipendenze dal repository virtuale
Poiché il repository virtuale è un pass-through e non memorizza pacchetti effettivi, per dimostrare chiaramente la procedura eliminerai il repository maven-central-cache creato in precedenza e lo ricreerai per ricominciare con un repository vuoto.
Esegui questi comandi per ricreare il repository della cache
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Puoi esaminare il repository vuoto nella console. Vai a Cloud Console - Artifact Registry - Repository
Ora esercita il repository virtuale creando il progetto con il seguente comando
rm -rf ~/.m2/repository
mvn compile
Esaminare i pacchetti nella console
Vai a Cloud Console - Artifact Registry - Repository, fai clic su maven-central-cache e verifica che gli artefatti binari siano stati configurati per il pull dal repository virtuale, ma che alla fine siano stati estratti da maven-central-cache:

5. Complimenti!
Congratulazioni, hai completato il codelab.
Argomenti trattati
- Utilizzo di repository standard per il deployment dei pacchetti privati
- Utilizzo di repository remoti per memorizzare nella cache i pacchetti Maven Central
- Utilizzato repository virtuali per combinare più repository upstream in un'unica configurazione
Esegui la pulizia
Esegui questo comando per eliminare il progetto
gcloud projects delete ${PROJECT_ID}
—
Ultimo aggiornamento: 22/03/2023