Szczegółowe informacje o 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
  • Integracja Artifact Registry z Cloud Code
  • 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 i w każdej chwili możesz go zaktualizować.
  • Identyfikator projektu musi być unikalny we wszystkich projektach Google Cloud i nie można go zmienić (nie można go zmienić po ustawieniu). Cloud Console automatycznie wygeneruje unikalny ciąg znaków. zwykle nieważne, co ona jest. W większości ćwiczeń w Codelabs musisz odwoływać się do identyfikatora projektu (który zwykle nazywa się PROJECT_ID), więc jeśli Ci się nie podoba, wygeneruj kolejny losowy projekt lub wypróbuj swój własny identyfikator i sprawdź, czy jest dostępny. Potem urządzenie jest „zawieszone”. po utworzeniu projektu.
  • Występuje trzecia wartość – numer projektu – używany przez 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 konsoli Cloud, aby móc korzystać z zasobów i interfejsów API Cloud. 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, wykonaj czynności „wyczyść” znajdziesz na końcu tego ćwiczenia. 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/

Udostępnij infrastrukturę używaną w tym module

W tym module wdrożysz kod w GKE. Poniższy skrypt konfiguracji przygotowuje dla Ciebie tę infrastrukturę.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

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 – Repozytoria 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.

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

2b17e9d26d9dd7ea.png

4. Integracja z Cloud Code

W tej sekcji dowiesz się, jak korzystać z repozytorium obrazów Dockera w Artifact Registry za pomocą Cloud Code.

Wdrażanie aplikacji w klastrze GKE z poziomu Cloud Code

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

cloudshell workspace .

Otworzy się edytor Cloud Shell z eksploratorem w folderze aplikacji.

Jeśli pojawi się wyskakujące okienko z prośbą o wykluczenie z obszaru roboczego plików ustawień projektu Java, kliknij Exclude in workspace

Wykonanie poniższych czynności wymaga podania lokalizacji repozytorium Artifact Registry. Format lokalizacji to:

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

Aby znaleźć identyfikator PROJECT_ID, uruchom w terminalu to polecenie

gcloud config get project

Kliknij pasek stanu Cloud Code (w lewym dolnym rogu) i wybierz Run on Kubernetes.

e6e2b06467228e18.png

Gdy pojawi się prośba, wybierz Yes, aby użyć w kubeconfig bieżącego kontekstu, który wskazuje klaster GKE container-dev-cluster udostępniony na potrzeby modułu

W prompcie w rejestrze obrazów umieść zlokalizowaną lokalizację adresu, zanim zastąpisz <PROJECT_ID>. dla Twojej rzeczywistej wartości

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

Gdy wykonujesz polecenie Uruchom w Kubernetes po raz pierwszy, Cloud Code prosi o podanie lokalizacji repozytorium obrazów docelowych. Podany adres URL repozytorium jest przechowywany w pliku .vscode/launch.json, który został utworzony w folderze aplikacji.

W panelu z wynikami widać, że rozpoczyna się kompilacja obrazu aplikacji java-hello-world,. Obraz został przesłany do skonfigurowanego wcześniej repozytorium Artifact Registry.

Otwórz Cloud Console – Artifact Registry – Repozytoria. Kliknij container-dev-repo i sprawdź, czy obraz java-hello-world oraz nowy obraz oznaczony tagiem latest.

Sprawdzanie wdrożonej aplikacji

Wróć do edytora Cloud Shell: po zakończeniu wdrożenia Skaffold/Cloud Code wyświetli ujawniony URL, pod którym usługa została przekazana, kliknij link. Otwórz podgląd w przeglądarce:

33257a43826b88ff.png

W nowym oknie przeglądarki zobaczysz stronę aplikacji hello world

d3e49693b0383a5d.png

Aktualizacja kodu aplikacji

Teraz zaktualizuj aplikację, aby zobaczyć zmianę wdrożoną natychmiast we wdrożeniu w klastrze:

Otwórz HelloWorldController.java w folderze src/main/java/cloudcode/helloworld/web w edytorze Cloud Shell.

Zmień tekst w wierszu 20 z „To jest uruchomione!” na „Aktualizacja została zaktualizowana!”, proces kompilacji i wdrażania powinien się rozpocząć od razu.

Po zakończeniu wdrażania kliknij ponownie przekierowany adres URL lub odśwież okno przeglądarki, aby zobaczyć wdrożoną zmianę:

41787b1da54ff137.png

Jeszcze raz otwórz Cloud Console – Artifact Registry – Repozytoria. Kliknij container-dev-repo i sprawdź, czy obraz java-hello-world i zanotuj nowy obraz.

5. 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, 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

Otwórz plik pom.xml w edytorze Cloud Shell i dodaj zwrócone ustawienia do odpowiednich sekcji pliku.

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

6. 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
  • Zintegrowany Artifact Registry z Cloud Code
  • 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