1. Обзор
Реестр артефактов позволяет хранить различные типы артефактов, создавать несколько репозиториев в одном проекте и связывать каждый репозиторий с определенным регионом или несколькими регионами. Существует несколько режимов работы репозиториев. Каждый режим служит разным целям. На следующей диаграмме показан один из многих возможных способов совместного использования репозиториев в разных режимах. Диаграмма демонстрирует рабочий процесс в двух проектах Google Cloud. В проекте разработки разработчики создают Java-приложение. В отдельном проекте среды выполнения другая сборка создает образ контейнера с приложением для развертывания в Google Kubernetes Engine.

В этой лабораторной работе вы научитесь выполнять следующие задачи.
- Используйте стандартные репозитории для развертывания ваших частных пакетов.
- Используйте удалённые репозитории для кэширования пакетов Maven Central.
- Используйте виртуальные репозитории для объединения нескольких исходных репозиториев в одной конфигурации.
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы можете изменить её в любое время.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он останется неизменным на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли 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)')
Включить API
gcloud services enable artifactregistry.googleapis.com
Клонируйте репозиторий
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Стандартные репозитории
Стандартные репозитории предоставляют способ хранения ваших личных пакетов и обмена ими между другими приложениями.
Создайте стандартный репозиторий Maven.
В 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 — Реестр артефактов — Репозитории и обратите внимание на свой недавно созданный репозиторий Maven с именем container-dev-java-repo . Если вы щелкнете по нему, то увидите, что в данный момент он пуст.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Должен быть получен ответ, аналогичный следующему.
Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'
Настройка Maven для реестра артефактов
Выполните следующую команду, чтобы вывести конфигурацию репозитория, которую необходимо добавить в ваш Java-проект:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Предыдущая команда возвращает XML-файл, который будет добавлен в pom.xml вашего проекта.
- В разделе «Репозитории» указывается, куда Maven может загружать удаленные артефакты для использования текущим проектом.
- В разделе distributionManagement указывается, в какой удаленный репозиторий проект будет отправлять данные при развертывании.
- В разделе расширений добавлен модуль artifactregistry-maven-wagon, который включает в себя слой аутентификации и транспортный уровень, необходимые для подключения к реестру артефактов.
- Примечание: Расширения могут находиться в файлах pom.xml или extensions.xml. В случаях, когда проект зависит от родительского проекта, доступ к этим зависимостям осуществляется до загрузки остальных записей в pom.xml. Чтобы гарантировать доступ родительского проекта к расширению, его можно поместить в файл extensions.xml, который загружается до pom.xml, делая его доступным для родительских зависимостей.
Скопируйте три раздела, затем откройте файл pom.xml в редакторе Cloud Shell и добавьте полученные настройки в конец файла, сразу после закрывающего тега project .
Совет: В Cloudshell выполните следующую команду в терминале, чтобы открыть редактор в текущем каталоге.
cloudshell workspace .
Пример: (названия ваших проектов в URL-адресах будут отличаться)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Загрузите свой Java-пакет в реестр артефактов.
После настройки Artifact Registry в Maven вы можете использовать Artifact Registry для хранения Java-JAR-файлов, которые будут использоваться другими проектами в вашей организации.
Выполните следующую команду, чтобы загрузить ваш Java-пакет в реестр артефактов:
mvn deploy -DskipTests
Если вы хотите запустить эту команду снова, обязательно увеличьте номер версии в файле pom.xml.
Проверьте наличие пакета Java в реестре артефактов.
Перейдите в Cloud Console - Artifact Registry - Repositorys. Щелкните по container-dev-java-repo и убедитесь, что там присутствует бинарный артефакт hello-world :

3. Удаленные репозитории
Удаленные репозитории предоставляют возможность кэшировать пакеты сторонних разработчиков для повышения надежности и безопасности.
Создайте удалённый репозиторий
Примечание: Подробную информацию об аутентификации и настройке см. в документации к продукту.
В Cloud Shell выполните следующую команду, чтобы создать удаленный репозиторий для артефактов Maven Central:
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Проверьте репозиторий в консоли.
Перейдите в Cloud Console - Artifact Registry - Repositorys. Щелкните по maven-central-cache и обратите внимание, что он создан и в данный момент пуст.
Проверьте репозиторий в терминале.
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Интегрируйте репозиторий в свой проект.
Выполните следующую команду, чтобы вывести конфигурацию репозитория, которую необходимо добавить в ваш Java-проект:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Добавьте раздел `repository` в ваш файл `pom.xml`. Убедитесь, что вы не копируете внешний тег `<repositories>` из выходного файла.
Измените идентификатор (ID) нового добавленного репозитория на "central", чтобы каждая запись в репозитории имела уникальный идентификатор.
Пример: (названия ваших проектов в URL-адресах будут отличаться)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Выполните следующие команды в терминале, чтобы создать файл extensions.xml для вашего проекта, чтобы использовать основной механизм расширений и обеспечить возможность Maven разрешать родительские или плагинные зависимости из реестра артефактов.
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
Загрузите зависимости из удаленного репозитория.
Для компиляции приложения с использованием удаленного репозитория выполните следующую команду:
rm -rf ~/.m2/repository
mvn compile
Проверьте пакеты в консоли.
Перейдите в Cloud Console - Artifact Registry - Repositorys. Щелкните по maven-central-cache и убедитесь, что бинарные артефакты кэшированы там:

4. Виртуальные репозитории
Виртуальные репозитории выступают в качестве интерфейса для доступа к нескольким репозиториям через единую конфигурацию. Это упрощает настройку клиентских приложений для пользователей ваших артефактов и повышает безопасность, снижая риск атак, связанных с путаницей зависимостей .
Создайте файл политики.
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
Создайте виртуальное хранилище.
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
Интегрируйте репозиторий в свой проект.
Выполните следующую команду, чтобы вывести конфигурацию репозитория, которую необходимо добавить в ваш Java-проект:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Замените весь раздел repositories в вашем pom-файле на единственный раздел virtual repositories из выходного файла.
Пример: (названия ваших проектов в URL-адресах будут отличаться)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Загрузите зависимости из виртуального репозитория.
Поскольку виртуальный репозиторий является сквозным и не будет хранить никаких реальных пакетов, для наглядной демонстрации процесса вам нужно будет удалить созданный ранее репозиторий maven-central-cache и создать его заново, чтобы начать с пустого репозитория.
Выполните следующие команды, чтобы пересоздать репозиторий кэша.
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Вы можете просмотреть пустой репозиторий в консоли. Перейдите в Cloud Console - Artifact Registry - Repositorys.
Теперь задействуйте виртуальный репозиторий, собрав свой проект с помощью следующей команды.
rm -rf ~/.m2/repository
mvn compile
Проверьте пакеты в консоли.
Перейдите в Cloud Console - Artifact Registry - Repositorys. Щелкните maven-central-cache и убедитесь, что бинарные артефакты были настроены на получение из виртуального репозитория, но в конечном итоге были получены из maven-central-cache :

5. Поздравляем!
Поздравляем, вы завершили практическое занятие!
Что вы уже рассмотрели
- Используйте стандартные репозитории для развертывания ваших частных пакетов.
- Использовал удалённые репозитории для кэширования пакетов Maven Central.
- Использовал виртуальные репозитории для объединения нескольких исходных репозиториев в одной конфигурации.
Уборка
Выполните следующую команду, чтобы удалить проект.
gcloud projects delete ${PROJECT_ID}
—
Последнее обновление: 22.03.2023