Szczegółowe informacje o Artifact Registry

Szczegółowe informacje o Artifact Registry

Informacje o tym ćwiczeniu (w Codelabs)

subjectOstatnia aktualizacja: gru 4, 2024
account_circleAutorzy: Giovanni Galloro, Daniel Strebel

1. Omówienie

Artifact Registry to w pełni zarządzany menedżer pakietów, który udostępnia ujednolicony sposób zarządzania obrazami kontenerów OCI i pakietami językowymi (np. Maven i npm).

Rejester artefaktów jest w pełni zintegrowany z szerokim zakresem innych usług Google Cloud, jak w tych przykładach:

  • Cloud Build może przesyłać artefakty obrazów bezpośrednio do Artifact Registry.
  • Cloud Deploy może wdrażać obrazy z rejestru artefaktów bezpośrednio do różnych środowisk uruchomieniowych.
  • Udostępnia ona obrazy środowisk uruchomieniowych kontenerów, takich jak Cloud Run i GKE, oraz umożliwia zaawansowane funkcje optymalizacji wydajności, takie jak strumieniowanie obrazów.
  • Rejestr artefaktów może służyć jako punkt wykrywania dla analizy artefaktów, aby stale monitorować znane luki w zabezpieczeniach.
  • Cloud IAM zapewnia spójną i szczegółową kontrolę dostępu do artefaktów oraz uprawnień.

W tym laboratorium omówimy wiele z tych funkcji w ramach praktycznego samouczka.

Czego się nauczysz

Jakie są cele edukacyjne tego laboratorium?

  • Utwórz oddzielne repozytoria dla kontenerów i pakietów językowych
  • Tworzenie i używanie obrazów kontenerów za pomocą Artifact Registry
  • Korzystanie z rejestru artefaktów do analizowania stanu zabezpieczeń i treści Twoich artefaktów
  • Konfigurowanie i używanie Artifact Registry do obsługi zależności Maven w Javie

2. Konfiguracja i wymagania

Konfigurowanie środowiska we własnym tempie

  1. 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ć.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google. Zawsze możesz ją zaktualizować.
  • Identyfikator projektu jest niepowtarzalny w ramach wszystkich projektów Google Cloud i nie można go zmienić (po ustawieniu). Konsola Cloud automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz podać identyfikator projektu (zwykle oznaczony jako PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego adresu e-mail, aby sprawdzić, czy jest on dostępny. Nie można go zmienić po wykonaniu tego kroku. Pozostanie on do końca projektu.
  • Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, której używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten samouczek nie będzie kosztowne, a być może nawet bezpłatne. Aby wyłączyć zasoby i uniknąć obciążenia opłatami po zakończeniu samouczka, możesz usunąć utworzone zasoby lub usunąć 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.

Konfigurowanie gcloud

W Cloud Shell ustaw identyfikator i numer projektu. Zapisz je jako zmienne PROJECT_IDPROJECT_NUMBER.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

Włączanie Usług Google

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com \
  binaryauthorization.googleapis.com \
  cloudbuild.googleapis.com

Pobieranie kodu źródłowego

Kod źródłowy tego laboratorium znajduje się w organizacji GoogleCloudPlatform na GitHubie. Skopiuj go za pomocą poniższego polecenia.

git clone https://github.com/GoogleCloudPlatform/java-docs-samples

3. Przekazywanie obrazów kontenerów

Tworzenie repozytorium Dockera w Artifact Registry

Jak już wspomnieliśmy, Artifact Registry obsługuje różne formaty repozytoriów, które umożliwiają zarządzanie obrazami kontenerów i pakietami językowymi. Interakcje z różnymi typami repozytoriów artefaktów są zdefiniowane w specyfikacjach i są powszechnie stosowanymi standardami. Na przykład żądania zależności Maven różnią się od żądań zależności Node.

Aby obsługiwać specyfikacje interfejsu API artefaktu, usługa Artifact Registry musi zarządzać artefaktami w odpowiednich typach repozytoriów. Podczas tworzenia nowego repozytorium należy podać flagę --repository-format, aby wskazać typ repozytorium.

Aby utworzyć pierwsze repozytorium obrazów Dockera, uruchom w Cloud Shell to polecenie:

gcloud artifacts repositories create container-example --repository-format=docker \
--location=us-central1 --description="Example Docker repository"

Jeśli pojawi się prośba o autoryzację Cloud Shell, kliknij Autoryzuj.

Otwórz Google Cloud Console – Rejestrowanie artefaktów – Repozytoria. Zwróć uwagę na nowo utworzone repozytorium Dockera o nazwie container-example. Jeśli klikniesz je, zobaczysz, że jest ono obecnie puste.

5b854eb010e891c2.png

Konfigurowanie uwierzytelniania Dockera w Artifact Registry

Aby uzyskać dostęp do repozytorium artefaktów, musisz podać dane logowania. Zamiast konfigurować oddzielne dane logowania, możesz skonfigurować Dockera tak, aby korzystał z Twoich danych logowania gcloud.

W Cloud Shell uruchom to polecenie, aby skonfigurować Dockera tak, aby używał Google Cloud CLI do uwierzytelniania żądań do Artifact Registry w regionie us-central1:

gcloud auth configure-docker us-central1-docker.pkg.dev

Jeśli polecenie poprosi o potwierdzenie zmiany konfiguracji Dockera w Cloud Shell, naciśnij klawisz Enter.

Poznawanie przykładowej aplikacji

Przykładowa aplikacja znajduje się w repozytorium Git skopiowanym na poprzednim kroku. Przejdź do katalogu java i sprawdź kod aplikacji.

cd java-docs-samples/run/helloworld/
ls

Folder zawiera przykładową aplikację w Javie, która renderuje prostą stronę internetową. Oprócz różnych plików, które nie są istotne w tym konkretnym laboratorium, zawiera kod źródłowy w folderze src oraz plik Dockerfile, którego użyjemy do utworzenia obrazu kontenera.

Kompilowanie obrazu kontenera

Zanim będzie można przechowywać obrazy kontenerów w Artifact Registry, musisz utworzyć repozytorium.

Aby utworzyć obraz kontenera i oznaczyć go tagiem z pełną ścieżką do rejestru artefaktów, uruchom to polecenie:

docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:tag1 .

Przesyłanie obrazu kontenera do Artifact Registry

Aby przesłać obraz kontenera do utworzonego wcześniej repozytorium, uruchom to polecenie:

docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:tag1

Sprawdzanie obrazu w Artifact Registry

Otwórz konsolę Google Cloud – Artifact Registry – Repozytoria.. Otwórz repozytorium container-example i sprawdź, czy znajduje się w nim obraz java-hello-world.

88e4b26e8536afb2.png

Kliknij obraz i zwróć uwagę na obraz oznaczony etykietą tag1. Ponieważ włączyliśmy automatyczne skanowanie obrazów za pomocą usługi containerscanning.googleapis.com, możesz zobaczyć, że skanowanie pod kątem luk w zabezpieczeniach jest uruchomione lub już zakończone. Po zakończeniu procesu możesz zobaczyć liczbę wykrytych luk w zabezpieczeniach w tej wersji obrazu. W następnej sekcji omówimy luki w zabezpieczeniach i inne informacje o artefaktach.

55406d03cf0c96b8.png

4. Sprawdzanie obrazów kontenerów

Ponieważ przesłałeś/przesłałaś pierwszy obraz do repozytorium container-example, możemy przyjrzeć mu się dokładniej. Na karcie Wersje kliknij wersję, którą właśnie utworzyliśmy. Aby wyświetlić obraz w większym przybliżeniu:

44c3f28dd457ed1d.png

Górny przycisk kopiowania jest szczególnie przydatny, ponieważ umożliwia łatwy dostęp do pełnego identyfikatora URI obrazu w przypadku danej wersji obrazu, w tym do hasha SHA. Ten identyfikator URI można następnie wykorzystać do pobrania określonej wersji obrazu lub jako odwołania do obrazu w wdrożeniu Kubernetes lub usłudze Cloud Run. Aby przetestować identyfikator URI obrazu, uruchom w Cloud Shell to polecenie:

docker pull $IMAGE_URI

Zależność

Przechodząc na kartę „Zależności” u góry, zobaczysz wszystkie zależności wykryte na obrazie. Pamiętaj, że zawiera ona zależności na poziomie języka i systemu operacyjnego. Możesz też zobaczyć licencje na oprogramowanie powiązane z poszczególnymi zależnościami.

af03348529575dbc.png

Przyjrzyj się uważnie i zobaczysz, że informacje SBOM nie zostały jeszcze wypełnione. Aby wypełnić informacje o SOM dla artefaktu, możesz uruchomić to polecenie w Cloud Shell, używając pełnego identyfikatora URI obrazu, który możesz skopiować z paska nawigacyjnego u góry.

gcloud artifacts sbom export --uri $IMAGE_URI

Po odświeżeniu strony znajdziesz na niej link do automatycznie wygenerowanego pliku SBOM zapisanego w Cloud Storage. Jeśli korzystasz z SBOM w przypadku obrazów, możesz automatycznie generować SBOM dla swoich artefaktów i utworzyć część procesu CI/CD, która będzie odpowiadać za generowanie.

Badanie luk w zabezpieczeniach obrazów

Gdy klikniesz kartę „Wady” u góry widoku, zobaczysz wszystkie luki w zabezpieczeniach wykryte na obrazie. Oprócz podsumowania podanego u góry strony w tabeli u dołu znajdziesz pełną listę luk w zabezpieczeniach. Każdy wiersz zawiera link do biuletynu CVE, który wskazuje na jego ważność i pakiet, z którego pochodzi. W przypadku luk, dla których dostępna jest poprawka, zawiera ona również instrukcje dotyczące aktualizacji zależności, które pozwolą usunąć lukę.

fda03e6fd758ddef.png

5. Wirtualne i zdalne repozytoria

W poprzedniej sekcji do wypychania i ściągania obrazów użyliśmy pojedynczego repozytorium obrazów. Jest to świetne rozwiązanie w przypadku mniejszych zastosowań, ale wiąże się z pewnymi wyzwaniami, zwłaszcza w większych organizacjach z różnymi zespołami, które wymagają autonomii w przypadku swoich repozytoriów. Zwykle zespoły lub działy firmy mają własne repozytorium obrazów z własnymi uprawnieniami i konfiguracją. Aby uprościć korzystanie z obrazów w tych repozytoriach i chronić użytkownika przed podstawową strukturą organizacyjną, Artifact Registry udostępnia repozytoria wirtualne, które mogą agregować zasoby z wielu repozytoriów podstawowych. Architektura może wyglądać tak:

c6488dc5a6bfac3.png

Repozytorium zdalne dla Docker Hub

Docker Hub to popularna publiczna rejestracja obrazów, która hostuje wiele obrazów kontenera open source. Korzystanie bezpośrednio z publicznego repozytorium jest proste, ale wiąże się z wieloma wyzwaniami w środowisku produkcyjnym, które możemy pokonać za pomocą repozytoriów zdalnych w Artifact Registry.

Repositoria zdalne umożliwiają przekierowywanie żądań do rejestru źródłowego i przechowywanie w pamięci podręcznej obrazów. Dzięki temu nie tylko skrócisz czas pobierania obrazów, ale też nie będziesz zależny od dostępności usługi zewnętrznej i zyskasz możliwość zastosowania tych samych zasad bezpieczeństwa i dostępu, które stosujesz w przypadku własnych obrazów.

Aby utworzyć zdalne repozytorium dla Docker Hub, uruchom w Cloud Shell to polecenie:

gcloud artifacts repositories create dockerhub \
 
--repository-format=docker \
 
--mode=remote-repository \
 
--remote-docker-repo=docker-hub \
 
--location=us-central1 \
 
--description="Example Remote Repo for Docker Hub"

Na liście repozytoriów Artifact Registry powinno pojawić się dodatkowe repozytorium:

7e174a9944c5f34c.png

Aby sprawdzić, czy zdalne repozytorium może przekierowywać żądania do zdalnego repozytorium, uruchom w Cloud Shell to polecenie, aby pobrać obraz nginx:

docker pull us-central1-docker.pkg.dev/$PROJECT_ID/dockerhub/nginx:stable-alpine

Po pomyślnym pobraniu możesz też sprawdzić repozytorium w konsoli Cloud i sprawdzić, czy obraz nginx w pamięci podręcznej zawiera te same informacje o zależnościach i lukach w zabezpieczeniach, co obraz, który został przez Ciebie utworzony.

Tworzenie repozytorium wirtualnego

Stosując procesy stosowane do tej pory, możesz utworzyć wiele repozytoriów dla każdego zespołu lub firmy i wyraźnie określić własność oraz uprawnienia IAM dla każdego z nich. Możemy też tworzyć serwery proxy dla zdalnych repozytoriów, co ułatwia i ubezpiecza korzystanie z obrazów innych firm. Minusem tak dużej liczby repozytoriów jest to, że użytkownicy tych obrazów mogą mieć z tym problem. Jak deweloper może ustalić, którego repozytorium obrazów użyć podczas wdrażania?

Aby uprościć korzystanie z repozytorium i ukryć jego podrzędne repozytoria za warstwą abstrakcji, możesz utworzyć w Artifact Registry repozytorium wirtualne, używając tego polecenia w Cloud Shell:

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \
    --role roles/artifactregistry.reader

cat <<EOF > /tmp/upstream.json
[{
"id" : "hello-repo",
"repository" : "projects/$PROJECT_ID/locations/us-central1/repositories/container-example",
"priority" : 100
},{
"id" : "dockerhub",
"repository" : "projects/$PROJECT_ID/locations/us-central1/repositories/dockerhub",
"priority" : 101
}]
EOF

gcloud artifacts repositories create all-images \
    --repository-format=docker \
    --mode=virtual-repository \
    --location=us-central1 \
    --upstream-policy-file=/tmp/upstream.json \
    --description="Example Virtual Repo"

Teraz możemy pobierać obrazy z wirtualnego repozytorium bez ujawniania struktury podstawowej. Aby sprawdzić, czy wszystko działa zgodnie z oczekiwaniami, uruchom w Cloud Shell te polecenia:

docker pull us-central1-docker.pkg.dev/$PROJECT_ID/all-images/java-hello-world:tag1

docker pull us
-central1-docker.pkg.dev/$PROJECT_ID/all-images/nginx:stable-alpine

6. Wdrożenie w Cloud Run

Po utworzeniu repozytoriów i obrazu możemy teraz użyć ich w ramach wdrożenia. Aby zilustrować przykładowy przypadek użycia i uniknąć wdrażania dodatkowej infrastruktury, wdrożymy kontener w Cloud Run. W najprostszej formie wdrożenie można wykonać, uruchamiając w Cloud Shell to polecenie:

gcloud run deploy hello-world \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/all-images/java-hello-world:tag1 \
  --region us-central1 \
  --allow-unauthenticated

Po zakończeniu wdrażania wyświetli się automatycznie wygenerowany adres URL, pod którym możesz uzyskać dostęp do usługi.

Deploying container to Cloud Run service [hello-world] in project [my-project] region [us-central1]
OK Deploying... Done.                                                                      
  OK Creating Revision...                                                                  
  OK Routing traffic...
  OK Setting IAM Policy...                                                                    
Done.                                                                                      
Service [hello-world] revision [hello-world-00001-wtc] has been deployed and is serving 100 percent of traffic.
Service URL: https://hello-world-13746229022.us-central1.run.app

Jeśli otworzysz ten adres URL w nowej karcie przeglądarki, powinien wyświetlić się komunikat „Hello World”.

852a8748c1543736.png

7. Wzmocnienie bezpieczeństwa łańcucha dostaw

Teraz, gdy obraz kontenera został wdrożony, warto zastanowić się, jak możemy wzmocnić nasz łańcuch dostaw. W poprzedniej sekcji omówiliśmy, jak analiza kontenera w Artifact Registry dostarcza informacji o bibliotekach i licencjach używanych w obrazie. Nadal jednak możliwe jest, że osoby o złośliwych zamiarach wprowadzą szkodliwe treści do Twojego obrazu w łańcuchu dostawy. W tej sekcji omówimy, jak można użyć ramy SLSA do wprowadzenia uwierzytelniania artefaktów kompilacji, a nawet wykorzystać podpisy kryptograficzne samych artefaktów, aby zapewnić, że tylko zaufane artefakty będą mogły być wdrażane w środowisku wykonawczym Cloud Run.

Weryfikacja SLSA za pomocą Cloud Build

Ramy SLSA zapewniają różne poziomy dowodów dla artefaktów łańcucha dostaw. Specyfikacja i wdrożenie mogą na pierwszy rzut oka wydawać się przytłaczające, ale w Cloud Build tworzenie oświadczenia SLSA jest tak proste jak dodanie specyfikacji cloudbuild.yaml z wartością requestedVerifyOption ustawioną na VERIFIED.

W przypadku naszej aplikacji możemy uruchomić w Cloud Shell to polecenie, aby utworzyć plik cloudbuild.yaml w folderze helloworld.

cat <<EOF > cloudbuild.yaml
steps
:
- name: 'gcr.io/cloud-builders/docker'
  args
: ['build', '-t', '\$_IMAGE_URI', '.']
- name: 'gcr.io/cloud-builders/docker'
  args
: ['push', '\$_IMAGE_URI']
images
:
- '\$_IMAGE_URI'
options
:
  requestedVerifyOption
: VERIFIED
substitutions
:
  _IMAGE_URI
: us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:latest
EOF

Teraz utwórz nowe zadanie Cloud Build, które skompiluje nową wersję obrazu Hello World w języku Java. Aby to zrobić, uruchom to polecenie w Cloud Shell.

gcloud builds submit --substitutions=_IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:cloud-build

Po zakończeniu kompilacji możesz przejść do interfejsu Cloud Build w konsoli Google Cloud i wyświetlić poziom SLSA, który osiągnąłeś, otwierając kompilację i sprawdzając artefakty kompilacji w sekcji Podsumowanie kompilacji. Na obrazie znajduje się przycisk, który umożliwia wyświetlenie „Statystyk zabezpieczeń”. Po kliknięciu zobaczysz potwierdzenie SLSA oraz znane raporty o lukach w zabezpieczeniach, które wcześniej pojawiły się w interfejsie rejestru artefaktów, gdy przesłaliśmy lokalną wersję.

f6154004bfcddc16.png

Źródło danych SLSA dla obrazu można też pobrać, wykonując w Cloud Shell to polecenie:

gcloud artifacts docker images describe \
"us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:cloud-build" \
 
--show-provenance

Wymaganie pochodzenia w Cloud Build za pomocą autoryzacji plików binarnych

Dzięki użyciu potoku Cloud Build można mieć pewność, że wszystkie obrazy wdrażane w produkcji zostały utworzone za pomocą tego programowalnego i powtarzalnego środowiska kompilacji.

Właśnie w tym miejscu pojawia się autoryzacja plików binarnych. Umożliwia to umieszczenie bramy przed środowiskiem uruchomieniowym kontenera, która sprawdza obraz kontenera i weryfikuje istnienie zaufanego poświadczenia. Jeśli nie zostanie znaleziona żadna weryfikacja, w zależności od konfiguracji usługa utworzy wpisy w dzienniku kontrolnym lub całkowicie zablokuje wdrożenie.

Aby zmienić domyślną konfigurację autoryzacji binarnej w naszym projekcie tak, aby wymagała wbudowanego poświadczenia wydanego przez Cloud Run, uruchamiamy w Cloud Shell to polecenie:

cat << EOF > /tmp/policy.yaml
defaultAdmissionRule:
 
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
 
evaluationMode: REQUIRE_ATTESTATION
 
requireAttestationsBy:
 
- projects/$PROJECT_ID/attestors/built-by-cloud-build
name: projects/$PROJECT_ID/policy
EOF

gcloud container binauthz policy import /tmp/policy.yaml

Oczywiście możesz też dodać własne certyfikatory, ale nie jest to objęte zakresem tego CodeLab. Możesz to zrobić jako dodatkowe ćwiczenie poza programem.

Aby wymusić uwierzytelnianie binarne w usłudze Cloud Run, uruchom w Cloud Shell to polecenie:

gcloud run services update hello-world \
  --region us-central1 \
  --binary-authorization=default

Przetestujmy, czy usługa Binary Authorization została prawidłowo zastosowana, ponownie wdrażając obraz utworzony lokalnie.

gcloud run deploy hello-world \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/all-images/java-hello-world:tag1 \
  --region us-central1

Zgodnie z oczekiwaniami powinien pojawić się komunikat o błędzie, który wyjaśnia, dlaczego nie można wdrożyć obrazu.

Image us-central1-docker.pkg.dev/my-project/all-images/java-hello-world@sha256:71eebbf04bf7d1d023e5de5e18f786ea3b8b6411bf64c8def3301c71baca0518 denied by attestor projects/my-project/attestors/built-by-cloud-build: No attestations found that were valid and signed by a key trusted by the attestor

Aby wdrożyć nową wersję w naszej usłudze Cloud Run, musimy podać obraz utworzony za pomocą Cloud Build.

gcloud run deploy hello-world \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/all-images/java-hello-world:cloud-build \
  --region us-central1

Tym razem wdrożeniu powinno się udać i powinien wyświetlić się komunikat o udanym wdrożeniu podobny do tego poniżej:

Deploying container to Cloud Run service [hello-world] in project [my-project] region [us-central1]
OK Deploying... Done.                                                                      
  OK Creating Revision...                                                                  
  OK Routing traffic...                                                                    
Done.                                                                                      
Service [hello-world] revision [hello-world-00005-mq4] has been deployed and is serving 100 percent of traffic.
Service URL: https://hello-world-13746229022.us-central1.run.app

8. Zarządzanie pakietami językowymi Maven w Javie

W tej sekcji dowiesz się, jak skonfigurować repozytorium Java w Artifact Registry i przesłać do niego pakiety, aby wykorzystywać je w różnych aplikacjach.

Tworzenie repozytorium pakietów Maven

Aby utworzyć repozytorium dla artefaktów Java, uruchom w Cloud Shell to polecenie:

gcloud artifacts repositories create java-repo \
   
--repository-format=maven \
   
--location=us-central1 \
   
--description="Example Java Maven Repo"

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 java-repo. Po kliknięciu tego repozytorium zobaczysz, że jest ono obecnie puste.

Konfigurowanie uwierzytelniania w repozytorium artefaktów

Użyj tego polecenia, aby zaktualizować dobrze znaną lokalizację domyślnych danych logowania aplikacji (ADC) za pomocą danych logowania na koncie użytkownika, dzięki czemu pomocnik danych logowania rejestru artefaktów będzie mógł uwierzytelniać się za ich pomocą podczas łączenia z repozytoriami:

gcloud auth login --update-adc

Konfigurowanie Mavena w Artifact Registry

Aby wydrukować konfigurację repozytorium, którą chcesz dodać do projektu w Javie, uruchom to polecenie:

gcloud artifacts print-settings mvn \
    --repository=java-repo \
    --location=us-central1 | tee config.xml

Otwórz plik pom.xml w edytorze Cloud Shell, uruchamiając w Cloud Shell to polecenie w katalogu helloworld:

cloudshell edit pom.xml

i dodać zwrócone ustawienia do odpowiednich sekcji w pliku.

Zaktualizuj sekcję distributionManagement

<distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/java-repo</url>
   </repository>
</distributionManagement>

Zaktualizuj sekcję Repozytoria.

 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/java-repo</url>
     <releases>
       <enabled>true</enabled>
     </releases>
     <snapshots>
       <enabled>true</enabled>
     </snapshots>
   </repository>
 </repositories>

Zaktualizuj sekcję rozszerzenia w sekcji kompilacja.

   <extensions>
     <extension>
       <groupId>com.google.cloud.artifactregistry</groupId>
       <artifactId>artifactregistry-maven-wagon</artifactId>
       <version>2.1.0</version>
     </extension>
   </extensions>

Oto przykład pełnego pliku. Pamiętaj, aby zastąpić ciąg znaków <PROJECT> identyfikatorem projektu.

<?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>
 <groupId>com.example.run</groupId>
 <artifactId>helloworld</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <parent>
   <groupId>com.google.cloud.samples</groupId>
   <artifactId>shared-configuration</artifactId>
   <version>1.2.0</version>
 </parent>
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-dependencies</artifactId>
       <version>${spring-boot.version}</version>
       <type>pom</type>
       <scope>import</scope>
     </dependency>
   </dependencies>
 </dependencyManagement>
 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
   <maven.compiler.target>17</maven.compiler.target>
   <maven.compiler.source>17</maven.compiler.source>
   <spring-boot.version>3.2.2</spring-boot.version>
 </properties>
 <dependencies>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
   </dependency>
   <dependency>
     <groupId>org.junit.vintage</groupId>
     <artifactId>junit-vintage-engine</artifactId>
     <scope>test</scope>
   </dependency>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <scope>test</scope>
   </dependency>
 </dependencies>
 <!-- [START Artifact Registry Config] -->
 <distributionManagement>
   <snapshotRepository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/java-repo</url>
   </snapshotRepository>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/java-repo</url>
   </repository>
 </distributionManagement>

 <repositories>
   <repository>
     <id>artifact-registry</id>
     <url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/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>
 <!-- [END Artifact Registry Config] -->

   <plugins>
     <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
       <version>${spring-boot.version}</version>
       <executions>
         <execution>
           <goals>
             <goal>repackage</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
     <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>jib-maven-plugin</artifactId>
       <version>3.4.0</version>
       <configuration>
         <to>
           <image>gcr.io/PROJECT_ID/helloworld</image>
         </to>
       </configuration>
     </plugin>
   </plugins>
 </build>
 </project>

Przesyłanie pakietu Java do Artifact Registry

Po skonfigurowaniu repozytorium Artifact Registry w Maven możesz używać tego repozytorium do przechowywania plików Java Jars, aby były dostępne dla innych projektów w Twojej organizacji.

Aby przesłać pakiet Java do Artifact Registry, uruchom to polecenie:

mvn deploy

Sprawdzanie pakietu Javy w Artifact Registry

Otwórz Cloud Console – Artifact Registry – Repositories (Konsola Cloud – Artifact Registry – Repozytoria). Kliknij java-repo i sprawdź, czy znajduje się tam binarny element helloworld:

a95d370ee0fd9af0.png

9. Gratulacje!

Gratulacje! Masz ukończoną tę lekcję.

Omówione zagadnienia

  • Utworzono repozytoria dla kontenerów i pakietów językowych
  • Zarządzanie obrazami kontenerów za pomocą Artifact Registry
  • Zintegrowana usługa Artifact Registry z Cloud Code
  • skonfigurować Maven do używania Artifact Registry do obsługi zależności Javy.

Czyszczenie

Aby usunąć cały projekt, uruchom w Cloud Shell to polecenie:

gcloud projects delete $PROJECT_ID