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/
Предоставление инфраструктуры, используемой в этой лаборатории
В ходе этой лабораторной работы вы развернете код в 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
. Вы можете видеть, что сканирование уязвимостей запущено или уже завершено, и видно количество обнаруженных уязвимостей.
Нажмите на количество уязвимостей, и вы увидите список уязвимостей, обнаруженных на изображении, с названием бюллетеня CVE и уровнем серьезности. Вы можете нажать ПРОСМОТР для каждой указанной уязвимости, чтобы получить более подробную информацию:
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
При появлении запроса выберите 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-адрес, на который была перенаправлена служба, нажмите ссылку — Открыть веб-предварительный просмотр:
В новом окне браузера вы увидите страницу приложения hello world.
Обновить код приложения
Теперь обновите приложение, чтобы сразу увидеть изменения, реализованные при развертывании в кластере:
Откройте HelloWorldController.java
в папке src/main/java/cloudcode/helloworld/web
в редакторе Cloud Shell.
Измените текст в строке 20 с «Он работает!» на «Обновлено!», вы увидите, что процесс сборки и развертывания начинается немедленно.
В конце развертывания еще раз щелкните перенаправленный URL-адрес или обновите окно браузера с приложением, чтобы увидеть развернутое изменение:
Снова перейдите в 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
:
6. Поздравляем!
Поздравляем, вы завершили работу над кодом!
Что вы рассмотрели
- Созданы репозитории для контейнеров и языковых пакетов.
- Управляемые образы контейнеров с помощью реестра артефактов
- Интегрированный реестр артефактов с облачным кодом
- Настроен Maven для использования реестра артефактов для зависимостей Java.
Очистка
Запустите следующую команду, чтобы удалить проект
gcloud projects delete $PROJECT_ID