1. Обзор
Будучи развитием реестра контейнеров, реестр артефактов представляет собой единое место для вашей организации, позволяющее управлять образами контейнеров и языковыми пакетами (такими как Maven и npm). Он полностью интегрирован с инструментами и средами выполнения Google Cloud и поддерживает управление зависимостями на основе языка для использования с такими инструментами, как npm и Maven. Это упрощает интеграцию его с вашими инструментами CI/CD для настройки автоматизированных конвейеров.
В ходе этой лабораторной работы вы познакомитесь с некоторыми функциями, доступными в реестре артефактов.
Что вы узнаете
Каковы цели обучения в этой лаборатории?
- Создайте репозитории для контейнеров и языковых пакетов.
- Управление образами контейнеров с помощью реестра артефактов
- Настройте Maven для использования реестра артефактов для зависимостей Java.
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .
- Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (невозможно изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID
). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта. - К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
- Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и не взимать плату за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи 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 Console — Реестр артефактов — Репозитории и обратите внимание на недавно созданный репозиторий Docker с именемContainer container-dev-repo
. Если вы нажмете на него, вы увидите, что в данный момент он пуст.
Настройка аутентификации Docker для реестра артефактов
При подключении к реестру артефактов для предоставления доступа требуются учетные данные. Вместо того, чтобы настраивать отдельные учетные данные, Docker можно настроить на беспрепятственное использование ваших учетных данных gcloud.
В Cloud Shell выполните следующую команду, чтобы настроить Docker для использования Google Cloud CLI для аутентификации запросов к реестру артефактов в регионе us-central1
:
gcloud auth configure-docker us-central1-docker.pkg.dev
Команда запросит подтверждение изменения конфигурации докера 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 Console — Реестр артефактов — Хранилища .
Щелкните container-dev-repo
и убедитесь, что там находится образ java-hello-world
. Нажмите на изображение и обратите внимание на изображение с тегом tag1
. Вы можете видеть, что сканирование уязвимостей запущено или уже завершено, и видно количество обнаруженных уязвимостей.
Нажмите на количество уязвимостей, и вы увидите список уязвимостей, обнаруженных на изображении, с названием бюллетеня CVE и уровнем серьезности. Вы можете нажать ПРОСМОТР для каждой указанной уязвимости, чтобы получить более подробную информацию:
4. Работа с языковыми пакетами
В этом разделе вы увидите, как настроить Java-репозиторий Artifact Registry и загрузить в него пакеты, используя их в различных приложениях.
Создайте репозиторий пакетов Java
В Cloud Shell выполните следующую команду, чтобы создать репозиторий для артефактов Java:
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 Console — Реестр артефактов — Репозитории и обратите внимание на только что созданный репозиторий 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
.
Вид Cloud Editor со встроенным терминалом:
Обновите раздел управления распространением .
<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 в реестр артефактов.
Настроив реестр артефактов в Maven, вы теперь можете использовать реестр артефактов для хранения файлов Java Jars для использования другими проектами в вашей организации.
Выполните следующую команду, чтобы загрузить пакет Java в реестр артефактов:
mvn deploy
Проверьте пакет Java в реестре артефактов.
Перейдите в Cloud Console — Реестр артефактов — Репозитории. Щелкните container-dev-java-repo
и проверьте наличие двоичного артефакта hello-world
:
5. Поздравляем!
Поздравляем, вы завершили работу над кодом!
Что вы рассмотрели
- Созданы репозитории для контейнеров и языковых пакетов.
- Управляемые образы контейнеров с помощью реестра артефактов
- Настроен Maven для использования реестра артефактов для зависимостей Java.
Очистка
Запустите следующую команду, чтобы удалить проект
gcloud projects delete $PROJECT_ID