1. Omówienie
W miarę rozwoju Container Registry usługa Artifact Registry umożliwiała 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
- 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ć.
- 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.
- 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ę
Przykładowa aplikacja jest udostępniana w repozytorium Git skopiowanym 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, 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.
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:
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.
Otwórz plik pom.xml w edytorze Cloud Shell i kliknij „Otwórz edytor”
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:
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 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
:
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