1. Ringkasan
Artifact Registry adalah pengelola paket yang terkelola sepenuhnya dan menyediakan alat terpadu untuk mengelola image container OCI dan paket bahasa (seperti Maven dan npm).
Artifact Registry terintegrasi sepenuhnya dengan berbagai layanan Google Cloud lainnya seperti dalam contoh berikut:
- Cloud Build dapat langsung mengupload artefak image ke Artifact Registry.
- Cloud Deploy dapat men-deploy Image Artifact Registry langsung ke berbagai lingkungan runtime.
- Layanan ini menyediakan image ke runtime container seperti Cloud Run dan GKE serta memungkinkan kemampuan pengoptimalan performa lanjutan seperti streaming image.
- Artifact Registry dapat berfungsi sebagai titik deteksi untuk Artifact Analysis guna terus memantau kerentanan yang diketahui.
- Cloud IAM memberikan kontrol yang konsisten dan terperinci atas akses dan izin artefak.
Lab ini akan memandu Anda mempelajari banyak fitur tersebut dalam bentuk tutorial interaktif.
Yang akan Anda pelajari
Apa tujuan pembelajaran lab ini?
- Membuat repositori yang berbeda untuk Container dan Paket Bahasa
- Membuat dan menggunakan image container dengan Artifact Registry
- Menggunakan Artifact Registry untuk menganalisis postur keamanan dan konten artefak Anda
- Mengonfigurasi dan menggunakan Artifact Registry untuk Dependensi Maven Java
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.



- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Menyiapkan gcloud
Di Cloud Shell, tetapkan project ID dan nomor project Anda. Simpan sebagai variabel PROJECT_ID dan PROJECT_NUMBER.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
Mengaktifkan Layanan 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
Mendapatkan kode sumber
Kode sumber untuk lab ini terletak di organisasi GoogleCloudPlatform di GitHub. Buat clone dengan perintah di bawah.
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
3. Mengirim Image Container
Buat repositori Docker di Artifact Registry.
Seperti yang disebutkan sebelumnya, Artifact Registry mendukung berbagai format repositori yang memungkinkan Anda mengelola image container dan paket bahasa. Interaksi dengan berbagai jenis repositori artefak ditentukan dalam spesifikasi dan merupakan standar yang banyak digunakan. Misalnya, permintaan untuk dependensi Maven berbeda dengan permintaan untuk dependensi Node.
Untuk mendukung spesifikasi API artefak tertentu, Artifact Registry perlu mengelola artefak Anda dalam jenis repositori yang sesuai. Saat membuat repositori baru, Anda meneruskan flag --repository-format untuk menunjukkan jenis repositori.
Untuk membuat repositori pertama bagi image Docker, jalankan perintah berikut dari Cloud Shell:
gcloud artifacts repositories create container-example --repository-format=docker \
--location=us-central1 --description="Example Docker repository"
Klik Authorize jika perintah otorisasi Cloud Shell muncul
Buka Konsol Google Cloud - Artifact Registry - Repositories dan perhatikan repositori Docker yang baru dibuat bernama container-example. Jika Anda mengkliknya, Anda akan melihat bahwa repositori tersebut kosong saat ini

Mengonfigurasi autentikasi Docker ke Artifact Registry
Saat terhubung ke Artifact Registry, kredensial diperlukan untuk memberikan akses. Daripada menyiapkan kredensial terpisah, Docker dapat dikonfigurasi untuk menggunakan kredensial gcloud Anda dengan lancar.
Dari Cloud Shell, jalankan perintah berikut untuk mengonfigurasi Docker agar menggunakan Google Cloud CLI untuk mengautentikasi permintaan ke Artifact Registry di region us-central1:
gcloud auth configure-docker us-central1-docker.pkg.dev
Jika perintah akan meminta konfirmasi untuk mengubah konfigurasi docker Cloud Shell, tekan enter.
Mempelajari Aplikasi sampel
Aplikasi contoh disediakan di repositori git yang Anda clone pada langkah sebelumnya. Ubah ke direktori java dan tinjau kode aplikasi.
cd java-docs-samples/run/helloworld/
ls
Folder ini berisi contoh aplikasi Java yang merender halaman web sederhana: selain berbagai file yang tidak relevan untuk lab khusus ini, folder ini berisi kode sumber, di folder src, dan Dockerfile yang akan kita gunakan untuk membangun image container.
Membangun Image Container
Sebelum dapat menyimpan image container di Artifact Registry, Anda harus membuatnya terlebih dahulu.
Jalankan perintah berikut untuk membangun image container dan memberinya tag dengan jalur lengkap Artifact Registry:
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:tag1 .
Mengirim Image Container ke Artifact Registry
Jalankan perintah berikut untuk mengirim image container ke repositori yang dibuat sebelumnya:
docker push us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:tag1
Meninjau image di Artifact Registry
Buka Konsol Cloud Google - Artifact Registry - Repositories. Buka repositori container-example dan verifikasi bahwa image java-hello-world ada di sana.

Klik gambar dan perhatikan gambar yang diberi tag tag1. Karena kita mengaktifkan pemindaian otomatis image melalui layanan containerscanning.googleapis.com, Anda dapat melihat bahwa Pemindaian Kerentanan sedang berjalan atau sudah selesai. Setelah selesai, Anda dapat melihat jumlah kerentanan yang terdeteksi untuk revisi gambar ini. Kita akan mempelajari kerentanan dan insight artefak lainnya di bagian berikutnya.

4. Memeriksa Image Container
Setelah Anda mengirimkan image pertama ke repositori container-example, kita dapat melihatnya secara lebih mendetail. Di tab versi, klik versi yang baru saja kita buat. Untuk menampilkan gambar secara lebih mendetail:

Tombol salin atas sangat berguna karena memberikan cara mudah untuk mengakses URI image yang sepenuhnya memenuhi syarat ke versi image tersebut, termasuk hash SHA. URI ini kemudian dapat digunakan untuk menarik versi image tertentu atau sebagai referensi image dalam Deployment Kubernetes atau Layanan Cloud Run. Untuk menguji URI gambar, Anda dapat menjalankan perintah berikut di Cloud Shell:
docker pull $IMAGE_URI
Memahami Dependensi
Dengan membuka tab "Dependencies" di bagian atas, Anda dapat melihat semua dependensi yang terdeteksi dalam gambar Anda. Perhatikan bahwa perintah ini mencantumkan dependensi di tingkat dependensi bahasa dan OS. Anda juga dapat melihat lisensi software yang dilampirkan ke setiap dependensi.

Jika Anda melihat dengan cermat, Anda dapat melihat bahwa informasi SBOM belum diisi. Untuk mengisi SOM artefak, Anda dapat menjalankan perintah berikut di Cloud Shell menggunakan URI image yang sepenuhnya memenuhi syarat yang dapat kita salin dari kolom breadcrumb di bagian atas.
gcloud artifacts sbom export --uri $IMAGE_URI
Setelah Anda memuat ulang halaman, halaman tersebut akan berisi link ke SBOM yang dibuat secara otomatis dan disimpan di Cloud Storage. Jika mengandalkan SBOM untuk image, Anda mungkin ingin membuat SBOM secara otomatis untuk artefak dan menjadikan pembuatan sebagai bagian dari pipeline CI/CD.
Mempelajari Kerentanan Image
Saat Anda mengklik tab "Kerentanan" di bagian atas tampilan, Anda dapat melihat semua kerentanan yang terdeteksi dalam image Anda. Selain ringkasan kerentanan di bagian atas, Anda dapat melihat daftar lengkap kerentanan dalam tabel di bagian bawah. Setiap baris ditautkan ke buletin CVE, yang menunjukkan tingkat keparahan dan paket asalnya. Untuk kerentanan yang tersedia perbaikannya, alat ini juga memberikan petunjuk tentang cara mengupdate dependensi untuk memperbaiki kerentanan.

5. Repositori Virtual dan Jarak Jauh
Di bagian sebelumnya, kita menggunakan satu repositori gambar untuk mengirim dan menarik gambar. Cara ini sangat cocok untuk kasus penggunaan skala kecil, tetapi menimbulkan tantangan, terutama bagi organisasi yang lebih besar dengan tim yang berbeda-beda yang memerlukan otonomi atas repositori mereka. Tim atau unit bisnis biasanya memiliki repositori gambar sendiri dengan izin dan konfigurasi sendiri. Untuk menyederhanakan penggunaan image di repositori ini dan melindungi konsumen dari struktur organisasi yang mendasarinya, Artifact Registry menyediakan repositori virtual yang dapat menggabungkan resource dari beberapa repositori yang mendasarinya. Arsitektur yang mungkin terlihat seperti ini:

Repositori Jarak Jauh untuk Docker Hub
Docker Hub adalah registry image publik yang populer dan menghosting banyak image container open source. Meskipun penggunaan repositori publik secara langsung cukup mudah, ada sejumlah tantangan di lingkungan produksi yang dapat kita atasi dengan repositori Jarak Jauh di Artifact Registry.
Repositori jarak jauh memberi Anda kemampuan untuk memproksi permintaan ke registry upstream dan meng-cache gambar di sepanjang proses. Hal ini tidak hanya mengurangi waktu download gambar, tetapi juga menghilangkan ketergantungan pada waktu aktif layanan eksternal dan memberi Anda kemampuan untuk menerapkan kebijakan keamanan dan akses yang sama dengan yang Anda terapkan pada gambar Anda sendiri.
Untuk membuat repositori jarak jauh untuk Docker Hub, Anda dapat menjalankan perintah berikut di Cloud Shell:
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"
Sekarang Anda akan melihat repositori tambahan dalam daftar repositori Artifact Registry Anda:

Untuk menguji apakah repositori jarak jauh Anda dapat mem-proxy permintaan ke repositori jarak jauh, jalankan perintah berikut di Cloud Shell untuk menarik image nginx:
docker pull us-central1-docker.pkg.dev/$PROJECT_ID/dockerhub/nginx:stable-alpine
Setelah penarikan berhasil, Anda juga dapat melihat repositori di Konsol Cloud dan bahwa image nginx yang di-cache kini memberikan pelaporan kerentanan dan dependensi yang sama seperti yang telah kita lihat untuk image yang Anda buat sendiri.
Membuat Repositori Virtual
Dengan mengikuti proses yang telah kita gunakan sejauh ini, Anda dapat membuat sejumlah repositori untuk setiap tim atau bisnis dan menentukan kepemilikan serta izin IAM untuk masing-masing repositori dengan jelas. Kami juga dapat membuat proxy untuk repositori jarak jauh sehingga memudahkan dan mengamankan penggunaan gambar pihak ketiga. Kelemahan dari banyaknya repositori ini akan terlihat jika Anda mengubah perspektif Anda ke konsumen gambar ini. Bagaimana cara developer mengetahui repositori gambar mana yang harus digunakan dalam deployment mereka?
Untuk menyederhanakan penggunaan dan menyembunyikan repositori pokok di balik lapisan abstraksi, Anda dapat membuat repositori virtual di Artifact Registry dengan perintah berikut di 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"
Sekarang kita dapat menarik gambar dari repositori virtual tanpa mengekspos struktur yang mendasarinya. Untuk memverifikasi bahwa semuanya berfungsi seperti yang diharapkan, Anda dapat menjalankan perintah berikut di Cloud Shell:
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. Men-deploy ke Cloud Run
Dengan adanya repositori dan gambar masing-masing, kita kini dapat menggunakannya dalam deployment. Untuk mengilustrasikan contoh kasus penggunaan dan menghindari deployment infrastruktur tambahan, kita akan men-deploy container ke Cloud Run. Dalam bentuknya yang paling sederhana, deployment dapat dilakukan dengan menjalankan perintah berikut di Cloud Shell:
gcloud run deploy hello-world \
--image us-central1-docker.pkg.dev/$PROJECT_ID/all-images/java-hello-world:tag1 \
--region us-central1 \
--allow-unauthenticated
Setelah deployment selesai, URL yang dibuat otomatis akan ditampilkan dan Anda dapat mengakses layanan Anda melalui URL tersebut.
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
Jika Anda membuka URL tersebut di tab browser baru, Anda akan melihat pesan "Hello World" yang berhasil.

7. Memperkuat Keamanan Supply Chain
Setelah image Container Anda berhasil di-deploy secara live, mungkin saatnya kita melihat cara memperkuat rantai pasokan end-to-end. Di bagian sebelumnya, kita telah melihat cara analisis container Artifact Registry memberikan insight tentang library dan lisensi yang digunakan dalam image. Namun, pelaku kejahatan masih dapat memasukkan konten berbahaya ke dalam gambar Anda di sepanjang rantai pasokan. Di bagian ini, kita akan mempelajari cara menggunakan framework SLSA untuk memperkenalkan pengesahan artefak build dan bahkan memanfaatkan tanda tangan kriptografi artefak itu sendiri untuk memastikan hanya artefak tepercaya yang dapat di-deploy ke runtime Cloud Run kita.
Pengesahan SLSA dengan Cloud Build
Framework SLSA memberikan berbagai tingkat bukti untuk artefak rantai pasokan. Spesifikasi dan implementasinya mungkin tampak sulit pada awalnya, tetapi dengan Cloud Build, membuat pengesahan SLSA semudah menambahkan spesifikasi cloudbuild.yaml dengan requestedVerifyOption yang ditetapkan ke VERIFIED.
Untuk aplikasi kita, kita dapat menjalankan perintah berikut di Cloud Shell untuk membuat file cloudbuild.yaml di folder 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
Sekarang kita membuat Tugas Cloud Build baru yang membangun versi baru Image Java Hello World dengan menjalankan perintah berikut di Cloud Shell.
gcloud builds submit --substitutions=_IMAGE_URI=us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:cloud-build
Setelah build selesai, kita dapat membuka UI Cloud Build di Konsol Google Cloud dan melihat Level SLSA yang kita capai dengan membuka build kita, lalu melihat Artefak Build di bagian Ringkasan Build. Gambar yang terlihat di sana memiliki tombol untuk melihat "Insight Keamanan". Saat mengkliknya, Anda akan melihat pengesahan SLSA serta laporan kerentanan yang sudah dikenal yang kita lihat sebelumnya di UI Artifact Registry saat kita mengirimkan build lokal.

Provenans SLSA untuk image kami juga dapat diambil dengan menjalankan perintah berikut di Cloud Shell:
gcloud artifacts docker images describe \
"us-central1-docker.pkg.dev/$PROJECT_ID/container-example/java-hello-world:cloud-build" \
--show-provenance
Mewajibkan Provenance Cloud Build dengan Otorisasi Biner
Dengan adanya pipeline Cloud Build, bukankah akan lebih baik jika kita memastikan bahwa semua image yang kita deploy ke produksi dibangun menggunakan lingkungan build yang dapat diprogram dan direproduksi tersebut?
Di sinilah Otorisasi Biner berperan. Dengan fitur ini, Anda dapat menempatkan penjaga di depan runtime container yang memeriksa image container dan memverifikasi keberadaan pengesahan tepercaya. Jika tidak ada pengesahan yang ditemukan, entri log audit akan dibuat atau deployment akan diblokir sepenuhnya, bergantung pada konfigurasi.
Untuk mengubah konfigurasi Otorisasi Biner default project kita agar mewajibkan pengesahan bawaan yang dikeluarkan oleh Cloud Run, kita menjalankan perintah berikut di Cloud Shell:
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
Di sini, Anda juga dapat menambahkan Pengesah kustom Anda sendiri, tetapi hal itu berada di luar cakupan codelab ini dan dibiarkan sebagai latihan pekerjaan rumah ekstrakurikuler opsional.
Untuk menerapkan otorisasi biner di Layanan Cloud Run, kita menjalankan perintah berikut di Cloud Shell:
gcloud run services update hello-world \
--region us-central1 \
--binary-authorization=default
Mari kita uji apakah Otorisasi Biner diterapkan dengan benar dengan men-deploy ulang image yang dibangun secara lokal terlebih dahulu
gcloud run deploy hello-world \
--image us-central1-docker.pkg.dev/$PROJECT_ID/all-images/java-hello-world:tag1 \
--region us-central1
Seperti yang diharapkan, Anda akan mendapatkan pesan error yang menjelaskan alasan gambar tidak dapat di-deploy yang terlihat seperti ini:
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
Oleh karena itu, untuk men-deploy versi baru ke layanan Cloud Run, kita perlu menyediakan image yang dibuat dengan 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
Kali ini deployment akan berhasil dan menampilkan pesan deployment yang berhasil seperti di bawah ini:
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. Mengelola paket bahasa Java Maven
Di bagian ini, Anda akan melihat cara menyiapkan repositori Java Artifact Registry dan mengupload paket ke repositori tersebut, serta memanfaatkannya di berbagai aplikasi.
Membuat repositori paket Maven
Dari Cloud Shell, jalankan perintah berikut untuk membuat repositori artefak Java:
gcloud artifacts repositories create java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Example Java Maven Repo"
Klik Authorize jika perintah otorisasi Cloud Shell muncul
Buka Konsol Google Cloud - Artifact Registry - Repositories dan perhatikan repositori Maven yang baru dibuat dengan nama java-repo. Jika Anda mengkliknya, Anda akan melihat bahwa repositori tersebut kosong saat ini.
Menyiapkan autentikasi ke Artifact Repository
Gunakan perintah berikut untuk mengupdate lokasi terkenal untuk Kredensial Default Aplikasi (ADC) dengan kredensial akun pengguna Anda sehingga helper kredensial Artifact Registry dapat melakukan autentikasi menggunakan kredensial tersebut saat terhubung dengan repositori:
gcloud auth login --update-adc
Mengonfigurasi Maven untuk Artifact Registry
Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda:
gcloud artifacts print-settings mvn \
--repository=java-repo \
--location=us-central1 | tee config.xml
Buka pom.xml di Cloud Shell Editor dengan menjalankan perintah berikut di Cloud Shell dari dalam direktori helloworld:
cloudshell edit pom.xml
dan tambahkan setelan yang ditampilkan ke bagian yang sesuai dalam file,
Perbarui bagian 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>
Perbarui bagian repositories
<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>
Perbarui bagian extensions di bagian build
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
Berikut contoh file lengkap untuk referensi Anda. Pastikan untuk mengganti <PROJECT> dengan project ID Anda.
<?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>
Mengupload paket Java Anda ke Artifact Registry
Dengan Artifact Registry yang dikonfigurasi di Maven, Anda kini dapat menggunakan Artifact Registry untuk menyimpan file Jar Java untuk digunakan oleh project lain di organisasi Anda.
Jalankan perintah berikut untuk mengupload paket Java Anda ke Artifact Registry:
mvn deploy
Memeriksa paket Java di Artifact Registry
Buka Konsol Cloud - Artifact Registry - Repositories Klik java-repo, lalu periksa apakah artefak biner helloworld ada di sana:

9. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Yang telah Anda pelajari
- Membuat Repositori untuk Container dan Paket Bahasa
- Mengelola image container dengan Artifact Registry
- Mengintegrasikan Artifact Registry dengan Cloud Code
- Mengonfigurasi Maven untuk Menggunakan Artifact Registry untuk Dependensi Java
Pembersihan
Jalankan perintah berikut di Cloud Shell untuk menghapus seluruh project
gcloud projects delete $PROJECT_ID