1. Обзор
Artifact Registry , как эволюция Container Registry, представляет собой единое место для управления образами контейнеров и языковыми пакетами (такими как Maven и npm) в вашей организации. Он полностью интегрирован с инструментами и средами выполнения Google Cloud и поддерживает управление зависимостями на основе языков программирования для использования с такими инструментами, как npm и Maven. Это упрощает интеграцию с вашими инструментами CI/CD для настройки автоматизированных конвейеров.
В этой лабораторной работе вы познакомитесь с некоторыми функциями, доступными в реестре артефактов.
Что вы узнаете
Каковы учебные цели этой лабораторной работы?
- Создание репозиториев для контейнеров и языковых пакетов.
- Управление образами контейнеров с помощью реестра артефактов.
- Настройте Maven для использования Artifact Registry для зависимостей Java.
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Настройте gcloud
В Cloud Shell укажите идентификатор проекта и номер проекта. Сохраните их как переменные PROJECT_ID и PROJECT_NUMBER .
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Включить сервисы Google
gcloud services enable \
cloudresourcemanager.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
containerregistry.googleapis.com \
containerscanning.googleapis.com
Получите исходный код
Исходный код для этой лабораторной работы находится в репозитории GoogleCloudPlatform на GitHub. Клонируйте его с помощью приведенной ниже команды, а затем перейдите в нужную директорию.
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
3. Работа с образами контейнеров
Создайте репозиторий Docker в реестре артефактов.
Реестр артефактов поддерживает управление образами контейнеров и языковыми пакетами. Для разных типов артефактов требуются разные спецификации. Например, запросы на зависимости Maven отличаются от запросов на зависимости Node.
Для поддержки различных спецификаций API реестру артефактов необходимо знать, в каком формате вы хотите получать ответы от API. Для этого вам нужно создать репозиторий и передать флаг --repository-format указывающий желаемый тип репозитория.
В Cloud Shell выполните следующую команду, чтобы создать репозиторий для образов Docker:
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"
Нажмите «Авторизовать», если появится запрос на авторизацию Cloud Shell.
Перейдите в консоль Google Cloud — Реестр артефактов — Репозитории и обратите внимание на свой недавно созданный репозиторий Docker под названием container-dev-repo . Если вы щелкнете по нему, то увидите, что в данный момент он пуст.
Настройка аутентификации Docker в реестре артефактов
При подключении к реестру артефактов для предоставления доступа требуются учетные данные. Вместо настройки отдельных учетных данных Docker можно настроить таким образом, чтобы он беспрепятственно использовал ваши учетные данные gcloud.
В Cloud Shell выполните следующую команду, чтобы настроить Docker для использования Google Cloud CLI для аутентификации запросов к Artifact Registry в регионе us-central1 :
gcloud auth configure-docker us-central1-docker.pkg.dev
Для изменения конфигурации Docker в Cloud Shell потребуется подтверждение, нажмите Enter.
Ознакомьтесь с примером приложения.
Пример приложения находится в репозитории Git, который вы клонировали на предыдущем шаге. Перейдите в каталог java и просмотрите код приложения.
cd cloud-code-samples/java/java-hello-world
В папке находится пример Java-приложения, которое отображает простую веб-страницу: помимо различных файлов, не имеющих отношения к данной лабораторной работе, она содержит исходный код в папке src , а также Dockerfile, который мы будем использовать для локальной сборки образа контейнера.
Создайте образ контейнера.
Прежде чем вы сможете сохранять образы контейнеров в реестре артефактов, вам необходимо его создать.
Выполните следующую команду, чтобы собрать образ контейнера и правильно пометить его тегом, чтобы на следующем шаге отправить его в свой репозиторий:
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .
Загрузите образ контейнера в реестр артефактов.
Выполните следующую команду, чтобы отправить образ контейнера в ранее созданный репозиторий:
docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1
Просмотрите изображение в реестре артефактов.
Перейдите в консоль Google Cloud — Реестр артефактов — Репозитории . Перейдите в container-dev-repo и убедитесь, что образ java-hello-world там присутствует. Щелкните по образу и обратите внимание на метку tag1 . Вы увидите, что сканирование на уязвимости запущено или уже завершено, и отображается количество обнаруженных уязвимостей.

Щёлкните по количеству обнаруженных уязвимостей, и вы увидите список обнаруженных уязвимостей на изображении, с указанием названия бюллетеня CVE и уровня серьёзности. Вы можете нажать кнопку «Просмотреть» для каждой уязвимости в списке, чтобы получить более подробную информацию:

4. Работа с языковыми пакетами
В этом разделе вы узнаете, как настроить Java-репозиторий Artifact Registry и загружать в него пакеты, используя их в различных приложениях.
Создайте репозиторий пакетов Java.
Для создания репозитория для Java-артефактов выполните следующую команду в Cloud Shell:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Нажмите «Авторизовать», если появится запрос на авторизацию Cloud Shell.
Перейдите в консоль Google Cloud — Реестр артефактов — Репозитории и обратите внимание на свой недавно созданный репозиторий Maven с именем container-dev-java-repo . Если вы щелкнете по нему, то увидите, что в данный момент он пуст.
Настройте аутентификацию в репозитории артефактов.
Используйте следующую команду, чтобы обновить общеизвестное местоположение учетных данных приложения по умолчанию (ADC) учетными данными вашей учетной записи пользователя, чтобы вспомогательная программа для работы с учетными данными реестра артефактов могла использовать их для аутентификации при подключении к репозиториям:
gcloud auth login --update-adc
Настройка Maven для реестра артефактов
Выполните следующую команду из папки java-hello-world , чтобы открыть редактор Cloud Shell и добавить папку приложения в его рабочую область:
cloudshell workspace .
Разрешите использование сторонних файлов cookie, нажав на кнопку «Сайт теперь работает?» и затем на кнопку «Разрешить файлы cookie».
После перезагрузки браузера откройте Cloud Shell и еще раз выполните указанную выше команду, чтобы загрузить папку приложения.


Откройте файл pom.xml в редакторе Cloud Shell, нажмите «Открыть редактор».

Откройте терминал в редакторе Cloud Shell и выполните следующую команду, чтобы вывести конфигурацию репозитория, которую необходимо добавить в ваш Java-проект:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
и добавьте полученные настройки в соответствующие разделы файла pom.xml .
Режим просмотра «Облачный редактор» со встроенным терминалом:

Обновите раздел 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>
Обновите раздел репозиториев.
<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>
Обновите расширения
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
Вот пример полного файла для вашего означения. Убедитесь, что вы заменили <PROJECT> на идентификатор вашего проекта.
<?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>
Загрузите свой Java-пакет в реестр артефактов.
После настройки Artifact Registry в Maven вы можете использовать Artifact Registry для хранения Java-JAR-файлов, которые будут использоваться другими проектами в вашей организации.
Выполните следующую команду, чтобы загрузить ваш Java-пакет в реестр артефактов:
mvn deploy
Проверьте наличие пакета Java в реестре артефактов.
Перейдите в Cloud Console - Artifact Registry - Repositorys. Щелкните по container-dev-java-repo и убедитесь, что там присутствует бинарный артефакт hello-world :

5. Поздравляем!
Поздравляем, вы завершили практическое занятие!
Что вы уже осветили
- Созданы репозитории для контейнеров и языковых пакетов.
- Управляемые образы контейнеров с использованием реестра артефактов.
- Настроил Maven для использования Artifact Registry для зависимостей Java.
Уборка
Выполните следующую команду, чтобы удалить проект.
gcloud projects delete $PROJECT_ID