1. Ringkasan
Artifact Registry memungkinkan Anda menyimpan berbagai jenis artefak, membuat beberapa repositori dalam satu project, dan mengaitkan region atau multi-region tertentu dengan setiap repositori. Ada beberapa mode repositori. Setiap mode memiliki tujuan yang berbeda. Diagram berikut menunjukkan salah satu dari banyak kemungkinan cara Anda dapat menggunakan repositori dalam mode yang berbeda secara bersamaan. Diagram menunjukkan alur kerja di dua project Google Cloud. Dalam project pengembangan, developer mem-build aplikasi Java. Dalam project runtime terpisah, build lain akan membuat image container dengan aplikasi untuk di-deploy ke Google Kubernetes Engine.
Di lab ini, Anda akan mempelajari cara melakukan tugas berikut.
- Menggunakan Repositori Standar untuk men-deploy paket pribadi
- Menggunakan Repositori Jarak Jauh untuk meng-cache paket maven central
- Menggunakan Repositori Virtual untuk menggabungkan beberapa repo upstream dalam satu konfigurasi
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 melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada 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 seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Penyiapan Workspace
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 API
gcloud services enable artifactregistry.googleapis.com
Meng-clone repo
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Repositori standar
Repositori Standar menyediakan cara untuk menyimpan paket pribadi dan membagikannya di seluruh aplikasi Anda yang lain
Membuat repositori maven standar
Dari Cloud Shell, jalankan perintah berikut untuk membuat repositori artefak Java:
gcloud artifacts repositories create container-dev-java-repo \
--repository-format=maven \
--location=us-central1 \
--description="Java package repository for Container Dev Workshop"
Klik Izinkan jika perintah otorisasi Cloud Shell muncul
Buka Konsol Google Cloud - Artifact Registry - Repositori dan perhatikan repositori Maven yang baru Anda buat bernama container-dev-java-repo
. Jika Anda mengkliknya, Anda dapat melihat bahwa repositori tersebut kosong saat ini.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Seharusnya menampilkan respons yang mirip dengan berikut
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'
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=container-dev-java-repo \
--location=us-central1
Perintah sebelumnya menampilkan xml yang akan ditambahkan ke pom.xml project Anda.
- Bagian repositori menentukan tempat Maven dapat mendownload artefak jarak jauh untuk digunakan oleh project saat ini.
- Bagian distributionManagement menentukan repositori jarak jauh yang akan di-push oleh project saat di-deploy.
- Bagian ekstensi menambahkan artifactregistry-maven-wagon yang mengaktifkan lapisan Autentikasi dan transpor yang diperlukan untuk terhubung ke Artifact Registry
- Catatan: Ekstensi dapat ada di pom.xml atau extensions.xml. Jika project bergantung pada project induk, dependensi tersebut akan diakses sebelum entri lainnya di pom.xml dimuat. Untuk memastikan induk memiliki akses ke ekstensi, ekstensi dapat ditempatkan dalam file extensions.xml yang dimuat sebelum pom.xml sehingga tersedia untuk dependensi induk.
Salin ketiga bagian, lalu buka pom.xml
di Cloud Shell Editor dan tambahkan setelan yang ditampilkan ke bagian bawah file tepat di dalam tag project
penutup.
Tips: Di cloudshell, jalankan perintah berikut di terminal untuk membuka editor di direktori saat ini.
cloudshell workspace .
Contoh: (nama project Anda akan berbeda di 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>
Mengupload paket Java ke Artifact Registry
Dengan Artifact Registry yang dikonfigurasi di Maven, Anda kini dapat menggunakan Artifact Registry untuk menyimpan jar Java yang akan digunakan oleh project lain di organisasi Anda.
Jalankan perintah berikut untuk mengupload paket Java Anda ke Artifact Registry:
mvn deploy -DskipTests
Jika Anda ingin menjalankan perintah ini lagi, pastikan untuk meningkatkan versi di pom.xml.
Memeriksa paket Java di Artifact Registry
Buka Konsol Cloud - Artifact Registry - Repositories Klik container-dev-java-repo
dan pastikan artefak biner hello-world
ada di sana:
3. Repositori jarak jauh
Repositori Jarak Jauh memberikan kemampuan untuk meng-cache paket pihak ketiga guna meningkatkan keandalan dan keamanan.
Membuat repositori jarak jauh
Catatan: Untuk mengetahui detail tentang autentikasi dan konfigurasi, tinjau dokumentasi produk.
Dari Cloud Shell, jalankan perintah berikut untuk membuat repositori jarak jauh bagi artefak 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
Meninjau repo di konsol
Buka Konsol Cloud - Artifact Registry - Repositories Klik maven-central-cache
dan perhatikan bahwa repositori telah dibuat dan saat ini kosong
Meninjau repo di terminal
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Mengintegrasikan repo ke dalam project
Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Tambahkan bagian repositori ke pom.xml Anda. Pastikan untuk tidak menyalin tag <repositories> luar dari output.
Ubah ID repositori yang baru ditambahkan menjadi "central" untuk memastikan setiap entri repositori memiliki ID unik.
Contoh: (nama project Anda akan berbeda di 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>
Jalankan perintah berikut di terminal untuk membuat extensions.xml
untuk project Anda, Gunakan mekanisme ekstensi inti untuk memastikan Maven dapat me-resolve dependensi induk atau plugin dari 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
Menarik dependensi dari Repositori Jarak Jauh
Jalankan perintah berikut untuk mengompilasi aplikasi Anda menggunakan Repositori Jarak Jauh:
rm -rf ~/.m2/repository
mvn compile
Meninjau paket di konsol
Buka Konsol Cloud - Artifact Registry - Repositori Klik maven-central-cache
dan pastikan artefak biner di-cache di sana:
4. Repositori virtual
Repositori Virtual berfungsi sebagai antarmuka untuk beberapa repositori yang akan diakses melalui satu konfigurasi. Hal ini menyederhanakan konfigurasi klien untuk konsumen artefak Anda dan meningkatkan keamanan dengan mengurangi serangan kebingungan dependensi.
Membuat file kebijakan
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
Membuat repositori virtual
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
Mengintegrasikan repo ke dalam project
Jalankan perintah berikut untuk mencetak konfigurasi repositori yang akan ditambahkan ke project Java Anda:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Ganti seluruh bagian repositori di pom Anda dengan satu bagian repositori virtual dari output.
Contoh: (nama project Anda akan berbeda di 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>
Menarik dependensi dari Repositori Virtual
Karena repositori Virtual adalah pass-through dan tidak akan menyimpan paket sebenarnya, untuk menunjukkan prosesnya dengan jelas, Anda akan menghapus repo maven-central-cache yang dibuat sebelumnya dan membuatnya lagi, untuk memulai lagi dengan repositori kosong
Jalankan perintah berikut untuk membuat ulang repositori 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
Anda dapat meninjau repo kosong di konsol. Buka Cloud Console - Artifact Registry - Repositories
Sekarang, gunakan repositori virtual dengan mem-build project Anda menggunakan perintah berikut
rm -rf ~/.m2/repository
mvn compile
Meninjau paket di konsol
Buka Cloud Console - Artifact Registry - Repositories Klik maven-central-cache
dan pastikan artefak biner dikonfigurasi untuk diambil dari repo virtual, tetapi pada akhirnya diambil dari maven-central-cache
:
5. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Yang telah Anda pelajari
- Menggunakan Repositori Standar untuk men-deploy paket pribadi Anda
- Menggunakan Repositori Jarak Jauh untuk meng-cache paket maven central
- Menggunakan Repositori Virtual untuk menggabungkan beberapa repo upstream dalam satu konfigurasi
Pembersihan
Jalankan perintah berikut untuk menghapus project
gcloud projects delete ${PROJECT_ID}
—
Terakhir diperbarui: 22/3/23