1. Genel Bakış
Artifact Registry, farklı yapay ürün türlerini depolamanıza, tek bir projede birden fazla depo oluşturmanıza ve her depoyla belirli bir bölgeyi veya çoklu bölgeyi ilişkilendirmenize olanak tanır. Birkaç depo modu vardır. Her mod farklı bir amaca hizmet eder. Aşağıdaki şemada, depoları farklı modlarda birlikte kullanabileceğiniz birçok olası yöntemden biri gösterilmektedir. Şemada, iki Google Cloud projesi arasındaki bir iş akışı gösterilmektedir. Geliştirme projesinde geliştiriciler bir Java uygulaması oluşturur. Ayrı bir çalışma zamanı projesinde, başka bir derleme Google Kubernetes Engine'e dağıtım için uygulamayı içeren bir kapsayıcı resmi oluşturur.

Bu laboratuvarda, aşağıdaki görevleri nasıl gerçekleştireceğinizi öğreneceksiniz.
- Özel paketlerinizi dağıtmak için standart depoları kullanma
- Maven Central paketlerini önbelleğe almak için uzak depoları kullanma
- Birden fazla yukarı akış deposunu tek bir yapılandırmada birleştirmek için sanal depoları kullanma
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.
Workspace kurulumu
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)')
API'leri etkinleştir
gcloud services enable artifactregistry.googleapis.com
Depoyu klonlama
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis
2. Standart depolar
Standart depolar, özel paketlerinizi saklamanın ve diğer uygulamalarınızda paylaşmanın bir yolunu sunar.
Standart bir Maven 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.
gcloud artifacts repositories describe container-dev-java-repo \
--location=us-central1
Aşağıdakine benzer bir yanıt döndürmelidir.
Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'
Artifact Registry için Maven'i yapılandırma
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
Önceki komut, projelerinizin pom.xml dosyasına eklenecek XML'yi döndürür.
- repositories (depolar) bölümünde, Maven'in geçerli proje tarafından kullanılmak üzere uzak yapıları nereden indirebileceği belirtilir.
- distributionManagement bölümü, projenin dağıtıldığında hangi uzak depoya gönderileceğini belirtir.
- extensions (uzantılar) bölümüne, Artifact Registry'ye bağlanmak için gereken kimlik doğrulama ve aktarım katmanını etkinleştiren artifactregistry-maven-wagon eklenir.
- Not: Uzantılar pom.xml veya extensions.xml içinde bulunabilir. Projenin bir üst projeye bağlı olduğu durumlarda, bu bağımlılıklara pom.xml'deki girişlerin geri kalanı yüklenmeden önce erişilir. Üst öğenin uzantıya erişebilmesi için uzantı, pom.xml'den önce yüklenen bir extensions.xml dosyasına yerleştirilebilir. Böylece, üst öğe bağımlılıkları için kullanılabilir.
Üç bölümü kopyalayın, ardından Cloud Shell Düzenleyici'de pom.xml dosyasını açın ve döndürülen ayarları, kapatma project etiketinin hemen içindeki dosyanın en altına ekleyin.
İpucu: Cloud Shell'de, düzenleyiciyi geçerli dizinde açmak için terminalde aşağıdaki komutu çalıştırın.
cloudshell workspace .
Örnek: (URL'lerinizde proje adlarınız farklı olacaktır)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Java paketinizi Artifact Registry'ye yükleme
Maven'da 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 -DskipTests
Bu komutu tekrar çalıştırmak istiyorsanız pom.xml dosyasındaki sürümü artırdığınızdan emin olun.
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:

3. Uzak depolar
Uzak Depolar, güvenilirliği ve güvenliği artırmak için üçüncü taraf paketlerini önbelleğe alma olanağı sağlar.
Uzak depo oluşturma
Not: Kimlik doğrulama ve yapılandırma hakkında ayrıntılı bilgi için ürün belgelerini inceleyin.
Cloud Shell'den aşağıdaki komutu çalıştırarak Maven Central yapıları için uzak bir depo oluşturun:
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Depoyu konsolda inceleme
Cloud Console - Artifact Registry - Repositories'e gidin. maven-central-cache simgesini tıklayın. Oluşturulduğunu ve şu anda boş olduğunu göreceksiniz.
Depoyu terminalde inceleme
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Depoyu projenize entegre etme
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=maven-central-cache \
--location=us-central1
pom.xml dosyanıza depo bölümünü ekleyin. Çıkıştaki dış <repositories> etiketini kopyalamadığınızdan emin olun.
Her depo girişinin benzersiz bir kimliğe sahip olmasını sağlamak için yeni eklenen deponun kimliğini "central" olarak değiştirin.
Örnek: (URL'lerinizde proje adlarınız farklı olacaktır)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>central</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Projeniz için extensions.xml oluşturmak üzere terminalinizde aşağıdaki komutları çalıştırın. Maven'in üst veya eklenti bağımlılıklarını Artifact Registry'den çözebilmesini sağlamak için çekirdek uzantıları mekanizmasını kullanın.
mkdir .mvn
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
EOF
Uzak depodan bağımlılıkları çekme
Uygulamanızı uzak depoyu kullanarak derlemek için aşağıdaki komutu çalıştırın:
rm -rf ~/.m2/repository
mvn compile
Konsoldaki paketleri inceleme
Cloud Console - Artifact Registry - Repositories'e gidin. maven-central-cache simgesini tıklayın ve orada önbelleğe alınan ikili yapıların şunları yaptığını kontrol edin:

4. Sanal depolar
Sanal depolar, tek bir yapılandırma üzerinden erişilebilen birden fazla depo için arayüz görevi görür. Bu, yapay ürünlerinizin tüketicileri için istemci yapılandırmasını basitleştirir ve bağımlılık karmaşası saldırılarını azaltarak güvenliği artırır.
Politika dosyası oluşturma
cat > ./policy.json << EOF
[
{
"id": "private",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
"priority": 100
},
{
"id": "central",
"repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
"priority": 80
}
]
EOF
Sanal depoyu oluşturma
gcloud artifacts repositories create virtual-maven-repo \
--project=${PROJECT_ID} \
--repository-format=maven \
--mode=virtual-repository \
--location=us-central1 \
--description="Virtual Maven Repo" \
--upstream-policy-file=./policy.json
Depoyu projenize entegre etme
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=virtual-maven-repo \
--location=us-central1
pom dosyanızdaki tüm depolar bölümünü, çıktıda yer alan sanal depolar bölümüyle değiştirin.
Örnek: (URL'lerinizde proje adlarınız farklı olacaktır)
...
<distributionManagement>
<snapshotRepository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</snapshotRepository>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>artifact-registry</id>
<url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<build>
<extensions>
<extension>
<groupId>com.google.cloud.artifactregistry</groupId>
<artifactId>artifactregistry-maven-wagon</artifactId>
<version>2.2.0</version>
</extension>
</extensions>
</build>
</project>
Sanal depodan bağımlılıkları çekme
Sanal depo, geçiş deposu olduğundan herhangi bir gerçek paketi depolamaz. Süreci net bir şekilde göstermek için daha önce oluşturduğunuz maven-central-cache deposunu silip yeniden oluşturarak boş bir depoyla tekrar başlayacaksınız.
Önbellek deposunu yeniden oluşturmak için aşağıdaki komutları çalıştırın.
gcloud artifacts repositories delete maven-central-cache \
--project=$PROJECT_ID \
--location=us-central1 \
--quiet
gcloud artifacts repositories create maven-central-cache \
--project=$PROJECT_ID \
--repository-format=maven \
--location=us-central1 \
--description="Remote repository for Maven Central caching" \
--mode=remote-repository \
--remote-repo-config-desc="Maven Central" \
--remote-mvn-repo=MAVEN-CENTRAL
Boş depoyu konsolda inceleyebilirsiniz. Cloud Console - Artifact Registry - Repositories'e (Cloud Console - Artifact Registry - Depolar) gidin.
Şimdi de aşağıdaki komutla projenizi oluşturarak sanal depoyu kullanın.
rm -rf ~/.m2/repository
mvn compile
Konsoldaki paketleri inceleme
Cloud Console - Artifact Registry - Repositories'e gidin. maven-central-cache simgesini tıklayın ve ikili yapıtların sanal depodan çekilecek şekilde yapılandırıldığını ancak sonuçta maven-central-cache'dan çekildiğini kontrol edin:

5. Tebrikler!
Tebrikler, codelab'i tamamladınız.
Kapsamınıza aldığınız alanlar
- Özel paketlerinizi dağıtmak için standart depoları kullanma
- Maven Central paketlerini önbelleğe almak için uzak depoları kullanma
- Birden fazla yukarı akış deposunu tek bir yapılandırmada birleştirmek için sanal depoları kullanma
Temizleme
Projeyi silmek için aşağıdaki komutu çalıştırın:
gcloud projects delete ${PROJECT_ID}
—
Son güncelleme: 22.03.2023