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

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.pnga99b7ace416376c4.pngbd84a6d3004737c5.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.pnga9d756bf08575b0d.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