1. Panoramica
Artifact Registry ti consente di archiviare diversi tipi di elementi, 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 molti modi possibili per utilizzare insieme i repository in modalità diverse. 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 compilazione crea un'immagine container con l'applicazione per il deployment in Google Kubernetes Engine.
In questo lab imparerai a svolgere le seguenti attività.
- Utilizzare i repository standard per il deployment dei pacchetti privati
- Utilizzare i repository remoti per memorizzare nella cache i pacchetti Maven Central
- Utilizzare i repository virtuali per combinare più repository upstream in un'unica configurazione
Configurazione dell'ambiente a tuo ritmo
- 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 al progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
- L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; in genere non è importante quale sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID
). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà invariato per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un Numero 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 le API/risorse Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non del tutto. Per arrestare le risorse in modo da non dover pagare dopo questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono partecipare al programma Prova senza costi di 300$.
Configurazione di Workspace
Configura gcloud
In Cloud Shell, imposta l'ID progetto e il numero di 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 consentono di archiviare i pacchetti privati e condividerli con le altre applicazioni
Creare un repository Maven standard
Da Cloud Shell, esegui il comando seguente per creare un repository per gli elementi 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 alla console Google Cloud - Artifact Registry - Repositori e noterai 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
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 il seguente comando per stampare la configurazione del repository da aggiungere al 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 progetti.
- La sezione repositories specifica dove Maven può scaricare gli elementi remoti da utilizzare dal progetto corrente.
- La sezione distributionManagement specifica il repository remoto a cui verrà eseguito il push del progetto al momento del deployment.
- La sezione extensions aggiunge artifactregistry-maven-wagon che attiva il livello di autenticazione e trasporto necessario per la connessione ad Artifact Registry
- Nota: le estensioni possono essere presenti in pom.xml o extensions.xml. Se il progetto dipende da un progetto principale, a queste dipendenze viene eseguito l'accesso prima del caricamento del resto delle voci in pom.xml. Per assicurarti che il progetto principale abbia accesso all'estensione, puoi inserirla in un file extensions.xml che viene caricato prima di pom.xml, rendendola così disponibile per le dipendenze principali.
Copia le tre sezioni, quindi apri pom.xml
nell'editor di Cloud Shell e aggiungi le impostazioni restituite alla fine del file, appena all'interno del tag project
di chiusura.
Suggerimento: in cloudshell, esegui il seguente comando nel terminale per aprire l'editor nella directory corrente.
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 pacchetto Java in Artifact Registry
Con Artifact Registry configurato in Maven, ora puoi utilizzarlo per archiviare i file JAR Java da utilizzare in altri progetti della tua organizzazione.
Esegui il comando seguente per caricare il pacchetto Java su Artifact Registry:
mvn deploy -DskipTests
Se vuoi eseguire di nuovo questo comando, assicurati di aumentare la versione in 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'elemento hello-world
binario sia presente:
3. Repository remoti
I repository remoti offrono la possibilità di memorizzare nella cache i pacchetti di terze parti per una maggiore affidabilità e sicurezza.
Crea un repository remoto
Nota: per informazioni dettagliate sull'autenticazione e sulla configurazione, consulta la documentazione del prodotto.
Da Cloud Shell, esegui il seguente comando per creare un repository remoto per gli elementi 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
Esamina il repository nella console
Vai a Cloud Console - Artifact Registry - Repositories 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
Integra il repository nel tuo progetto
Esegui il seguente comando per stampare la configurazione del repository da aggiungere al 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 <repositories> esterno 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 i seguenti comandi nel terminale per creare un extensions.xml
per il tuo progetto. Per utilizzare il meccanismo delle estensioni di base, assicurati che Maven possa risolvere le dipendenze dei plug-in o dei pacchetti principali 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 il seguente 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 su maven-central-cache
e controlla che gli elementi binari memorizzati nella cache siano presenti:
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 viene semplificata per i consumatori dei tuoi elementi e la sicurezza aumenta mitigando gli 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
Integra il repository nel tuo progetto
Esegui il seguente comando per stampare la configurazione del repository da aggiungere al 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 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>
Estrai le dipendenze dal repository virtuale
Poiché il repository virtuale è un passaggio intermedio e non memorizza pacchetti effettivi, per dimostrare chiaramente la procedura, dovrai eliminare il repository maven-central-cache creato in precedenza e ricrearlo per ricominciare con un repository vuoto
Esegui i seguenti 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 - Repositories
Ora prova il repository virtuale compilando il 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 elementi binari siano stati configurati per il recupero dal repository virtuale, ma siano stati recuperati da maven-central-cache
:
5. Complimenti!
Complimenti, hai completato il codelab.
Cosa hai coperto
- Repository standard utilizzati per il deployment dei pacchetti privati
- Sono stati utilizzati i repository remoti per memorizzare nella cache i pacchetti Maven Central
- Sono stati utilizzati 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