Подробное описание реестра артефактов

1. Обзор

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

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

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

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

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

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

Самостоятельная настройка среды

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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

В ходе этой лабораторной работы вы развернете код в GKE. Приведенный ниже сценарий установки подготовит для вас эту инфраструктуру.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

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

9cb46d3689b3ed2.png

Нажмите на количество уязвимостей, и вы увидите список уязвимостей, обнаруженных на изображении, с названием бюллетеня CVE и уровнем серьезности. Вы можете нажать ПРОСМОТР для каждой указанной уязвимости, чтобы получить более подробную информацию:

2b17e9d26d9dd7ea.png

4. Интеграция с облачным кодом

В этом разделе вы увидите, как использовать репозиторий образов Docker Artifact Registry с Cloud Code.

Развертывание приложения в кластере GKE из облачного кода

Выполните следующую команду из папки java-hello-world чтобы открыть редактор Cloud Shell и добавить папку приложения в его рабочую область:

cloudshell workspace .

Откроется редактор Cloud Shell с проводником в папке приложения.

Если вы получите всплывающее окно с просьбой исключить файлы настроек проекта Java из рабочей области, нажмите Exclude in workspace

Следующие шаги потребуют от вас ввода местоположения хранилища реестра артефактов. Формат местоположения:

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Чтобы найти свой PROJECT_ID, выполните следующую команду в терминале

gcloud config get project

Нажмите на строку состояния Cloud Code (в левом нижнем углу) и выберите Run on Kubernetes

e6e2b06467228e18.png

При появлении запроса выберите Yes чтобы использовать текущий контекст в kubeconfig, который указывает на кластер GKE container-dev-cluster , подготовленный для лаборатории.

В приглашении к реестру образов укажите адрес, который вы нашли, прежде чем обязательно заменить <PROJECT_ID> на ваше фактическое значение.

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Когда вы выполняете «Запуск в Kubernetes» в первый раз, Cloud Code запрашивает расположение целевого репозитория образов. После предоставления URL-адрес репозитория сохраняется в файле .vscode/launch.json , который создается в папке приложения.

В панели вывода вы видите, что начинается сборка образа приложения java-hello-world, образ загружается в настроенный ранее репозиторий реестра артефактов.

Перейдите в Cloud Console — Реестр артефактов — Репозитории. Нажмите container-dev-repo и проверьте наличие образа java-hello-world и обратите внимание на новое изображение с тегом latest

Просмотрите развернутое приложение

Вернитесь в редактор Cloud Shell: после завершения развертывания Skaffold/Cloud Code распечатает открытый URL-адрес, на который была перенаправлена ​​служба, нажмите ссылку — Открыть веб-предварительный просмотр:

33257a43826b88ff.png

В новом окне браузера вы увидите страницу приложения hello world.

d3e49693b0383a5d.png

Обновить код приложения

Теперь обновите приложение, чтобы сразу увидеть изменения, реализованные при развертывании в кластере:

Откройте HelloWorldController.java в папке src/main/java/cloudcode/helloworld/web в редакторе Cloud Shell.

Измените текст в строке 20 с «Он работает!» на «Обновлено!», вы увидите, что процесс сборки и развертывания начинается немедленно.

В конце развертывания еще раз щелкните перенаправленный URL-адрес или обновите окно браузера с приложением, чтобы увидеть развернутое изменение:

41787b1da54ff137.png

Снова перейдите в Cloud Console — Реестр артефактов — Репозитории. Щелкните container-dev-repo и проверьте наличие образа java-hello-world и запишите новое изображение.

5. Работа с языковыми пакетами

В этом разделе вы увидите, как настроить 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:

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

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

Обновите раздел управления распространением .

<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 :

e348d976ac1ac107.png

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

Поздравляем, вы завершили работу над кодом!

Что вы рассмотрели

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

Очистка

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

gcloud projects delete $PROJECT_ID