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. npm ve Maven gibi araçlarla kullanım için dile dayalı bağımlılık yönetimi desteği sunar. Bu sayede, otomatik ardışık düzenler kurmak için CI/CD araçlarınızla kolayca entegre edebilirsiniz.

Bu laboratuvar, Artifact Registry'de bulunan bazı özellikleri adım adım gösterir.

Öğ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 edin
  • Maven'i, Java Bağımlılıkları için Artifact Registry kullanacak şekilde yapılandırma

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp 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ı için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde 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ırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

gcloud'u kurun

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 bulunmaktadı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ı sağlayın

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 kayıt defterinde Docker Deposu oluşturma

Artifact Registry, container görüntülerinin ve dil paketlerinin yönetilmesini destekler. Farklı yapı türleri farklı özellikler gerektirir. Örneğin, Maven bağımlılıkları için yapılan istekler, düğüm bağımlıları için yapılan isteklerden farklıdır.

Artifact Registry'nin, farklı API spesifikasyonlarını desteklemek 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 depo oluşturmak isterseniz Cloud Shell'den 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üntülenirse Yetkilendir'i tıklayın

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

Artifact Registry için Docker Kimlik Doğrulaması yapılandırma

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

Docker'ı us-central1 bölgesinde Artifact Registry'ye gelen isteklerin kimliğini Google Cloud CLI ile doğrulayacak şekilde yapılandırmak için Cloud Shell'den aşağıdaki komutu çalıştırın:

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

Bu komutta, Cloud Shell Docker yapılandırmasını değiştirmek için onay istenir ve Enter tuşuna basın.

Örnek uygulamayı inceleyin

Önceki 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ını oluşturan örnek bir Java uygulaması içerir: Söz konusu laboratuvar, ilgili laboratuvarla alakalı olmayan çeşitli dosyaların yanı sıra src klasörünün altında kaynak kodunu ve yerel olarak container görüntüsü oluşturmak için kullanacağımız bir Dockerfile dosyasını 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ü inceleyin

Google Cloud Console - Artifact Registry - Repositories'e gidin. container-dev-repo adresini tıklayın ve java-hello-world görüntüsünün mevcut olup olmadığını kontrol edin. Resmi tıklayın ve tag1 olarak etiketlenmiş resmi not edin. Güvenlik Açığı Taraması'nın çalıştığını veya zaten tamamlandığını ve tespit edilen güvenlik açıklarının sayısının görünür olduğunu 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ı çalışma alanından hariç tutmanızı isteyen bir pop-up görürseniz Exclude in workspace bağlantısını tıklayın

Aşağıdaki adımlarda Artifact Registry depo konumunu girmeniz gerekir. Konumun biçimi şu şekildedir:

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 Run on Kubernetes seçeneğini belirleyin

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

<PROJE_KİMLİĞİ> yerine kullanılacak adres konumunu eklemeyi unutmayın. gerçek değeriniz için

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

Kubernetes'te çalıştırma işlemini ilk kez çalıştırdığınızda Cloud Code, sizden hedef görüntü deposu konumu ister. Kod deposu URL'si, sağlandıktan sonra uygulama klasöründe oluşturulan .vscode/launch.json dosyasında depolanır.

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

Cloud Console - Artifact Registry - Repositories'e gidin container-dev-repo bağlantısını tıklayıp java-hello-world görüntüsünde latest etiketli yeni bir görüntü olup olmadığını kontrol 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 hello world uygulama sayfasını görürsünüz.

d3e49693b0383a5d.png

Uygulama kodunu güncelleyin

Şimdi uygulamayı güncelleyerek değişikliğin kümedeki dağıtımda hemen gerçekleştiğini görün:

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

"Çalışıyor!" ifadesinden, 20. satırdaki metni değiştirin. olarak değiştirirseniz derleme ve dağıtım işleminin hemen başladığını göreceksiniz.

Dağıtımın sonunda, yönlendirilen URL'yi tekrar tıklayın veya değişikliğin dağıtıldığını görmek için tarayıcı penceresini uygulamayla birlikte yenileyin:

41787b1da54ff137.png

Tekrar Cloud Console - Artifact Registry - Repositories'e gidin container-dev-repo klasörünü tıklayıp java-hello-world görüntüsüne bakın ve yeni resmi not edin

5. Dil paketleriyle çalışma

Bu bölümde, Artifact Registry Java deposu oluşturmayı ve bu depoya paketleri farklı uygulamalarda kullanarak yüklemeyi öğreneceksiniz.

Java paketi deposu oluşturma

Cloud Shell'den aşağıdaki komutu çalıştırarak Java yapıları için depo oluşturun:

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üntülenirse 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

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

gcloud auth login --update-adc

Artifact Registry için Maven'i 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

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

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

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

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

Aşağıda, size referans olması için eksiksiz bir dosya örneği verilmiştir. <PROJECT> projesini değiştirdiğinizden emin olun girin.

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

Maven'de yapılandırılan Artifact Registry sayesinde artık Artifact Registry'yi kullanarak Java Jar'lerini kuruluşunuzdaki diğer projeler tarafından kullanılmak üzere depolayabilirsiniz.

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 edin

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.

İşledikleriniz

  • Kapsayıcılar ve Dil Paketleri İçin Depolar Oluşturuldu
  • 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 kullanacak şekilde yapılandırıldı

Temizleme

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

gcloud projects delete $PROJECT_ID