1. Panoramica
Essendo l'evoluzione di Container Registry, Artifact Registry offre una singola posizione da cui la tua organizzazione può gestire le immagini container e i pacchetti di linguaggio, come Maven e npm. È completamente integrato con gli strumenti e i runtime di Google Cloud e supporta la gestione delle dipendenze basata sul linguaggio da utilizzare con strumenti come npm e Maven. Ciò semplifica l'integrazione con i tuoi strumenti CI/CD per configurare le pipeline automatizzate.
Questo lab illustra alcune funzionalità disponibili in Artifact Registry.
Cosa imparerai a fare
Quali sono gli obiettivi di apprendimento di questo lab?
- Creare repository per container e pacchetti di linguaggi
- Gestire le immagini container con Artifact Registry
- Integrare Artifact Registry con Cloud Code
- Configura Maven per utilizzare Artifact Registry per le dipendenze Java
2. Configurazione e requisiti
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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla in qualsiasi momento.
- L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). Cloud Console genera automaticamente una stringa univoca; di solito non è importante quale sia. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID
), quindi se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Dopo la creazione del progetto, viene "congelato". - 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 incorrere in fatturazione oltre questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono partecipare al programma Prova senza costi di 300$.
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 i servizi Google
gcloud services enable \
cloudresourcemanager.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
containerregistry.googleapis.com \
containerscanning.googleapis.com
Recupera il codice sorgente
Il codice sorgente di questo lab si trova nell'organizzazione GoogleCloudPlatform su GitHub. Clonalo con il comando riportato di seguito, quindi passa alla directory.
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
Esegui il provisioning dell'infrastruttura utilizzata in questo lab
In questo lab eseguirai il deployment del codice su GKE. Lo script di configurazione riportato di seguito prepara l'infrastruttura per te.
gcloud container clusters create container-dev-cluster --zone=us-central1-b
3. Utilizzo delle immagini container
Crea un repository Docker su Artifact Registry
Artifact Registry supporta la gestione di immagini container e pacchetti di linguaggio. I diversi tipi di elementi richiedono specifiche diverse. Ad esempio, le richieste per le dipendenze Maven sono diverse da quelle per le dipendenze Node.
Per supportare le diverse specifiche dell'API, Artifact Registry deve sapere quale formato vuoi che vengano seguite dalle risposte dell'API. A tal fine, dovrai creare un repository e passare il flag --repository-format
che indica il tipo di repository desiderato
Da Cloud Shell, esegui il seguente comando per creare un repository per le immagini Docker:
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"
Fai clic su Autorizza se viene visualizzato il prompt di autorizzazione di Cloud Shell
Vai a Google Cloud Console - Artifact Registry - Repositories e nota il repository Docker denominato container-dev-repo
, se fai clic sul repository puoi vedere che al momento è vuoto
Configura l'autenticazione di Docker in Artifact Registry
Per fornire l'accesso, sono necessarie la connessione alle credenziali Artifact Registry. Anziché configurare credenziali separate, Docker può essere configurato per utilizzare le credenziali gcloud senza problemi.
Da Cloud Shell, esegui il seguente comando per configurare Docker in modo che utilizzi Google Cloud CLI per autenticare le richieste ad Artifact Registry nella regione us-central1
:
gcloud auth configure-docker us-central1-docker.pkg.dev
Il comando richiederà una conferma per la modifica della configurazione del docker di Cloud Shell; premi Invio.
Esplora l'applicazione di esempio
Nel repository Git che hai clonato in un passaggio precedente viene fornita un'applicazione di esempio. Vai alla directory Java ed esamina il codice dell'applicazione.
cd cloud-code-samples/java/java-hello-world
La cartella contiene un'applicazione Java di esempio che esegue il rendering di una pagina web semplice: oltre a vari file non pertinenti per questo lab specifico, contiene il codice sorgente, nella cartella src
, e un Dockerfile che utilizzeremo per creare un'immagine container in locale.
Crea l'immagine container
Prima di poter archiviare immagini container in Artifact Registry, devi crearne una.
Esegui il comando seguente per creare l'immagine container e taggarla correttamente per eseguirne il push nel repository nel passaggio successivo:
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .
Esegui il push dell'immagine del contenitore in Artifact Registry
Esegui il seguente comando per eseguire il push dell'immagine del contenitore nel repository creato in precedenza:
docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1
Esamina l'immagine in Artifact Registry
Vai a Google Cloud Console - Artifact Registry - Repositories.
Fai clic su container-dev-repo
e controlla che l'immagine java-hello-world
sia presente. Fai clic sull'immagine e prendi nota dell'immagine contrassegnata come tag1
. Puoi vedere che l'analisi delle vulnerabilità è in esecuzione o è già stata completata e il numero di vulnerabilità rilevate è visibile.
Fai clic sul numero di vulnerabilità per visualizzare l'elenco delle vulnerabilità rilevate nell'immagine, con il nome del bollettino CVE e la gravità. Puoi fare clic su VISUALIZZA su ogni vulnerabilità elencata per visualizzare ulteriori dettagli:
4. Integrazione con Cloud Code
In questa sezione scoprirai come utilizzare il repository di immagini Docker di Artifact Registry con Cloud Code.
Esegui il deployment dell'applicazione nel cluster GKE da Cloud Code
Esegui questo comando dalla cartella java-hello-world
per aprire l'editor di Cloud Shell e aggiungere la cartella dell'applicazione all'area di lavoro:
cloudshell workspace .
L'editor di Cloud Shell si aprirà con l'esploratore nella cartella dell'applicazione.
Se viene visualizzato un popup che ti chiede di escludere i file di impostazioni del progetto Java dallo spazio di lavoro, fai clic su Exclude in workspace
Per i passaggi che seguono, dovrai inserire la posizione del repository Artifact Registry. Il formato della località è:
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
Per trovare PROJECT_ID, esegui il seguente comando nel terminale
gcloud config get project
Fai clic sulla barra di stato di Cloud Code (nell'angolo in basso a sinistra) e seleziona Run on Kubernetes
Quando ti viene chiesto, scegli Yes
per utilizzare il contesto attuale in kubeconfig che punta al cluster GKE container-dev-cluster
di cui è stato eseguito il provisioning per il lab
Nella richiesta del registry delle immagini, inserisci l'indirizzo che hai trovato prima di assicurarti di sostituire <PROJECT_ID> con il valore effettivo
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
Quando esegui Esegui su Kubernetes per la prima volta, Cloud Code ti chiede la posizione del repository di immagini di destinazione. Una volta fornito, l'URL del repository viene archiviato nel file .vscode/launch.json
che viene creato nella cartella dell'applicazione.
Nel riquadro di output viene visualizzata l'avvio della compilazione per l'immagine dell'applicazione java-hello-world,
. L'immagine viene caricata nel repository Artifact Registry configurato in precedenza
Vai a Cloud Console - Artifact Registry - Repositories Fai clic su container-dev-repo
e controlla che l'immagine java-hello-world
e una nuova immagine taggata latest
Esamina l'applicazione di cui è stato eseguito il deployment
Torna all'editor Cloud Shell: al termine del deployment, Skaffold/Cloud Code stamperà l'URL esposto a cui è stato inoltrato il servizio. Fai clic sul link Apri anteprima web:
Nella nuova finestra del browser vedrai la pagina dell'app Hello World
Aggiorna il codice dell'applicazione
Ora aggiorna l'applicazione per vedere la modifica implementata immediatamente nel deployment sul cluster:
Apri HelloWorldController.java
nella cartella src/main/java/cloudcode/helloworld/web
nell'editor di Cloud Shell.
Modifica il testo nella riga 20 da "È in esecuzione." a "È aggiornato.", dovresti vedere il processo di build e deployment che inizia immediatamente.
Al termine del deployment, fai di nuovo clic sull'URL inoltrato o aggiorna la finestra del browser con l'applicazione per visualizzare la modifica di cui è stato eseguito il deployment:
Torna a Cloud Console - Artifact Registry - Repositories Fai clic su container-dev-repo
e controlla che l'immagine java-hello-world
e la nuova immagine siano presenti
5. Utilizzo dei pacchetti di lingue
In questa sezione viene spiegato come configurare un repository Java di Artifact Registry e caricare i pacchetti al suo interno, per utilizzarli in diverse applicazioni.
Crea un repository di pacchetti Java
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 - Repositories e noterai il repository Maven appena creato denominato container-dev-java-repo
. Se fai clic su di esso, puoi vedere che al momento è vuoto.
Configura l'autenticazione nel repository di artefatti
Utilizza il seguente comando per aggiornare la posizione nota per le credenziali predefinite dell'applicazione (ADC) con le credenziali del tuo account utente in modo che lo strumento di assistenza per le credenziali di Artifact Registry possa autenticarsi utilizzandole quando si connette ai repository:
gcloud auth login --update-adc
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
Apri pom.xml nell'editor di Cloud Shell e aggiungi le impostazioni restituite alle sezioni appropriate del file.
Aggiorna la sezione distributionManagement
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</repository>
</distributionManagement>
Aggiorna la sezione repositories
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
Aggiorna le estensioni
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
Ecco un esempio del file completo da conservare come riferimento. Assicurati di sostituire <PROJECT> con l'ID del tuo progetto.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>hello-world</artifactId>
<packaging>jar</packaging>
<name>Cloud Code Hello World</name>
<description>Getting started with Cloud Code</description>
<version>1.0.0</version>
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
</parent>
<properties>
<java.version>1.8</java.version>
<checkstyle.config.location>./checkstyle.xml</checkstyle.config.location>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
</build>
<!-- The Spring Cloud GCP BOM will manage spring-cloud-gcp version numbers for you. -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.2.8.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>
</dependencies>
</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 questo comando per caricare il pacchetto Java in Artifact Registry:
mvn deploy
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:
6. Complimenti!
Complimenti, hai completato il codelab.
Cosa hai coperto
- Repository creati per container e pacchetti di lingua
- Immagini container gestite con Artifact Registry
- Artifact Registry integrato con Cloud Code
- Maven è stato configurato per utilizzare Artifact Registry per le dipendenze Java
Esegui la pulizia
Esegui questo comando per eliminare il progetto
gcloud projects delete $PROJECT_ID