1. Panoramica
Artifact Registry consente di archiviare diversi tipi di artefatti, creare più repository in un singolo progetto e associare una regione o una località a più regioni specifiche a ogni repository. Esistono diverse modalità di repository. Ciascuna modalità ha uno scopo diverso. Il seguente diagramma mostra uno dei molti possibili modi in cui è possibile utilizzare insieme i repository in modalità diverse. Il diagramma mostra un flusso di lavoro tra 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 eseguire le attività seguenti.
- Usare Standard Repositories per il deployment di pacchetti privati
- Usare repository Git remoti per memorizzare nella cache i pacchetti Maven Central
- Usa i repository virtuali per combinare più repository upstream in un'unica configurazione
Configurazione dell'ambiente autogestito
- 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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarla in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID
). Se l'ID generato non ti soddisfa, puoi generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, puoi eliminare le risorse che hai creato o eliminare l'intero progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Configurazione dell'area di lavoro
Configura gcloud
In Cloud Shell, imposta l'ID e il numero del progetto. Salvale 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 forniscono un modo per archiviare pacchetti privati e condividerli tra le tue 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 visualizzata la richiesta di autorizzazione di Cloud Shell
Vai a Google Cloud Console - Artifact Registry - Repository e osserva il repository Maven appena creato denominato container-dev-java-repo
. Se fai clic su di esso, puoi vedere che al momento è vuoto.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Deve 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 file xml da aggiungere ai tuoi progetti pom.xml.
- La sezione repository specifica dove Maven può scaricare gli artefatti remoti per l'utilizzo da parte del progetto corrente.
- La sezione distributionManagement specifica in quale repository remoto viene eseguito il push del progetto quando viene eseguito il deployment.
- La sezione relativa alle estensioni aggiunge artefatto-maven-wagon che abilita il livello di autenticazione e trasporto necessario 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 padre, si accede a tali dipendenze prima del caricamento delle altre voci in pom.xml. Per assicurarsi che l'elemento padre abbia accesso all'estensione, può essere inserito in un file extensions.xml che viene caricato prima di pom.xml rendendolo così disponibile per le dipendenze padre.
Copia le tre sezioni, quindi apri pom.xml
nell'editor di Cloud Shell e aggiungi le impostazioni restituite in fondo al file all'interno del tag project
di chiusura.
Suggerimento: in Cloudshell, esegui questo comando nel terminale per aprire l'editor nella directory attuale.
cloudshell workspace .
Esempio: (i nomi dei 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 tuo pacchetto Java in Artifact Registry
Con Artifact Registry configurato in Maven, ora puoi utilizzare Artifact Registry per archiviare jar Java per l'utilizzo da parte di altri progetti della tua organizzazione.
Esegui questo comando per caricare il pacchetto Java in 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 Cloud Console - Artifact Registry - Repositories. Fai clic su container-dev-java-repo
e verifica che l'artefatto binario hello-world
sia presente:
3. Repository remoti
Remote Repositories consente di memorizzare nella cache pacchetti di terze parti per maggiore affidabilità e sicurezza.
Crea un repository remoto
Nota: per maggiori dettagli sull'autenticazione e sulla 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
Rivedi il repository nella console
Vai a Cloud Console - Artifact Registry - Repositories. Fai clic su maven-central-cache
e nota che è stato creato e al momento è vuoto.
Esamina il repository nel terminale
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Integra 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 repository nel tuo file pom.xml. Assicurati di non copiare i <repository> esterni un tag dall'output.
Modifica l'ID del repository appena aggiunto in "centrale" per assicurarti che ogni voce del repository abbia un ID univoco.
Esempio: (i nomi dei 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. Per utilizzare il meccanismo delle estensioni principali, assicurati che Maven possa risolvere le dipendenze padre o 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
Esamina i pacchetti nella console
Vai a Cloud Console - Artifact Registry - Repositories. Fai clic in maven-central-cache
e verifica che gli artefatti binari ci siano memorizzati nella cache:
4. Repository virtuali
I repository virtuali fungono da interfaccia per più repository a cui è possibile accedere tramite un'unica configurazione. Ciò semplifica la configurazione client per i consumatori dei tuoi artefatti e aumenta la sicurezza mitigando gli attacchi di confusione di dipendenza.
Crea un file dei 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
Integra 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 l'unica sezione dei repository virtuali dell'output.
Esempio: (i nomi dei 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>
Esegui il pull delle dipendenze dal repository virtuale
Poiché il repository virtuale è un passthrough e non archivia i pacchetti effettivi, per dimostrare chiaramente il processo devi eliminare il repository maven-central-cache che hai creato in precedenza e ricrearlo, 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 Console Cloud - Artifact Registry - Repositories
Ora esercita il repository virtuale creando il tuo progetto con il seguente comando
rm -rf ~/.m2/repository
mvn compile
Esamina i pacchetti nella console
Vai a Cloud Console - Artifact Registry - Repositories Fai clic su maven-central-cache
e verifica che gli artefatti binari siano stati configurati per il pull dal repository virtuale, ma alla fine siano stati estratti da maven-central-cache
:
5. Complimenti!
Complimenti, hai completato il codelab.
Argomenti trattati
- Utilizzo di repository standard per il deployment di pacchetti privati
- Utilizzo dei repository remoti per memorizzare nella cache i pacchetti Maven Central
- Utilizzo di 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/23