1. Przegląd
Artifact Registry umożliwia przechowywanie różnych typów artefaktów, tworzenie wielu repozytoriów w jednym projekcie i przypisywanie do każdego repozytorium określonego regionu lub wielu regionów. Istnieje kilka trybów repozytorium. Każdy tryb służy do innego celu. Ten diagram pokazuje jeden z wielu możliwych sposobów używania repozytoriów w różnych trybach. Diagram przedstawia przepływ pracy w 2 projektach Google Cloud. W projekcie deweloperskim programiści tworzą aplikację w Javie. W osobnym projekcie środowiska wykonawczego inna kompilacja tworzy obraz kontenera z aplikacją do wdrożenia w Google Kubernetes Engine.

Z tego modułu nauczysz się:
- Używanie standardowych repozytoriów do wdrażania pakietów prywatnych
- Używanie zdalnych repozytoriów do buforowania pakietów z Maven Central
- Używanie repozytoriów wirtualnych do łączenia wielu repozytoriów nadrzędnych w jednej konfiguracji
Samodzielne konfigurowanie środowiska
- Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.



- Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, który nie jest używany przez interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
- Identyfikator projektu jest unikalny we wszystkich projektach Google Cloud i nie można go zmienić po ustawieniu. Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie musisz się nim przejmować. W większości ćwiczeń z programowania musisz odwoływać się do identyfikatora projektu (zwykle jest on oznaczony jako
PROJECT_ID). Jeśli wygenerowany identyfikator Ci się nie podoba, możesz wygenerować inny losowy identyfikator. Możesz też spróbować własnej nazwy i sprawdzić, czy jest dostępna. Po tym kroku nie można go zmienić i będzie obowiązywać przez cały czas trwania projektu. - Warto wiedzieć, że istnieje też trzecia wartość, czyli numer projektu, z której korzystają niektóre interfejsy API. Więcej informacji o tych 3 wartościach znajdziesz w dokumentacji.
- Następnie musisz włączyć płatności w konsoli Cloud, aby korzystać z zasobów i interfejsów API Google Cloud. Ukończenie tego laboratorium nie powinno wiązać się z dużymi kosztami, a nawet z żadnymi. Aby wyłączyć zasoby i uniknąć naliczania opłat po zakończeniu tego samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
Konfiguracja Workspace
Konfigurowanie gcloud
W Cloud Shell ustaw identyfikator projektu i numer projektu. Zapisz je jako zmienne PROJECT_ID i PROJECT_NUMBER.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Włącz interfejsy API
gcloud services enable artifactregistry.googleapis.com
Kopiowanie repozytorium
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Standardowe repozytoria
Standardowe repozytoria umożliwiają przechowywanie pakietów prywatnych i udostępnianie ich w innych aplikacjach.
Tworzenie standardowego repozytorium Maven
Aby utworzyć repozytorium artefaktów Javy, uruchom w Cloud Shell to polecenie:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Jeśli pojawi się prośba o autoryzację Cloud Shell, kliknij Autoryzuj.
Otwórz konsolę Google Cloud – Artifact Registry – Repozytoria i zwróć uwagę na nowo utworzone repozytorium Maven o nazwie container-dev-java-repo. Jeśli je klikniesz, zobaczysz, że jest ono obecnie puste.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Powinna zwrócić odpowiedź podobną do tej:
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'
Konfigurowanie Mavena na potrzeby Artifact Registry
Uruchom to polecenie, aby wyświetlić konfigurację repozytorium do dodania do projektu w Javie:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
Poprzednie polecenie zwraca kod XML, który należy dodać do pliku pom.xml projektu.
- Sekcja repositories określa, skąd Maven może pobierać zdalne artefakty do użycia w bieżącym projekcie.
- Sekcja distributionManagement określa, do którego zdalnego repozytorium projekt będzie przesyłany po wdrożeniu.
- Sekcja extensions dodaje artifactregistry-maven-wagon, który umożliwia uwierzytelnianie i warstwę transportową potrzebną do połączenia z Artifact Registry.
- Uwaga: rozszerzenia mogą znajdować się w plikach pom.xml lub extensions.xml. W przypadku, gdy projekt zależy od projektu nadrzędnego, zależności te są dostępne przed załadowaniem pozostałych wpisów w pliku pom.xml. Aby zapewnić rodzicowi dostęp do rozszerzenia, można je umieścić w pliku extensions.xml, który jest wczytywany przed plikiem pom.xml, dzięki czemu jest dostępny dla zależności rodzica.
Skopiuj 3 sekcje, a potem otwórz plik pom.xml w edytorze Cloud Shell i dodaj zwrócone ustawienia na końcu pliku, tuż przed zamykającym tagiem project.
Wskazówka: w Cloud Shell uruchom w terminalu to polecenie, aby otworzyć edytor w bieżącym katalogu.
cloudshell workspace .
Przykład: (nazwy projektów w Twoich adresach URL będą inne)
...
<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>
Przesyłanie pakietu Java do Artifact Registry
Po skonfigurowaniu Artifact Registry w Maven możesz używać Artifact Registry do przechowywania plików JAR w języku Java, które będą wykorzystywane przez inne projekty w Twojej organizacji.
Aby przesłać pakiet Java do Artifact Registry, uruchom to polecenie:
mvn deploy -DskipTests
Jeśli chcesz ponownie uruchomić to polecenie, zwiększ wersję w pliku pom.xml.
Sprawdzanie pakietu Java w Artifact Registry
Otwórz konsolę Cloud – Artifact Registry – Repozytoria. Kliknij container-dev-java-repo i sprawdź, czy jest tam artefakt binarny hello-world:

3. Zdalne repozytoria
Zdalne repozytoria umożliwiają buforowanie pakietów innych firm w celu zwiększenia niezawodności i bezpieczeństwa.
Tworzenie repozytorium zdalnego
Uwaga: szczegółowe informacje o uwierzytelnianiu i konfiguracji znajdziesz w dokumentacji produktu.
Aby utworzyć zdalne repozytorium artefaktów Maven Central, uruchom w Cloud Shell to polecenie:
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
Sprawdzanie repozytorium w konsoli
Otwórz konsolę Cloud – Artifact Registry – Repozytoria. Kliknij maven-central-cache. Zobaczysz, że repozytorium zostało utworzone i jest obecnie puste.
Sprawdź repozytorium w terminalu
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Integrowanie repozytorium z projektem
Uruchom to polecenie, aby wyświetlić konfigurację repozytorium do dodania do projektu w Javie:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Dodaj sekcję repozytorium do pliku pom.xml. Nie kopiuj zewnętrznego tagu <repositories> z danych wyjściowych.
Zmień identyfikator nowo dodanego repozytorium na „central”, aby każdy wpis w repozytorium miał unikalny identyfikator.
Przykład: (nazwy projektów w Twoich adresach URL będą inne)
...
<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>
Uruchom w terminalu te polecenia, aby utworzyć extensions.xml dla projektu. Aby użyć mechanizmu rozszerzeń podstawowych, upewnij się, że Maven może rozwiązywać zależności nadrzędne lub zależności wtyczek z Artifact Registry.
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
Pobieranie zależności ze zdalnego repozytorium
Aby skompilować aplikację za pomocą repozytorium zdalnego, uruchom to polecenie:
rm -rf ~/.m2/repository
mvn compile
Sprawdzanie pakietów w konsoli
Otwórz konsolę Cloud – Artifact Registry – Repozytoria. Kliknij maven-central-cache i sprawdź, czy znajdują się tam binarne artefakty w pamięci podręcznej:

4. Wirtualne repozytoria
Wirtualne repozytoria działają jako interfejs umożliwiający dostęp do wielu repozytoriów za pomocą jednej konfiguracji. Upraszcza to konfigurację klienta dla użytkowników Twoich artefaktów i zwiększa bezpieczeństwo, ponieważ ogranicza ataki polegające na myleniu zależności.
Tworzenie pliku zasad
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
Tworzenie repozytorium wirtualnego
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
Integrowanie repozytorium z projektem
Uruchom to polecenie, aby wyświetlić konfigurację repozytorium do dodania do projektu w Javie:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Zastąp całą sekcję repozytoriów w pliku pom sekcją repozytoriów wirtualnych z danych wyjściowych.
Przykład: (nazwy projektów w Twoich adresach URL będą inne)
...
<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>
Pobieranie zależności z repozytorium wirtualnego
Repozytorium wirtualne jest tylko pośrednikiem i nie przechowuje żadnych rzeczywistych pakietów. Aby wyraźnie zademonstrować ten proces, usuń utworzone wcześniej repozytorium maven-central-cache i utwórz je ponownie, aby zacząć od pustego repozytorium.
Aby ponownie utworzyć repozytorium pamięci podręcznej, uruchom te polecenia:
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
Puste repozytorium możesz sprawdzić w konsoli. Otwórz konsolę Cloud – Artifact Registry – Repozytoria.
Teraz przetestuj wirtualne repozytorium, kompilując projekt za pomocą tego polecenia:
rm -rf ~/.m2/repository
mvn compile
Sprawdzanie pakietów w konsoli
Otwórz konsolę Cloud – Artifact Registry – Repozytoria. Kliknij maven-central-cache i sprawdź, czy artefakty binarne zostały skonfigurowane tak, aby pobierać dane z repozytorium wirtualnego, ale ostatecznie zostały pobrane z maven-central-cache:

5. Gratulacje!
Gratulacje! Codelab został ukończony.
Omówione zagadnienia
- Używanie standardowych repozytoriów do wdrażania pakietów prywatnych
- Używanie repozytoriów zdalnych do buforowania pakietów z Maven Central
- Używanie repozytoriów wirtualnych do łączenia wielu repozytoriów nadrzędnych w jednej konfiguracji
Czyszczenie
Aby usunąć projekt, uruchom to polecenie:
gcloud projects delete ${PROJECT_ID}
–
Ostatnia aktualizacja: 22.03.2023