Artifact Registry'nin Ayrıntılı İncelemesi

1. Genel Bakış

Container Registry'nin gelişmiş hali olan Artifact Registry, kuruluşunuzun container görüntülerini ve dil paketlerini (Maven ve npm gibi) tek bir yerden yönetebilmesini sağlar. Google Cloud'un araçları ve çalışma zamanlarıyla tamamen entegredir ve npm ve Maven gibi araçlarla birlikte kullanılmak üzere dile dayalı bağımlılık yönetimi desteği sunar. Bu da Artifact Registry'yi CI/CD araçlarınızla kolayca entegre edip otomatik ardışık düzenler oluşturabilmenizi sağlar.

Bu laboratuvarda, Artifact Registry'deki bazı özellikler adım adım açıklanmaktadır.

Öğrenecekleriniz

Bu laboratuvarın öğrenme hedefleri nelerdir?

  • Container'lar ve Dil Paketleri için depo oluşturma
  • Artifact Registry ile container görüntülerini yönetme
  • Artifact Registry'yi Cloud Code ile entegre etme
  • Maven'i, Java bağımlılıkları için Artifact Registry'yi kullanacak şekilde yapılandırma

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcılarının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. Genellikle bu dizenin ne olduğunu umursmazsınız. Çoğu codelab'de, proje kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Düzgün geçtikten sonra başka bir rastgele dize oluşturabilir veya mevcut bir dizeyi deneyip kullanılabilir olup olmadığına bakabilirsiniz. Proje oluşturulduktan sonra ise "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer de vardır: Proje Numarası. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz codelab'in sonunda bulunan tüm "temizlik" talimatlarını uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

gcloud'u ayarlama

Cloud Shell'de proje kimliğinizi ve proje numaranızı ayarlayın. Bunları PROJECT_ID ve PROJECT_NUMBER değişkenleri olarak kaydedin.

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

Google hizmetlerini etkinleştirme

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  container.googleapis.com \
  artifactregistry.googleapis.com \
  containerregistry.googleapis.com \
  containerscanning.googleapis.com

Kaynak kodunu alma

Bu laboratuvarın kaynak kodu, GitHub'daki GoogleCloudPlatform kuruluşunda yer almaktadır. Aşağıdaki komutla klonlayın, ardından dizine değiştirin.

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

Bu laboratuvarda kullanılan altyapıyı ayarlama

Bu laboratuvarda, GKE'ye kod dağıtacaksınız. Aşağıdaki kurulum komut dosyası, bu altyapıyı sizin için hazırlar.

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

3. Container görüntüleriyle çalışma

Artifact Registry'de Docker deposu oluşturma

Artifact Registry, container görüntülerini ve dil paketlerini yönetmeyi destekler. Farklı yapı türü farklı spesifikasyonlar gerektirir. Örneğin, Maven bağımlılıkları ile ilgili istekler, Node bağımlılıkları ile ilgili isteklerden farklıdır.

Artifact Registry'nin farklı API spesifikasyonlarını desteklemesi için API yanıtlarının hangi biçimi kullanmasını istediğinizi bilmesi gerekir. Bunu yapmak için bir depo oluşturup --repository-format işaretini kullanarak istenen depo türünü belirtmelisiniz.

Docker görüntüleri için bir depo oluşturmak üzere Cloud Shell'de aşağıdaki komutu çalıştırın:

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

Cloud Shell yetkilendirme istemi görünürse Yetkilendir'i tıklayın.

Google Cloud Console - Artifact Registry - Repositories'e gidin ve container-dev-repo adlı yeni oluşturulan Docker deponuzu bulun. Depoyu tıkladığınızda şu anda boş olduğunu görebilirsiniz.

Docker kimlik doğrulamasını Artifact Registry için yapılandırma

Artifact Registry'ye bağlanırken erişim sağlamak için kimlik bilgileri gerekir. Docker, ayrı kimlik bilgileri oluşturmak yerine gcloud kimlik bilgilerinizi sorunsuz bir şekilde kullanacak şekilde yapılandırılabilir.

Docker'ı, us-central1 bölgesindeki Artifact Registry isteklerinin kimliğini doğrulamak için Google Cloud CLI'yi kullanacak şekilde yapılandırmak üzere Cloud Shell'de aşağıdaki komutu çalıştırın:

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

Komut, Cloud Shell Docker yapılandırmasını değiştirmek için onay ister. Enter tuşuna basın.

Örnek uygulamayı inceleyin

Daha önceki bir adımda klonladığınız git deposunda örnek bir uygulama sağlanır. Java dizinine geçin ve uygulama kodunu inceleyin.

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

Klasör, basit bir web sayfası oluşturan örnek bir Java uygulaması içerir: Bu laboratuvarla alakalı olmayan çeşitli dosyaların yanı sıra src klasöründe kaynak kodu ve yerel olarak bir kapsayıcı resmi oluşturmak için kullanacağımız bir Dockerfile içerir.

Kapsayıcı Görüntüsünü Derleme

Artifact Registry'de container görüntüleri depolayabilmek için öncelikle bir görüntü oluşturmanız gerekir.

Container görüntüsünü derlemek için aşağıdaki komutu çalıştırın ve bir sonraki adımda deponuza aktarmak üzere görüntüyü uygun şekilde etiketleyin:

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

Container görüntüsünü Artifact Registry'ye aktarma

Container görüntüsünü daha önce oluşturulan depoya aktarmak için aşağıdaki komutu çalıştırın:

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

Artifact Registry'de görüntüyü inceleme

Google Cloud Console - Artifact Registry - Repositories (Google Cloud Console - Artifact Registry - Depolar) bölümüne gidin. container-dev-repo'ı tıklayın ve java-hello-world görüntüsünün orada olup olmadığını kontrol edin. Resmi tıklayın ve tag1 etiketli resmi not edin. Güvenlik açığı taramasının çalıştığını veya tamamlandığını görebilir ve tespit edilen güvenlik açıklarının sayısını görebilirsiniz.

9cb46d3689b3ed2.png

Güvenlik açıklarının sayısını tıkladığınızda, görüntüde algılanan güvenlik açıklarının listesini görürsünüz. CVE'nin adı ve önem derecesi ile birlikte listelenen her güvenlik açığındaki VIEW'i tıklayarak daha fazla bilgi edinebilirsiniz:

2b17e9d26d9dd7ea.png

4. Cloud Code ile entegrasyon

Bu bölümde, Artifact Registry Docker görüntü deposunun Cloud Code ile nasıl kullanılacağını öğreneceksiniz.

Uygulamayı Cloud Code'dan GKE Kümesine Dağıtma

java-hello-world klasöründen aşağıdaki komutu çalıştırarak Cloud Shell Düzenleyici'yi açın ve uygulama klasörünü kendi çalışma alanına ekleyin:

cloudshell workspace .

Cloud Shell düzenleyicisi, uygulama klasöründeki gezginle açılır.

Java proje ayarları dosyalarının çalışma alanından hariç tutulmasını isteyen bir pop-up görürseniz Exclude in workspace

Aşağıdaki adımlarda Artifact Registry deposu konumunuzu girmeniz gerekir. Konumun biçimi şudur:

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

PROJECT_ID'nizi bulmak için terminalde aşağıdaki komutu çalıştırın

gcloud config get project

Cloud Code durum çubuğunu (sol alt köşede) tıklayın ve ardından Run on Kubernetes

e6e2b06467228e18.png

İstendiğinde, kubeconfig'de laboratuvar için sağlanan container-dev-cluster GKE kümesine işaret eden geçerli bağlamı kullanmak üzere Yes öğesini seçin

Gerçek değeriniz yerine <PROJECT_ID> değerini eklediğinizden emin olduktan sonra resim sicil dairesi isteminde bulduğunuz adres konumunu girin.

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

Kubernetes'te çalıştırmayı ilk kez çalıştırdığınızda Cloud Code, hedef görüntü deposu konumunu ister. Depolama alanı URL'si sağlandıktan sonra uygulama klasöründe oluşturulan .vscode/launch.json dosyasına kaydedilir.

Çıkış bölmesinde, uygulama görüntüsü için derlemenin başladığını görürsünüz java-hello-world, görüntü, daha önce yapılandırılmış Artifact Registry deposuna yüklenir

Cloud Console - Artifact Registry - Repositories (Cloud Console - Artifact Registry - Repositories) bölümüne gidin. container-dev-repo'yi tıklayın ve java-hello-world görüntüsünün olup olmadığını kontrol edin. latest etiketli yeni bir görüntü olduğunu not edin.

Dağıtılan Uygulamayı İnceleme

Cloud Shell Düzenleyici'ye dönün: Dağıtım tamamlandığında Skaffold/Cloud Code, hizmetin yönlendirildiği, açıkta kalan URL'yi yazdırır. Şu bağlantıyı tıklayın: Web Önizlemesini Aç:

33257a43826b88ff.png

Yeni tarayıcı penceresinde "Merhaba Dünya" uygulama sayfasını görürsünüz.

d3e49693b0383a5d.png

Uygulama kodunu güncelleyin

Şimdi, değişikliğin kümedeki dağıtımda hemen uygulandığını görmek için uygulamayı güncelleyin:

Cloud Shell Düzenleyici'deki src/main/java/cloudcode/helloworld/web klasöründe HelloWorldController.java klasörünü açın.

20. satırdaki metni "Çalışıyor!" yerine "Güncellendi!" olarak değiştirin. Derleme ve dağıtım sürecinin hemen başladığını göreceksiniz.

Dağıtım işleminin sonunda, yönlendirilen URL'yi tekrar tıklayın veya uygulamanın bulunduğu tarayıcı penceresini yenileyerek değişikliğinizin dağıtıldığını görün:

41787b1da54ff137.png

Tekrar Cloud Console - Artifact Registry - Repositories'e gidin. container-dev-repo'yi tıklayın ve java-hello-world görüntüsünün yeni görüntüyle değiştirilip değiştirilmediğini kontrol edin.

5. Dil paketleriyle çalışma

Bu bölümde, Artifact Registry Java deposu oluşturmayı ve bu depoya paket yüklemeyi, ardından bu paketlerden farklı uygulamalarda yararlanmayı öğreneceksiniz.

Java paketi deposu oluşturma

Java yapıları için bir depo oluşturmak üzere Cloud Shell'de aşağıdaki komutu çalıştırın:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

Cloud Shell yetkilendirme istemi görünürse Yetkilendir'i tıklayın.

Google Cloud Console - Artifact Registry - Repositories'e gidip yeni oluşturduğunuz container-dev-java-repo adlı Maven deposunu bulun. Tıkladığınızda şu anda boş olduğunu görebilirsiniz.

Artifact Repository için kimlik doğrulamayı ayarlama

Uygulama Varsayılan Kimlik Bilgileri'nin (ADC) bilinen konumunu kullanıcı hesabı kimlik bilgilerinizle güncellemek için aşağıdaki komutu kullanın. Böylece Artifact Registry kimlik bilgisi yardımcısı, depolara bağlanırken bu kimlik bilgilerini kullanarak kimlik doğrulaması yapabilir:

gcloud auth login --update-adc

Maven'i Artifact Registry için yapılandırma

Aşağıdaki komutu çalıştırarak Java projenize eklenecek depo yapılandırmasını yazdırın:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

Cloud Shell Düzenleyici'de pom.xml dosyasını açın ve döndürülen ayarları dosyanın ilgili bölümlerine ekleyin.

distributionManagement bölümünü güncelleyin

<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 bölümünü güncelleyin

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

Uzantıları güncelleyin

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

Referans olarak kullanabileceğiniz dosyanın tamamını aşağıda bulabilirsiniz. <PROJECT> değerini proje kimliğinizle değiştirdiğinizden emin olun.

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

Java paketinizi Artifact Registry'ye yükleme

Maven'de yapılandırılmış Artifact Registry ile artık kuruluşunuzdaki diğer projeler tarafından kullanılmak üzere Java Jar'ları depolamak için Artifact Registry'yi kullanabilirsiniz.

Java paketinizi Artifact Registry'ye yüklemek için aşağıdaki komutu çalıştırın:

mvn deploy

Artifact Registry'de Java paketini kontrol etme

Cloud Console - Artifact Registry - Repositories sayfasına gidin container-dev-java-repo klasörünü tıklayın ve hello-world ikili yapısının mevcut olup olmadığını kontrol edin:

e348d976ac1ac107.png

6. Tebrikler!

Tebrikler, codelab'i tamamladınız.

Kapsamınız

  • Container'lar ve Dil Paketleri İçin Oluşturulan Depolar
  • Artifact Registry ile yönetilen container görüntüleri
  • Cloud Code ile Entegre Artifact Registry
  • Maven, Java bağımlılıkları için Artifact Registry'yi kullanacak şekilde yapılandırıldı

Temizleme

Projeyi silmek için aşağıdaki komutu çalıştırın

gcloud projects delete $PROJECT_ID