1. Ringkasan
Sebagai evolusi Container Registry, Artifact Registry adalah satu tempat bagi organisasi Anda untuk mengelola image container dan paket bahasa (seperti Maven dan npm). Artifact Registry sepenuhnya terintegrasi dengan alat dan runtime Google Cloud serta dilengkapi dengan dukungan untuk pengelolaan dependensi berbasis bahasa untuk digunakan dengan alat seperti npm dan Maven. Hal ini memudahkan pengintegrasian dengan alat CI/CD untuk menyiapkan pipeline otomatis.
Lab ini akan memandu Anda mempelajari beberapa fitur yang tersedia di Artifact Registry.
Yang akan Anda pelajari
Apa tujuan pembelajaran lab ini?
- 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
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.
- Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
- Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai
PROJECT_ID
). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat. - Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource 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, ikuti petunjuk "pembersihan" yang ada di akhir codelab. 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 \
container.googleapis.com \
artifactregistry.googleapis.com \
containerregistry.googleapis.com \
containerscanning.googleapis.com
Mendapatkan kode sumber
Kode sumber untuk lab ini terletak di organisasi GoogleCloudPlatform di GitHub. Clone dengan perintah di bawah, lalu ubah ke direktori.
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
Menyediakan infrastruktur yang digunakan dalam lab ini
Dalam lab ini, Anda akan men-deploy kode ke GKE. Skrip penyiapan di bawah ini menyiapkan infrastruktur ini untuk Anda.
gcloud container clusters create container-dev-cluster --zone=us-central1-b
3. Menangani image container
Membuat Repositori Docker di Artifact Registry
Artifact Registry mendukung pengelolaan image container dan paket bahasa. Jenis artefak yang berbeda memerlukan spesifikasi yang berbeda. Misalnya, permintaan untuk dependensi Maven berbeda dengan permintaan untuk dependensi Node.
Untuk mendukung berbagai spesifikasi API, Artifact Registry perlu mengetahui format yang Anda inginkan untuk diikuti respons API. Untuk melakukannya, Anda akan membuat repositori dan meneruskan flag --repository-format
yang menunjukkan jenis repositori yang diinginkan
Dari Cloud Shell, jalankan perintah berikut untuk membuat repositori image Docker:
gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"
Klik Izinkan jika perintah otorisasi Cloud Shell muncul
Buka Konsol Google Cloud - Artifact Registry - Repositori dan perhatikan repositori Docker yang baru dibuat bernama container-dev-repo
. Jika Anda mengkliknya, akan terlihat bahwa saat ini repositori tersebut kosong
Mengonfigurasi Autentikasi Docker ke Artifact Registry
Saat terhubung ke, kredensial Artifact Registry 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
Perintah ini akan meminta konfirmasi untuk mengubah konfigurasi docker Cloud Shell, tekan enter.
Menjelajahi Aplikasi contoh
Aplikasi contoh disediakan di repositori git yang Anda clone pada langkah sebelumnya. Ubah ke direktori java dan tinjau kode aplikasi.
cd cloud-code-samples/java/java-hello-world
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 mem-build image container secara lokal.
Mem-build Image Penampung
Sebelum dapat menyimpan image container di Artifact Registry, Anda harus membuatnya.
Jalankan perintah berikut untuk mem-build image container dan memberi tag dengan benar untuk mengirimkannya ke repositori Anda di langkah berikutnya:
docker build -t us-central1-docker.pkg.dev/$PROJECT_ID/container-dev-repo/java-hello-world:tag1 .
Mengirim Container Image 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-dev-repo/java-hello-world:tag1
Meninjau image di Artifact Registry
Buka Konsol Google Cloud - Artifact Registry - Repositories.
Klik container-dev-repo
dan pastikan image java-hello-world
ada di sana. Klik gambar dan catat gambar yang diberi tag tag1
. Anda dapat melihat bahwa Pemindaian Kerentanan sedang berjalan atau sudah selesai dan jumlah kerentanan yang terdeteksi terlihat.
Klik jumlah kerentanan dan Anda akan melihat daftar kerentanan yang terdeteksi pada gambar, dengan nama buletin CVE dan tingkat keparahannya. Anda dapat mengklik LIHAT pada setiap kerentanan yang tercantum untuk mendapatkan detail selengkapnya:
4. Integrasi dengan Cloud Code
Di bagian ini, Anda akan melihat cara menggunakan repositori image Docker Artifact Registry dengan Cloud Code.
Men-deploy Aplikasi ke Cluster GKE dari Cloud Code
Jalankan perintah berikut, dari folder java-hello-world
untuk membuka Cloud Shell Editor dan menambahkan folder aplikasi ke ruang kerjanya:
cloudshell workspace .
Editor Cloud Shell akan terbuka dengan penjelajah di folder aplikasi.
Jika Anda mendapatkan pop-up yang meminta untuk mengecualikan file setelan project Java dari ruang kerja, klik Exclude in workspace
Langkah-langkah berikut mengharuskan Anda memasukkan lokasi repositori Artifact Registry. Format untuk lokasi adalah:
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
Untuk menemukan PROJECT_ID Anda, jalankan perintah berikut di terminal
gcloud config get project
Klik status bar Cloud Code (di pojok kiri bawah), lalu pilih Run on Kubernetes
Saat diminta, pilih Yes
untuk menggunakan konteks saat ini di kubeconfig yang mengarah ke cluster GKE container-dev-cluster
yang disediakan untuk lab
Di perintah untuk registry image, masukkan lokasi alamat yang Anda temukan sebelum memastikan untuk mengganti <PROJECT_ID> dengan nilai sebenarnya
us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo
Saat Anda menjalankan Run on Kubernetes untuk pertama kalinya, Cloud Code akan meminta lokasi repositori image target. Setelah diberikan, URL repositori disimpan dalam file .vscode/launch.json
yang dibuat di folder aplikasi.
Di panel output, Anda akan melihat bahwa build dimulai untuk image aplikasi java-hello-world,
. Image telah diupload ke repositori Artifact Registry yang dikonfigurasi sebelumnya
Buka Konsol Cloud - Artifact Registry - Repositories Klik container-dev-repo
dan periksa apakah image java-hello-world
dan perhatikan image baru yang diberi tag latest
Meninjau Aplikasi yang Di-deploy
Kembali ke Editor Cloud Shell: setelah deployment selesai, Skaffold/Cloud Code akan mencetak URL yang ditampilkan tempat layanan telah diteruskan, klik link - Buka Pratinjau Web:
Di jendela browser baru, Anda akan melihat halaman aplikasi hello world
Memperbarui kode aplikasi
Sekarang update aplikasi untuk melihat perubahan yang segera diterapkan dalam deployment di cluster:
Buka HelloWorldController.java
di folder src/main/java/cloudcode/helloworld/web
di Cloud Shell Editor.
Ubah teks di baris 20 dari "It's running!" menjadi ""It's updated!"", Anda akan melihat proses build dan deployment segera dimulai.
Di akhir deployment, klik lagi URL yang diteruskan atau muat ulang jendela browser dengan aplikasi untuk melihat perubahan yang di-deploy:
Sekali lagi, buka Konsol Cloud - Artifact Registry - Repositories Klik container-dev-repo
dan periksa apakah image java-hello-world
dan catat image baru
5. Menggunakan paket bahasa
Di bagian ini, Anda akan melihat cara menyiapkan repositori Java Artifact Registry dan mengupload paket ke dalamnya, serta memanfaatkannya di berbagai aplikasi.
Membuat repositori paket Java
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 Google Cloud Console - Artifact Registry - Repositories 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.
Menyiapkan autentikasi ke Repositori Artefak
Gunakan perintah berikut untuk memperbarui lokasi yang dikenal 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=container-dev-java-repo \
--location=us-central1
Buka pom.xml di Cloud Shell Editor dan tambahkan setelan yang ditampilkan ke bagian yang sesuai dalam file,
Memperbarui bagian distributionManagement
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</repository>
</distributionManagement>
Memperbarui bagian repositories
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
Memperbarui ekstensi
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
Berikut adalah contoh file lengkap untuk referensi Anda. Pastikan untuk mengganti <PROJECT> dengan ID project 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>
<artifactId>hello-world</artifactId>
<packaging>jar</packaging>
<name>Cloud Code Hello World</name>
<description>Getting started with Cloud Code</description>
<version>1.0.0</version>
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/<PROJECT>/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
</parent>
<properties>
<java.version>1.8</java.version>
<checkstyle.config.location>./checkstyle.xml</checkstyle.config.location>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.1.0</version>
</extension>
</extensions>
</build>
<!-- The Spring Cloud GCP BOM will manage spring-cloud-gcp version numbers for you. -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>1.2.8.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-logging</artifactId>
</dependency>
</dependencies>
</project>
Mengupload paket Java Anda ke Artifact Registry
Dengan Artifact Registry yang dikonfigurasi di Maven, Anda kini dapat menggunakan Artifact Registry untuk menyimpan Java Jar 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 Cloud Console - Artifact Registry - Repositories Klik container-dev-java-repo
dan periksa apakah artefak biner hello-world
ada di sana:
6. Selamat!
Selamat, Anda telah menyelesaikan codelab!
Yang telah Anda pelajari
- Membuat Repositori untuk Container dan Paket Bahasa
- Image container terkelola dengan Artifact Registry
- Artifact Registry Terintegrasi dengan Cloud Code
- Mengonfigurasi Maven untuk menggunakan Artifact Registry untuk Dependensi Java
Pembersihan
Jalankan perintah berikut untuk menghapus project
gcloud projects delete $PROJECT_ID