Mempelajari Mendalam Artifact Registry

1. Ringkasan

Seiring dengan evolusi Container Registry, Artifact Registry menjadi tempat tunggal bagi organisasi Anda untuk mengelola image container dan paket bahasa (seperti Maven dan npm). Library ini terintegrasi sepenuhnya dengan alat dan runtime Google Cloud serta dilengkapi dengan dukungan untuk pengelolaan dependensi berbasis bahasa yang dapat 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 Language Package
  • 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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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)')

Aktifkan 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 terdapat di org GoogleCloudPlatform di GitHub. Clone dengan perintah di bawah ini, lalu pindah ke direktori.

git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/

Menyediakan infrastruktur yang digunakan dalam lab ini

Di lab ini, Anda akan men-deploy kode ke GKE. Skrip penyiapan di bawah menyiapkan infrastruktur ini untuk Anda.

gcloud container clusters create container-dev-cluster --zone=us-central1-b

3. Menangani image container

Membuat Repositori Docker di registry Artifact

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 spesifikasi API yang berbeda, Artifact Registry perlu mengetahui format yang Anda inginkan untuk diikuti oleh respons API. Untuk melakukannya, Anda akan membuat repositori dan meneruskan tanda --repository-format yang menunjukkan jenis repositori yang diinginkan

Dari Cloud Shell, jalankan perintah berikut untuk membuat repositori untuk image Docker:

gcloud artifacts repositories create container-dev-repo --repository-format=docker \
--location=us-central1 --description="Docker repository for Container Dev Workshop"

Klik Beri otorisasi jika dialog 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. Selain menyiapkan kredensial terpisah, Docker dapat dikonfigurasi untuk menggunakan kredensial gcloud 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.

Pelajari contoh Aplikasi

Aplikasi contoh disediakan di repositori git yang Anda clone di langkah sebelumnya. Ubah ke direktori java dan tinjau kode aplikasi.

cd cloud-code-samples/java/java-hello-world

Folder tersebut berisi contoh aplikasi Java yang merender halaman web sederhana: selain berbagai file yang tidak relevan untuk lab khusus ini, folder tersebut berisi kode sumber, dalam folder src, dan Dockerfile yang akan kita gunakan untuk membangun image container secara lokal.

Membangun Container Image

Sebelum dapat menyimpan image container di Artifact Registry, Anda harus membuatnya.

Jalankan perintah berikut untuk membangun image container dan memberinya tag dengan benar untuk mendorongnya ke repositori Anda pada 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

Tinjau image di Artifact Registry

Buka Google Cloud Console - 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 dapat terlihat.

9cb46d3689b3ed2.pngS

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:

2b17e9d26d9dd7ea.pngS

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 tambahkan folder aplikasi ke ruang kerjanya:

cloudshell workspace .

Editor Cloud Shell akan terbuka dengan penjelajah di folder aplikasi.

Jika Anda melihat jendela 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, jalankan perintah berikut di terminal

gcloud config get project

Klik status bar Cloud Code (di sudut kiri bawah), lalu pilih Run on Kubernetes

e6e2b06467228e18.png

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, letakkan lokasi alamat yang Anda temukan sebelum memastikan untuk mengganti <PROJECT_ID> untuk nilai sebenarnya

us-central1-docker.pkg.dev/<PROJECT_ID>/container-dev-repo

Saat Anda menjalankan Jalankan di Kubernetes untuk pertama kalinya, Cloud Code akan meminta lokasi repositori image target. Setelah diberikan, URL repositori akan 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 Cloud Console - Artifact Registry - Repositories Klik container-dev-repo lalu pastikan bahwa image java-hello-world dan catat image baru yang diberi tag latest

Meninjau Aplikasi yang Di-deploy

Kembali ke Cloud Shell Editor: setelah deployment selesai, Skaffold/Cloud Code akan mencetak URL yang terekspos tempat layanan diteruskan, klik link - Buka Pratinjau Web:

33257a43826b88ff.pngS

Di jendela browser baru, Anda akan melihat halaman aplikasi halo dunia

d3e49693b0383a5d.png

Perbarui kode aplikasi

Sekarang update aplikasi untuk melihat perubahan yang segera diimplementasikan 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!" ke ""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 Anda di-deploy:

41787b1da54ff137.pngS

Buka lagi Cloud Console - Artifact Registry - Repositori. Klik container-dev-repo lalu periksa apakah image java-hello-world dan catat image baru tersebut

5. Bekerja dengan 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 untuk 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 dialog otorisasi Cloud Shell muncul

Buka Google Cloud Console - Artifact Registry - Repositori dan perhatikan repositori Maven Anda yang baru dibuat bernama container-dev-java-repo. Jika Anda mengkliknya, Anda dapat melihat bahwa repositori tersebut saat ini kosong.

Menyiapkan autentikasi ke Artifact Repository

Gunakan perintah berikut untuk mengupdate lokasi populer untuk Kredensial Default Aplikasi (ADC) dengan kredensial akun pengguna Anda sehingga helper kredensial Artifact Registry dapat mengautentikasi 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 repositori

 <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>

Mengupdate ekstensi

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

Berikut contoh {i>file<i} lengkap sebagai 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>
 
 <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 Jars 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:

e348d976ac1ac107.png

6. Selamat!

Selamat, Anda telah menyelesaikan codelab!

Yang telah Anda bahas

  • Repositori yang Dibuat untuk Container dan Paket Bahasa
  • Image container terkelola dengan Artifact Registry
  • Integrated Artifact Registry dengan Cloud Code
  • Mengonfigurasi Maven agar menggunakan Artifact Registry untuk Dependensi Java

Pembersihan

Jalankan perintah berikut untuk menghapus project

gcloud projects delete $PROJECT_ID