1. Genel Bakış
Artifact Registry, farklı yapı 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ı yol gösterilmektedir. Bu şemada, iki Google Cloud projesinin iş akışı gösterilmektedir. Bir 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ılacak uygulamayı içeren bir container görüntüsü oluşturur.
Bu laboratuvarda, aşağıdaki görevleri nasıl gerçekleştireceğinizi öğreneceksiniz.
- Özel paketlerinizi dağıtmak için Standart Depo'yu kullanın
- Maven merkezi paketleri önbelleğe almak için Remote Repositories'i kullanın
- Birden fazla yukarı akış deposunu tek bir yapılandırmada birleştirmek için Sanal Depoları kullanın
Kendi hızınızda ortam kurulumu
- 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.
- 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. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir 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ğini (genellikle
PROJECT_ID
olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, 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 oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Workspace Kurulumu
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)')
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 depolayabileceğiniz ve diğer uygulamalarınızda paylaşabileceğiniz bir yöntem sunar.
Standart maven 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 (Depolar) gidin ve container-dev-java-repo
adlı yeni oluşturduğunuz Maven deposunu tıklayın. 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
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
Önceki komut, projelerinize (pom.xml) eklenecek olan xml dosyasını döndürür.
- Depolar bölümü, Maven'in mevcut proje tarafından kullanılmak üzere uzak yapıları nereye indirebileceğini belirtir.
- distributionManagement bölümü, projenin dağıtıldığında hangi uzak depoya aktaracağını belirtir.
- extensions bölümü, Artifact Registry'ye bağlanmak için gerekli olan kimlik doğrulama ve aktarım katmanını etkinleştirecek eserregistry-maven-wagon'u ekler.
- Not: Uzantılar pom.xml veya extensions.xml dosyasında bulunabilir. Projenin bir üst projeye bağlı olduğu durumlarda, bu bağımlılıklara pom.xml dosyasındaki diğer girişler yüklenmeden önce erişilir. Üst öğenin uzantıya erişebildiğinden emin olmak için uzantı, pom.xml dosyasından önce yüklenen bir extensions.xml dosyasına yerleştirilebilir. Böylece, üst bağımlılıklar için kullanılabilir hale gelir.
Üç bölümü kopyalayın, ardından pom.xml
öğesini Cloud Shell Düzenleyici'de açın ve döndürülen ayarları dosyanın alt kısmındaki project
kapanış etiketinin hemen içine ekleyin.
İpucu: Cloudshell'de, düzenleyiciyi geçerli dizinde açmak için terminalde aşağıdaki komutu çalıştırın.
cloudshell workspace .
Örnek: (projenizin adları URL'lerinizde 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ükleyin
Maven'de yapılandırılan Artifact Registry sayesinde artık Artifact Registry'yi kullanarak Java jar'larını 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 -DskipTests
Bu komutu tekrar çalıştırmak istiyorsanız pom.xml dosyasındaki sürümü artırın.
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:
3. Uzak depolar
Remote Repositories, daha fazla güvenilirlik ve güvenlik için üçüncü taraf paketleri önbelleğe alma özelliği sunar.
Uzak depo oluşturma
Not: Kimlik doğrulama ve yapılandırma hakkında ayrıntılı bilgi için ürün belgelerini inceleyin.
Maven Central yapıları için uzak depo oluşturmak üzere Cloud Shell'den aşağıdaki komutu çalıştırın:
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
klasörünü tıklayın. Oluşturulduğunu ve şu anda boş olduğunu göreceksiniz
Terminaldeki depoyu inceleyin
gcloud artifacts repositories describe maven-central-cache \
--location=us-central1
Depoyu projenize entegre edin
Aşağıdaki komutu çalıştırarak Java projenize eklenecek depo yapılandırmasını yazdırın:
gcloud artifacts print-settings mvn \
--repository=maven-central-cache \
--location=us-central1
Depo bölümünü pom.xml dosyanıza ekleyin. Dış <depolar> depolarını kopyalamadığınızdan emin olun etiketini çıkartın.
Yeni eklenen deponun kimliğini "central" olarak değiştirin ile birlikte her depo girişinin benzersiz bir kimliğe sahip olduğundan emin olun.
Örnek: (projenizin adları URL'lerinizde 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. Temel uzantı mekanizmasını kullanarak Maven'in Artifact Registry'deki üst veya eklenti bağımlılıklarını çözümleyebilmesini sağlayı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
Bağımlıları Remote Repository'den çekme
Remote Repository'yi kullanarak uygulamanızı derlemek için aşağıdaki komutu çalıştırın:
rm -rf ~/.m2/repository
mvn compile
Paketleri konsolda inceleyin
Cloud Console - Artifact Registry - Repositories'e gidin maven-central-cache
sayfasını tıklayın ve orada önbelleğe alınmış ikili yapıların olup olmadığını kontrol edin:
4. Sanal depolar
Sanal Depolar, tek bir yapılandırma üzerinden birden fazla depoya erişilebilecek bir arayüz görevi görür. Bu sayede, yapılarınızın tüketicileri için istemci yapılandırmasını basitleştirir ve bağımlılık karışıklığı 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 depo 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 edin
Aşağıdaki komutu çalıştırarak Java projenize eklenecek depo yapılandırmasını yazdırın:
gcloud artifacts print-settings mvn \
--repository=virtual-maven-repo \
--location=us-central1
Pond'unuzdaki depolar bölümünün tamamını, çıkıştaki bir sanal depo bölümüyle değiştirin.
Örnek: (projenizin adları URL'lerinizde 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>
Bağımlılıkları Sanal Depo'dan çekme
Sanal kod deposu, geçiş özellikli olduğundan ve gerçek paketleri depolamayacağından, süreci açıkça göstermek için daha önce oluşturduğunuz maven-central-cache deposunu silip yeniden oluşturarak boş depoyla baştan başlamanız gerekir.
Ö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 gidin
Şimdi aşağıdaki komutla projenizi derleyerek sanal depoyu çalıştırın
rm -rf ~/.m2/repository
mvn compile
Paketleri konsolda inceleyin
Cloud Console - Artifact Registry - Repositories bölümüne gidin maven-central-cache
bölümünü tıklayın ve ikili yapıların sanal kod deposundan çekilecek şekilde yapılandırıldığından ancak maven-central-cache
'den çekilip çekilmediğini kontrol edin:
5. Tebrikler!
Tebrikler, codelab'i tamamladınız.
İşledikleriniz
- Özel paketlerinizi dağıtmak için Standart Depolar kullanıldı
- Maven merkezi paketleri önbelleğe almak için Remote Repositories kullanıldı
- Birden fazla yukarı akış deposunu tek bir yapılandırmada birleştirmek için Sanal Kod Depoları kullanıldı
Temizleme
Projeyi silmek için aşağıdaki komutu çalıştırın
gcloud projects delete ${PROJECT_ID}
—
Son güncelleme: 22.03.2023