1. Обзор
Реестр артефактов позволяет хранить различные типы артефактов, создавать несколько репозиториев в одном проекте и связывать определенный регион или несколько регионов с каждым репозиторием. Существует несколько режимов хранилища. Каждый режим служит своей цели. На следующей диаграмме показан один из многих возможных способов совместного использования репозиториев в разных режимах. На диаграмме показан рабочий процесс в двух проектах Google Cloud. В проекте разработки разработчики создают приложение Java. В отдельном проекте среды выполнения другая сборка создает образ контейнера с приложением для развертывания в Google Kubernetes Engine.
В ходе этой лабораторной работы вы научитесь выполнять следующие задачи.
- Используйте стандартные репозитории для развертывания ваших частных пакетов.
- Используйте удаленные репозитории для кэширования центральных пакетов maven.
- Используйте виртуальные репозитории для объединения нескольких исходящих репозиториев в одной конфигурации.
Самостоятельная настройка среды
- Войдите в 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)')
Включить 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 Console — Реестр артефактов — Репозитории и обратите внимание на только что созданный репозиторий 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 в реестр артефактов.
Настроив реестр артефактов в Maven, вы теперь можете использовать реестр артефактов для хранения файлов JAR Java для использования другими проектами в вашей организации.
Выполните следующую команду, чтобы загрузить пакет Java в реестр артефактов:
mvn deploy -DskipTests
Если вы хотите запустить эту команду еще раз, обязательно увеличьте версию в pom.xml.
Проверьте пакет Java в реестре артефактов.
Перейдите в Cloud Console — Реестр артефактов — Репозитории. Щелкните 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 — Реестр артефактов — Репозитории. Щелкните 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
Добавьте раздел репозитория в ваш pom.xml. Обязательно не копируйте внешний тег <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/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 — Реестр артефактов — Репозитории. Щелкните 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
Замените весь раздел репозиториев в вашем pom одним разделом виртуальных репозиториев из вывода.
Пример: (названия ваших проектов в 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 — Реестр артефактов — Хранилища.
Теперь воспользуемся виртуальным репозиторием, создав свой проект с помощью следующей команды:
rm -rf ~/.m2/repository
mvn compile
Просмотрите пакеты в консоли
Перейдите в Cloud Console — Реестр артефактов — Репозитории. Щелкните maven-central-cache
и убедитесь, что двоичные артефакты были настроены для извлечения из виртуального репозитория, но в конечном итоге были извлечены из maven-central-cache
:
5. Поздравляем!
Поздравляем, вы завершили работу над кодом!
Что вы рассмотрели
- Используемые стандартные репозитории для развертывания ваших частных пакетов.
- Использовались удаленные репозитории для кэширования центральных пакетов maven.
- Использовались виртуальные репозитории для объединения нескольких исходящих репозиториев в одной конфигурации.
Очистка
Запустите следующую команду, чтобы удалить проект
gcloud projects delete ${PROJECT_ID}
—
Последнее обновление: 22.03.23.