Zarządzanie zależnościami w Artifact Registry

1. Omówienie

W miarę rozwoju Container Registry usługa Artifact Registry umożliwia Twojej organizacji zarządzanie obrazami kontenerów i pakietami językowymi (np. Maven i npm). Usługa jest w pełni zintegrowana z narzędziami i środowiskami wykonawczymi Google Cloud oraz zapewnia obsługę zarządzania zależnościami języka na potrzeby narzędzi takich jak npm i Maven. Ułatwia to integrację z narzędziami CI/CD w celu skonfigurowania zautomatyzowanych potoków.

W tym module poznasz niektóre funkcje dostępne w Artifact Registry.

Czego się nauczysz

Jakie są cele szkoleniowe tego modułu?

  • Tworzenie repozytoriów dla kontenerów i pakietów językowych
  • Zarządzanie obrazami kontenerów za pomocą Artifact Registry
  • Konfigurowanie Maven do użycia Artifact Registry na potrzeby zależności Javy

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub wykorzystaj już istniejący. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu jest wyświetlaną nazwą uczestników tego projektu. To ciąg znaków, który nie jest używany przez interfejsy API Google. W każdej chwili możesz ją zmienić.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić (po jego ustawieniu nie można go zmienić). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń z programowania konieczne jest odwołanie się do identyfikatora projektu (zwykle nazywa się on PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować kolejny losowy. Możesz też spróbować własnych sił i sprawdzić, czy jest dostępna. Potem nie będzie można go zmienić. Pozostanie ono przez czas trwania projektu.
  • Dostępna jest trzecia wartość, numer projektu, z którego korzystają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w Cloud Console, aby korzystać z zasobów Cloud/interfejsów API. Ukończenie tego ćwiczenia z programowania nie powinno kosztować zbyt wiele. Aby wyłączyć zasoby, aby nie naliczać opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z programu bezpłatnego okresu próbnego o wartości 300 USD.

Konfigurowanie gcloud

W Cloud Shell ustaw identyfikator i numer projektu. Zapisz je jako zmienne PROJECT_ID i PROJECT_NUMBER.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

Włącz usługi Google

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

Pobieranie kodu źródłowego

Kod źródłowy tego modułu znajduje się w organizacji GoogleCloudPlatform na GitHubie. Skopiuj go za pomocą poniższego polecenia, a następnie przejdź do katalogu.

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

3. Praca z obrazami kontenerów

Tworzenie repozytorium Dockera w Artifact Registry

Artifact Registry obsługuje zarządzanie obrazami kontenerów i pakietami językowymi. Różne typy artefaktów wymagają różnych specyfikacji. Na przykład żądania dotyczące zależności Maven różnią się od żądań zależności węzłów.

Aby obsługiwać różne specyfikacje interfejsu API, Artifact Registry musi określić format, z którym mają być tworzone odpowiedzi interfejsu API. Aby to zrobić, utworzysz repozytorium i przekażesz flagę --repository-format wskazującą odpowiedni typ repozytorium.

W Cloud Shell uruchom to polecenie, aby utworzyć repozytorium obrazów Dockera:

gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"

Jeśli pojawi się prośba o autoryzację Cloud Shell, kliknij Autoryzuj.

Otwórz konsolę Google Cloud – Artifact Registry – Repositories i zwróć uwagę na nowo utworzone repozytorium Dockera o nazwie container-dev-repo. Jeśli je klikniesz, zobaczysz, że w tej chwili jest puste.

Konfigurowanie uwierzytelniania Dockera w Artifact Registry

Przy nawiązywaniu dostępu do Artifact Registry wymagane są dane logowania. Zamiast konfigurować oddzielne dane logowania, można skonfigurować Dockera tak, aby bezproblemowo korzystało z danych logowania gcloud.

W Cloud Shell uruchom następujące polecenie, aby skonfigurować Dockera tak, aby używał Google Cloud CLI do uwierzytelniania żądań do Artifact Registry w regionie us-central1:

gcloud auth configure-docker us-central1-docker.pkg.dev

Pojawi się prośba o potwierdzenie zmiany konfiguracji Dockera Cloud Shell i naciśnij Enter.

Poznaj przykładową aplikację

W repozytorium Git skopiowanym w poprzednim kroku jest dostępna przykładowa aplikacja. Przejdź do katalogu Java i sprawdź kod aplikacji.

cd cloud-code-samples/java/java-hello-world

Folder zawiera przykładową aplikację w języku Java, która renderuje prostą stronę internetową: oprócz różnych plików, które nie są istotne w tym module, zawiera on kod źródłowy znajdujący się w folderze src oraz plik Dockerfile, którego użyjemy do lokalnego utworzenia obrazu kontenera.

Kompilowanie obrazu kontenera

Zanim zapiszesz obrazy kontenerów w Artifact Registry, musisz go utworzyć.

Uruchom to polecenie, aby skompilować obraz kontenera i odpowiednio otagować go, co pozwoli przekazać go do repozytorium w następnym kroku:

docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .

Przekazywanie obrazu kontenera do Artifact Registry

Uruchom to polecenie, aby przekazać obraz kontenera do utworzonego wcześniej repozytorium:

docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1

Sprawdź obraz w Artifact Registry

Otwórz Google Cloud Console – Artifact Registry – Repozytoria.. Kliknij container-dev-repo i sprawdź, czy znajduje się tam obraz java-hello-world. Kliknij obraz i zanotuj obraz otagowany jako tag1. Widać, że skanowanie pod kątem luk w zabezpieczeniach jest uruchomione lub już się zakończyło, a liczba wykrytych luk w zabezpieczeniach jest widoczna.

9cb46d3689b3ed2.png

Kliknij liczbę luk w zabezpieczeniach, aby wyświetlić listę luk w zabezpieczeniach wykrytych w obrazie wraz z nazwą biuletynu CVE i wagą. Możesz kliknąć „WYŚWIETL” przy każdej z tych luk, aby uzyskać więcej informacji:

c2a961e6218d5a45.png

4. Praca z pakietami językowymi

W tej sekcji dowiesz się, jak skonfigurować repozytorium w języku Java Artifact Registry i przesłać do niego pakiety, wykorzystując je w różnych aplikacjach.

Tworzenie repozytorium pakietów Javy

W Cloud Shell uruchom to polecenie, aby utworzyć repozytorium artefaktów Javy:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

Jeśli pojawi się prośba o autoryzację Cloud Shell, kliknij Autoryzuj.

Otwórz Artifact Registry – Repozytoria w konsoli Google Cloud i zwróć uwagę na nowo utworzone repozytorium Maven o nazwie container-dev-java-repo. Jeśli je klikniesz, zobaczysz, że w tej chwili jest puste.

Konfigurowanie uwierzytelniania w Artifact Repositor

Użyj następującego polecenia, aby zaktualizować dobrze znaną lokalizację domyślnego uwierzytelniania aplikacji (ADC) o dane logowania konta użytkownika, aby asystent danych logowania w Artifact Registry mógł uwierzytelniać się przy użyciu tych danych podczas łączenia się z repozytoriami:

gcloud auth login --update-adc

Konfigurowanie Maven dla Artifact Registry

Uruchom to polecenie w folderze java-hello-world, aby otworzyć edytor Cloud Shell i dodać folder aplikacji do swojego obszaru roboczego:

cloudshell workspace .

Włączyć pliki cookie innych firm, klikając „Witryna już działa?”. a następnie „Zezwól na pliki cookie”.

Gdy przeglądarka załaduje się ponownie, otwórz Cloud Shell i jeszcze raz uruchom polecenie powyżej, aby wczytać folder aplikacji.

62328383ea59b30c.png

a9d756bf08575b0d.png

Otwórz plik pom.xml w edytorze Cloud Shell i kliknij „Otwórz edytor”

95d98e831787b2ff.png

Otwórz terminal w edytorze Cloud Shell i uruchom to polecenie, aby wyświetlić konfigurację repozytorium w celu dodania jej do projektu Java:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

i dodaj zwrócone ustawienia do odpowiednich sekcji pliku pom.xml.

Widok edytora Cloud z wbudowanym terminalem:

33c3bfa412b7babd.png

Zaktualizuj sekcję 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>

Zaktualizuj sekcję repozytoriów.

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

Zaktualizuj rozszerzenia.

<extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>

Oto przykład całego pliku. Pamiętaj o zastąpieniu projektu <PROJECT> identyfikatorem projektu.

<?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>

Przesyłanie pakietu Javy do Artifact Registry

Po skonfigurowaniu Artifact Registry w Maven możesz teraz używać Artifact Registry do przechowywania plików Java Jar na potrzeby innych projektów w organizacji.

Uruchom to polecenie, aby przesłać pakiet Javy do Artifact Registry:

mvn deploy

Sprawdzanie pakietu Javy w Artifact Registry

Otwórz Cloud Console – Artifact Registry – Repozytoria. Kliknij container-dev-java-repo i sprawdź, czy znajduje się tam artefakt binarny hello-world:

e348d976ac1ac107.png

5. Gratulacje!

Gratulacje. Udało Ci się ukończyć ćwiczenia z programowania.

Co zostało omówione

  • Utworzone repozytoria dla kontenerów i pakietów językowych
  • Obrazy kontenerów zarządzane za pomocą Artifact Registry
  • Skonfigurowano Maven do użycia Artifact Registry na potrzeby zależności Javy

Czyszczenie

Aby usunąć projekt, uruchom to polecenie

gcloud projects delete $PROJECT_ID