Управление зависимостями с помощью реестра артефактов

1. Обзор

Artifact Registry , как эволюция Container Registry, представляет собой единое место для управления образами контейнеров и языковыми пакетами (такими как Maven и npm) в вашей организации. Он полностью интегрирован с инструментами и средами выполнения Google Cloud и поддерживает управление зависимостями на основе языков программирования для использования с такими инструментами, как npm и Maven. Это упрощает интеграцию с вашими инструментами CI/CD для настройки автоматизированных конвейеров.

В этой лабораторной работе вы познакомитесь с некоторыми функциями, доступными в реестре артефактов.

Что вы узнаете

Каковы учебные цели этой лабораторной работы?

  • Создание репозиториев для контейнеров и языковых пакетов.
  • Управление образами контейнеров с помощью реестра артефактов.
  • Настройте Maven для использования Artifact Registry для зависимостей Java.

2. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта.
  • К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
  1. Далее вам потребуется включить оплату в консоли 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 . Вы увидите, что сканирование на уязвимости запущено или уже завершено, и отображается количество обнаруженных уязвимостей.

9cb46d3689b3ed2.png

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

c2a961e6218d5a45.png

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 и еще раз выполните указанную выше команду, чтобы загрузить папку приложения.

62328383ea59b30c.png

a9d756bf08575b0d.png

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

95d98e831787b2ff.png

Откройте терминал в редакторе Cloud Shell и выполните следующую команду, чтобы вывести конфигурацию репозитория, которую необходимо добавить в ваш Java-проект:

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

и добавьте полученные настройки в соответствующие разделы файла pom.xml .

Режим просмотра «Облачный редактор» со встроенным терминалом:

33c3bfa412b7babd.png

Обновите раздел 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 :

e348d976ac1ac107.png

5. Поздравляем!

Поздравляем, вы завершили практическое занятие!

Что вы уже осветили

  • Созданы репозитории для контейнеров и языковых пакетов.
  • Управляемые образы контейнеров с использованием реестра артефактов.
  • Настроил Maven для использования Artifact Registry для зависимостей Java.

Уборка

Выполните следующую команду, чтобы удалить проект.

gcloud projects delete $PROJECT_ID