Gestione delle dipendenze con 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 per l'utilizzo con strumenti come npm e Maven. Ciò semplifica l'integrazione con gli strumenti CI/CD per configurare le pipeline automatizzate.

Questo lab ti guiderà attraverso alcune delle 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
  • Configurare Maven per utilizzare Artifact Registry per le dipendenze Java

2. Configurazione e requisiti

Configurazione dell'ambiente autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai già un account Gmail o Google Workspace, devi crearne uno.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È 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 l'impostazione). La console Cloud genera automaticamente una stringa univoca; in genere non ti interessa quale sia. Nella maggior parte dei codelab, dovrai 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 utilizzare il tuo e verificare 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 i valori nella documentazione.
  1. Dopodiché, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/API Cloud. Completare questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in addebiti di fatturazione oltre questo tutorial, puoi eliminare le risorse create o l'intero progetto. I nuovi utenti di Google Cloud possono usufruire del programma di prova senza costi di 300$.

Configurare gcloud

In Cloud Shell, imposta l'ID progetto e il numero di 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)')

Attivare i servizi Google

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com

Recuperare 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/

3. Utilizzo delle immagini container

Creare un repository Docker in Artifact Registry

Artifact Registry supporta la gestione di immagini container e pacchetti di linguaggio. I diversi tipi di artefatti richiedono specifiche diverse. Ad esempio, le richieste di dipendenze Maven sono diverse dalle richieste di dipendenze Node.

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

Da Cloud Shell, esegui il comando seguente 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 - Repository e noterai il repository Docker appena creato denominato container-dev-repo. Se fai clic su di esso, puoi vedere che al momento è vuoto.

Configurare l'autenticazione Docker in Artifact Registry

Quando ti connetti ad Artifact Registry, sono necessarie le credenziali per fornire l'accesso. Anziché configurare credenziali separate, Docker può essere configurato per utilizzare le credenziali gcloud senza problemi.

Da Cloud Shell, esegui il comando seguente 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 ti chiederà di confermare la modifica della configurazione Docker di Cloud Shell. Premi Invio.

Esplorare l'applicazione di esempio

Nel repository Git clonato in un passaggio precedente è disponibile 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 semplice pagina web: 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.

Creare l'immagine container

Prima di poter archiviare le 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 .

Eseguire il push dell'immagine container in Artifact Registry

Esegui il comando seguente 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

Esaminare l'immagine in Artifact Registry

Vai a Google Cloud Console - Artifact Registry - Repository. 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 con il tag tag1. Puoi vedere che la scansione 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 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:

c2a961e6218d5a45.png

4. Utilizzo di pacchetti di linguaggio

In questa sezione vedrai come configurare un repository Java di Artifact Registry e caricare i pacchetti, utilizzandoli in diverse applicazioni.

Creare un repository di pacchetti Java

Da Cloud Shell, esegui il comando seguente 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 noterai il repository Maven appena creato denominato container-dev-java-repo. Se fai clic su di esso, puoi vedere che al momento è vuoto.

Configurare l'autenticazione nel repository di artefatti

Utilizza il comando seguente per aggiornare la località nota per le Credenziali predefinite dell'applicazione (ADC) con le credenziali del tuo account utente in modo che l'helper delle credenziali di Artifact Registry possa autenticarsi utilizzando queste credenziali quando si connette ai repository:

gcloud auth login --update-adc

Configurare Maven per Artifact Registry

Esegui il comando seguente dalla cartella java-hello-world per aprire l'editor di Cloud Shell e aggiungere la cartella dell'applicazione alla sua area di lavoro:

cloudshell workspace .

Abilita i cookie di terze parti facendo clic su "Il sito ora funziona?" e poi su "Consenti cookie".

Dopo che il browser si è ricaricato, apri Cloud Shell ed esegui di nuovo il comando riportato sopra per caricare la cartella dell'applicazione.

62328383ea59b30c.png

a9d756bf08575b0d.png

Apri il file pom.xml nell'editor di Cloud Shell, fai clic su "Apri editor".

95d98e831787b2ff.png

Apri il terminale dall'editor di Cloud Shell ed esegui il comando seguente 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

e aggiungi le impostazioni restituite alle sezioni appropriate del file pom.xml.

Visualizzazione dell'editor Cloud con terminale integrato:

33c3bfa412b7babd.png

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 per riferimento. Assicurati di sostituire <PROJECT> con l'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>

Caricare il pacchetto Java in 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 il comando seguente per caricare il pacchetto Java in Artifact Registry:

mvn deploy

Controllare il pacchetto Java in Artifact Registry

Vai a console Cloud - Artifact Registry - Repository. Fai clic su container-dev-java-repo e verifica che l'artefatto binario hello-world sia presente:

e348d976ac1ac107.png

5. Complimenti!

Hai completato il codelab.

Argomenti trattati

  • Creare repository per container e pacchetti di linguaggio
  • Gestire le immagini container con Artifact Registry
  • Configurare Maven per utilizzare Artifact Registry per le dipendenze Java

Eseguire la pulizia

Esegui il comando seguente per eliminare il progetto

gcloud projects delete $PROJECT_ID