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 ile Maven gibi araçlarla kullanılmak üzere dile dayalı bağımlılık yönetimi desteğiyle birlikte sunulur. 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'de bulunan bazı özellikler hakkında bilgi edineceksiniz.
Öğrenecekleriniz
Bu laboratuvarın öğrenme hedefleri nelerdir?
- Container'lar ve dil paketleri için depolar oluşturma
- Artifact Registry ile container görüntülerini yönetme
- Maven'ı Java bağımlılıkları için Artifact Registry'yi kullanacak şekilde yapılandırma
2. Kurulum ve Gereksinimler
Yönlendirmesiz ortam kurulumu
- 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.



- 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. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırma ücreti alınmaması için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından 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 kodu alma
Bu laboratuvarın kaynak kodu, GitHub'daki GoogleCloudPlatform kuruluşunda yer alır. Aşağıdaki komutla klonlayın ve dizine gidin.
git clone https://github.com/GoogleCloudPlatform/cloud-code-samples/
3. Container görüntüleriyle çalışma
Artifact Registry'de Docker deposu oluşturma
Artifact Registry, kapsayıcı görüntülerini ve dil paketlerini yönetmeyi destekler. Farklı yapay nesne türleri farklı spesifikasyonlar gerektirir. Örneğin, Maven bağımlılıkları için yapılan istekler, Node bağımlılıkları için yapılan isteklerden farklıdır.
Artifact Registry'nin farklı API spesifikasyonlarını destekleyebilmesi için API yanıtlarının hangi biçimde olmasını istediğinizi bilmesi gerekir. Bunu yapmak için bir depo oluşturup istenen depo türünü belirten --repository-format işaretini iletmeniz gerekir.
Docker görüntüleri için bir depo oluşturmak üzere 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ünürse Yetkilendir'i tıklayın.
Google Cloud Console - Artifact Registry - Repositories'e gidin ve container-dev-repo adlı yeni oluşturduğunuz Docker deposunu bulun. Bu 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. Ayrı kimlik bilgileri ayarlamak yerine Docker, gcloud kimlik bilgilerinizi sorunsuz bir şekilde kullanacak şekilde yapılandırılabilir.
Cloud Shell'de aşağıdaki komutu çalıştırarak Docker'ı, us-central1 bölgesindeki Artifact Registry'e gelen isteklerin kimliğini Google Cloud CLI ile doğrulayacak şekilde yapılandı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ı keşfetme
Ö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örde, basit bir web sayfası oluşturan örnek bir Java uygulaması bulunur. Bu klasörde, bu laboratuvar için geçerli olmayan çeşitli dosyaların yanı sıra kaynak kodu (src klasöründe) ve yerel olarak bir kapsayıcı görüntüsü oluşturmak için kullanacağımız bir Dockerfile da bulunur.
Container görüntüsünü oluşturma
Artifact Registry'de container görüntüleri depolayabilmek için bir depo oluşturmanız gerekir.
Kapsayıcı görüntüsünü oluşturmak ve bir sonraki adımda deponuza aktarmak için uygun şekilde etiketlemek üzere aşağıdaki komutu çalıştırın:
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'deki görüntüyü inceleme
Google Cloud Console - Artifact Registry - Repositories'e gidin.. container-dev-repo simgesini tıklayın ve java-hello-world görüntüsünün orada olduğundan emin olun. Resmi tıklayın ve tag1 ile etiketlenmiş resmi not edin. Güvenlik açığı taramasının çalışmakta olduğunu veya tamamlandığını ve tespit edilen güvenlik açığı sayısını görebilirsiniz.

Güvenlik açığı sayısını tıkladığınızda, resimde tespit edilen güvenlik açıkları listesini CVE bülten adı ve önem derecesiyle birlikte görürsünüz. Daha fazla ayrıntı almak için listelenen her güvenlik açığında GÖRÜNTÜLE'yi tıklayabilirsiniz:

4. Dil paketleriyle çalışma
Bu bölümde, Artifact Registry Java deposunu nasıl oluşturacağınızı ve paketleri bu depoya nasıl yükleyeceğinizi, farklı uygulamalarda nasıl kullanacağınızı öğreneceksiniz.
Java paketi deposu oluşturma
Cloud Shell'den aşağıdaki komutu çalıştırarak Java yapıları için bir 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ünürse Yetkilendir'i tıklayın.
Google Cloud Console - Artifact Registry - Repositories'e gidin ve container-dev-java-repo adlı yeni oluşturduğunuz Maven deposunu bulun. Bu depoyu tıkladığınızda şu anda boş olduğunu görebilirsiniz.
Artifact Repository'de kimlik doğrulamayı ayarlama
Artifact Registry kimlik bilgisi yardımcısının, depolarla bağlantı kurarken kimlik doğrulaması yapabilmesi için aşağıdaki komutu kullanarak Uygulama Varsayılan Kimlik Bilgileri'nin (ADC) bilinen konumunu kullanıcı hesabı kimlik bilgilerinizle güncelleyin:
gcloud auth login --update-adc
Artifact Registry için Maven'i yapılandırma
Cloud Shell Düzenleyici'yi açmak ve uygulama klasörünü çalışma alanına eklemek için java-hello-world klasöründen aşağıdaki komutu çalıştırın:
cloudshell workspace .
"Site artık çalışmıyor mu?" ve ardından "Çerezlere izin ver"i tıklayarak üçüncü taraf çerezlerini etkinleştirin.
Tarayıcı yeniden yüklendikten sonra Cloud Shell'i açın ve uygulama klasörünü yüklemek için yukarıdaki komutu bir kez daha çalıştırın.


Cloud Shell Düzenleyici'de pom.xml dosyasını açın ve "Open Editor"ı (Düzenleyiciyi Aç) tıklayın.

Cloud Shell Düzenleyici'den terminali açın ve Java projenize eklenecek depo yapılandırmasını yazdırmak için aşağıdaki komutu çalıştırın:
gcloud artifacts print-settings mvn \
--repository=container-dev-java-repo \
--location=us-central1
ve döndürülen ayarları pom.xml dosyasındaki uygun bölümlere ekleyin.
Dahili terminal içeren Cloud Editor görünümü:

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>
Depolar bölümünü güncelleme
<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ına ilişkin bir örneği burada bulabilirsiniz. <PROJECT> kısmını 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 Artifact Registry'yi yapılandırdıktan sonra artık kuruluşunuzdaki diğer projelerde kullanılacak Java JAR'larını 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'deki Java paketini kontrol etme
Cloud Console - Artifact Registry - Repositories'e gidin. container-dev-java-repo'ı tıklayın ve hello-world ikili yapısının orada olduğundan emin olun:

5. Tebrikler!
Tebrikler, codelab'i tamamladınız.
Kapsamda olanlar
- Container'lar ve Dil Paketleri İçin Oluşturulan Depolar
- Artifact Registry ile yönetilen container görüntüleri
- Java bağımlılıkları için Artifact Registry'yi kullanacak şekilde Maven'ı yapılandırdıysanız
Temizleme
Projeyi silmek için aşağıdaki komutu çalıştırın:
gcloud projects delete $PROJECT_ID