Zarządzanie zależnościami w Artifact Registry

1. Przegląd

Artifact Registry to rozwinięcie Container Registry. Jest to jedno miejsce, w którym organizacja może zarządzać obrazami kontenerów i pakietami językowymi (takimi jak Maven i npm). Jest w pełni zintegrowana z narzędziami i środowiskami wykonawczymi Google Cloud oraz obsługuje zarządzanie zależnościami na podstawie języka do użytku z narzędziami takimi 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 tego modułu?

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

2. Konfiguracja i wymagania

Samodzielne konfigurowanie środowiska

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
  • Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu.
  • Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Konfigurowanie gcloud

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

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

Włączanie usług 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. Sklonuj 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 zależności Maven różnią się od żądań zależności Node.

Aby obsługiwać różne specyfikacje interfejsu API, usługa Artifact Registry musi wiedzieć, w jakim formacie mają być zwracane odpowiedzi interfejsu API. Aby to zrobić, utwórz repozytorium i przekaż flagę --repository-format wskazującą typ repozytorium.

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

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 – Repozytoria i zwróć uwagę na nowo utworzone repozytorium Dockera o nazwie container-dev-repo. Jeśli je klikniesz, zobaczysz, że jest ono obecnie puste.

Konfigurowanie uwierzytelniania Dockera w Artifact Registry

Podczas łączenia się z Artifact Registry wymagane są dane logowania, aby zapewnić dostęp. Zamiast konfigurować oddzielne dane logowania, możesz skonfigurować Dockera tak, aby bezproblemowo korzystał z danych logowania gcloud.

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

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

Polecenie wyświetli prośbę o potwierdzenie zmiany konfiguracji Dockera w Cloud Shell. Naciśnij Enter.

Zapoznaj się z przykładową aplikacją

Przykładowa aplikacja jest dostępna w repozytorium Git sklonowanym w poprzednim kroku. 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 nieistotnych w tym module zawiera kod źródłowy w folderze src oraz plik Dockerfile, którego użyjemy do lokalnego utworzenia obrazu kontenera.

Tworzenie obrazu kontenera

Zanim zaczniesz przechowywać obrazy kontenerów w Artifact Registry, musisz utworzyć repozytorium.

Uruchom to polecenie, aby utworzyć obraz kontenera i odpowiednio go otagować, tak aby w następnym kroku można było go przenieść do repozytorium:

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

Przesyłanie obrazu kontenera do Artifact Registry

Uruchom to polecenie, aby przesłać obraz kontenera do utworzonego wcześniej repozytorium:

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

Sprawdzanie obrazu w Artifact Registry

Otwórz konsolę Google Cloud – Artifact Registry – Repozytoria. kliknij container-dev-repo i sprawdź, czy jest tam obraz java-hello-world. Kliknij obraz i zwróć uwagę na obraz oznaczony tagiem tag1. Możesz sprawdzić, czy skanowanie pod kątem luk w zabezpieczeniach jest w toku lub zostało już zakończone, a także zobaczyć liczbę wykrytych luk w zabezpieczeniach.

9cb46d3689b3ed2.png

Kliknij liczbę luk w zabezpieczeniach, aby wyświetlić listę luk wykrytych na obrazie wraz z nazwą biuletynu CVE i poziomem ważności. Aby uzyskać więcej informacji, kliknij WYŚWIETL przy każdej z nich:

c2a961e6218d5a45.png

4. Praca z pakietami językowymi

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

Tworzenie repozytorium pakietów Javy

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

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 konsolę Google Cloud – Artifact Registry – Repozytoria. Zobaczysz nowo utworzone repozytorium Maven o nazwie container-dev-java-repo. Jeśli je klikniesz, zobaczysz, że jest ono obecnie puste.

Konfigurowanie uwierzytelniania w Artifact Repository

Aby zaktualizować znaną lokalizację domyślnego uwierzytelniania aplikacji (ADC) za pomocą danych logowania konta użytkownika, tak aby pomocnik danych logowania Artifact Registry mógł ich używać do uwierzytelniania podczas łączenia się z repozytoriami, użyj tego polecenia:

gcloud auth login --update-adc

Konfigurowanie Mavena na potrzeby Artifact Registry

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

cloudshell workspace .

Włącz pliki cookie innych firm, klikając „Czy witryna działa już prawidłowo?” i „Zezwól na pliki cookie”.

Po ponownym załadowaniu przeglądarki otwórz Cloud Shell i jeszcze raz uruchom powyższe polecenie, aby załadować folder aplikacji.

62328383ea59b30c.png

a9d756bf08575b0d.png

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

95d98e831787b2ff.png

Otwórz terminal w edytorze Cloud Shell i uruchom to polecenie, aby wydrukować konfigurację repozytorium do dodania do projektu Java:

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

i dodaj zwrócone ustawienia do odpowiednich sekcji w 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ę repozytoria.

 <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 pełnego pliku. Pamiętaj, aby zastąpić <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 Java do Artifact Registry

Po skonfigurowaniu Artifact Registry w Maven możesz używać Artifact Registry do przechowywania plików JAR w języku Java, które będą wykorzystywane przez inne projekty w Twojej organizacji.

Aby przesłać pakiet Java do Artifact Registry, uruchom to polecenie:

mvn deploy

Sprawdzanie pakietu Java w Artifact Registry

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

e348d976ac1ac107.png

5. Gratulacje!

Gratulacje! Codelab został ukończony.

Omówione zagadnienia

  • Utworzone repozytoria kontenerów i pakietów językowych
  • Zarządzanie obrazami kontenerów za pomocą Artifact Registry
  • Skonfigurowano Mavena do używania Artifact Registry w przypadku zależności Javy

Czyszczenie

Aby usunąć projekt, uruchom to polecenie:

gcloud projects delete $PROJECT_ID