Approfondimento su Artifact Registry

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 linguaggio
  • Gestire le immagini container con Artifact Registry
  • Integra Artifact Registry con Cloud Code
  • Configura Maven per utilizzare Artifact Registry per le dipendenze Java

2. Configurazione e requisiti

Configurazione dell'ambiente autogestito

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata 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). La console Cloud genera automaticamente una stringa univoca; di solito non ti importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto.
  • C'è un terzo valore, il numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei 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 seguente, 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. Tipi di artefatto diversi richiedono specifiche diverse. Ad esempio, le richieste per le dipendenze Maven sono diverse da quelle per le dipendenze dei nodi.

Per supportare le diverse specifiche dell'API, Artifact Registry deve sapere quale formato vuoi che le risposte dell'API seguano. Per farlo devi creare un repository e passare il flag --repository-format che indica il tipo di repository desiderato.

Da Cloud Shell, esegui questo 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 visualizzata la richiesta 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 Docker in Artifact Registry

Per fornire l'accesso, sono necessarie la connessione alle credenziali Artifact Registry. Anziché impostare credenziali separate, Docker può essere configurato in modo da utilizzare le tue credenziali gcloud senza problemi.

Da Cloud Shell, esegui questo 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. Passa 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 ai 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 questo comando 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 container in Artifact Registry

Esegui questo comando per eseguire il push dell'immagine container 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 verifica che l'immagine java-hello-world sia presente. Fai clic sull'immagine e prendi nota dell'immagine taggata tag1. Puoi vedere che l'analisi delle vulnerabilità è in esecuzione o è già stata completata e il numero di vulnerabilità rilevate è visibile.

9cb46d3689b3ed2.png

Fai clic sul numero di vulnerabilità per visualizzare l'elenco di vulnerabilità rilevate nell'immagine, con il nome del bollettino CVE e la gravità. Puoi fare clic su VISUALIZZA su ciascuna vulnerabilità elencata per ottenere maggiori dettagli:

2b17e9d26d9dd7ea.png

4. Integrazione con Cloud Code

In questa sezione vedrai 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 .

Si aprirà l'editor di Cloud Shell con l'explorer nella cartella dell'applicazione.

Se viene visualizzato un popup che ti chiede di escludere i file delle impostazioni del progetto Java dallo spazio di lavoro, fai clic su Exclude in workspace

I passaggi seguenti richiedono di inserire la posizione del repository Artifact Registry. Il formato della località è:

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Per trovare il tuo PROJECT_ID esegui questo 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

e6e2b06467228e18.png

Quando richiesto, scegli Yes per utilizzare il contesto attuale in kubeconfig che rimanda al cluster GKE container-dev-cluster di cui è stato eseguito il provisioning per il lab

Nel prompt del registro di immagini, inserisci la posizione dell'indirizzo che hai trovato prima di assicurarti di sostituire <PROJECT_ID> per il valore effettivo

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Quando esegui per la prima volta Esegui su Kubernetes, 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 puoi vedere che la build viene avviata per l'immagine dell'applicazione java-hello-world,, quest'ultima viene caricata nel repository Artifact Registry configurato in precedenza

Vai a Cloud Console - Artifact Registry - Repositories. Fai clic in container-dev-repo e controlla che l'immagine java-hello-world sia presente una nuova immagine con tag latest

Esamina l'applicazione di cui è stato eseguito il deployment

Torna all'editor di 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:

33257a43826b88ff.png

Nella nuova finestra del browser vedrai la pagina dell'app Hello World

d3e49693b0383a5d.png

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!". in "È stato aggiornato", dovresti vedere il processo di creazione 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 implementata:

41787b1da54ff137.png

Vai di nuovo a Cloud Console - Artifact Registry - Repositories Fai clic in container-dev-repo e controlla che l'immagine java-hello-world e annota la nuova immagine

5. Utilizzo dei pacchetti di linguaggio

In questa sezione vedrai come configurare un repository Java Artifact Registry e caricare pacchetti al suo interno, sfruttandoli in diverse applicazioni.

Crea un repository di pacchetti Java

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 alla console Google Cloud - Artifact Registry - Repositories e nota il repository Maven appena creato denominato container-dev-java-repo, se fai clic sul repository puoi vedere che al momento è vuoto.

Configura l'autenticazione in Artifact Repository

Utilizza il comando seguente per aggiornare il percorso noto per le credenziali predefinite dell'applicazione (ADC) con le credenziali del tuo account utente, in modo che l'assistente per le credenziali di Artifact Registry possa eseguire l'autenticazione utilizzandole durante la connessione con i repository:

gcloud auth login --update-adc

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

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 repository

 <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 per riferimento futuro. Assicurati di sostituire <PROJECT> con il tuo ID 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 tuo pacchetto Java in Artifact Registry

Con Artifact Registry configurato in Maven, ora puoi utilizzare Artifact Registry per archiviare i Java Jars per l'utilizzo da parte di 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'artefatto binario hello-world sia presente:

e348d976ac1ac107.png

6. Complimenti!

Complimenti, hai completato il codelab.

Argomenti trattati

  • Creazione di repository per container e pacchetti di linguaggio
  • Immagini container gestite con Artifact Registry
  • Artifact Registry integrato con Cloud Code
  • Maven configurato per utilizzare Artifact Registry per le dipendenze Java

Esegui la pulizia

Esegui questo comando per eliminare il progetto

gcloud projects delete $PROJECT_ID