1. Hedefler
Bu eğiticide preview, canary ve prod adlı üç GKE kümesi oluşturacaksınız. Ardından, her kümeye karşılık gelen bir Cloud Deploy hedefi ve bu hedeflerde dağıtım gerçekleştirmek için uygulanacak adım sırasını tanımlayan bir Cloud Deploy işlem hattı oluşturacaksınız.
Dağıtım akışı, Cloud Deploy sürümü oluşturacak ve dağıtımı önizleme kümesinde gerçekleştirecek bir Cloud Build ardışık düzeni tarafından tetiklenir. Önizlemedeki dağıtımın başarılı olduğunu ve beklendiği gibi çalıştığını doğruladıktan sonra, sürümü canary kümesinde manuel olarak yükseltirsiniz. Üretim kümesinde sürümün tanıtımı için onay gerekir. Cloud Deploy kullanıcı arayüzünde üretim ardışık düzenini onaylayıp son olarak tanıtımını yaparsınız.
Bu eğitimin hedefleri aşağıdaki adımlara ayrılabilir:
- Çalışma alanınızı hazırlama
- Cloud Deploy hedeflerini tanımlama
- Cloud Deploy ardışık düzenini tanımlama
- Sürüm oluşturma
- Dağıtımı yükseltme
- Üretim sürümünü onaylama
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 dizisidir ve istediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalı 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. Bu nedenle, proje kimliğini beğenmezseniz başka bir rastgele kimlik oluşturabilir veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını görebilirsiniz. Proje oluşturulduktan sonra bu değer "dondurulur". - 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 codelab'in sonunda bulunan "temizleme" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
2. Platform Kurulumu
Çalışma alanınızı hazırlama
Bu eğiticiyi çalıştırmak için gereken ortamı burada ayarlayacağız. Bu adım tamamlandığında, dağıtımları çalıştırabileceğimiz bir GKE kümesi oluşturmuş olacağız.
- gcloud yapılandırma varsayılanlarını ayarlama
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- Depoyu Klonla
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- Ortam değişkenlerini ayarlama
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- API'leri etkinleştirme
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- GKE kümeleri oluşturma
`gcloud container clusters create preview \`
--zone=us-central1-a --async
`gcloud container clusters create canary \`
--zone=us-central1-b --async
`gcloud container clusters create prod \`
--zone=us-central1-c
Cloud Deploy hedeflerini tanımlama
- Cloud Shell'de aşağıdaki komutu kullanarak dağıtım dizininde preview.yaml adlı bir dosya oluşturun:
cat <<EOF >deploy/preview.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: preview
annotations: {}
labels: {}
description: Target for preview environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-a/clusters/preview
EOF
As you noticed, the "kind" tag is "Target". It allows us to add some metadata to the target, a description and finally the GKE cluster where the deployment is supposed to happen for this target.
- Cloud Shell'de aşağıdaki komutu kullanarak dağıtım dizininde canary.yaml adlı bir dosya oluşturun:
cat <<EOF >deploy/canary.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: canary
annotations: {}
labels: {}
description: Target for canary environment
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-b/clusters/canary
EOF
- Cloud Shell'de aşağıdaki komutu kullanarak dağıtım dizininde prod.yaml adlı bir dosya oluşturun:
cat <<EOF >deploy/prod.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: Target
metadata:
name: prod
annotations: {}
labels: {}
description: Target for prod environment
requireApproval: true
gke:
cluster: projects/$PROJECT_ID/locations/us-central1-c/clusters/prod
EOF
requireApproval etiketinin true olarak ayarlandığını fark edin. Bu, onay verilene kadar prod hedefinde promosyona izin vermez. Bir sürümü onaylamak için roles/clouddeploy.approver rolü gerekir.
- Dağıtım hedeflerini oluşturma
`gcloud config set deploy/region us-central1`
gcloud beta deploy apply --file deploy/preview.yaml
gcloud beta deploy apply --file deploy/canary.yaml
gcloud beta deploy apply --file deploy/prod.yaml
3. Uygulama Oluşturma
Yeni bir uygulama oluşturma sürecinde, genellikle otomatik derlemeler, entegrasyon testleri ve dağıtımlar gerçekleştirmek için CICD ardışık düzeni ayarlanır. Aşağıdaki adımlar, yeni bir uygulamanın kurulum sürecinin bir parçası olarak kabul edilir. Her yeni uygulamanın dağıtım hattı yapılandırılır.
Cloud Deploy ardışık düzenini tanımlama
- Cloud Shell'de aşağıdaki komutu kullanarak dağıtım dizininde pipeline.yaml adlı bir dosya oluşturun:
cat <<EOF >>deploy/pipeline.yaml
apiVersion: deploy.cloud.google.com/v1beta1
kind: DeliveryPipeline
metadata:
name: sample-app
labels:
`app: sample-app`
description: delivery pipeline
serialPipeline:
stages:
- targetId: preview
`profiles:`
`- preview`
- targetId: canary
`profiles:`
`- canary`
- targetId: prod
`profiles:`
`- prod`
EOF
As you noticed, the "kind" tag is "DeliveryPipeline". It lets you define the metadata for the pipeline, a description and an order of deployment into various targets via serialPipeline tag.
serialPipeline etiketi, bu yayın hattının dağıtılacak şekilde yapılandırıldığı tüm hedeflerin listesi olan aşamalar adlı bir etiket içerir.
targetId, yayın ardışık düzeninin bu aşamasında kullanılacak belirli hedefi tanımlar. Değer, hedef tanımındaki metadata.name özelliğidir.
profiles, skaffold.yaml dosyasındaki sıfır veya daha fazla Skaffold profil adının listesidir. Cloud Deploy, sürümü oluştururken skaffold render ile profili kullanır.
- Ardışık Düzen Uygulama
gcloud beta deploy apply --file deploy/pipeline.yaml
4. Geliştirme Aşaması
Uygulamalar geliştirilirken otomatik CICD araç zincirleri öğeleri oluşturup depolar. Uygulamayı skaffold kullanarak oluşturmak ve dağıtım için öğeleri Cloud Deploy ile depolamak üzere aşağıdaki komutlar yürütülür. Bu adım, her uygulama derlemesi için CICD süreciniz tarafından gerçekleştirilir.
- Skaffold ile uygulamayı oluşturma ve depolama
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. Yayın aşaması
CICD sürecinizin sonunda, genellikle kod üretime yönelik olarak etiketlendiğinde cloud deploy release komutunu çağırarak yayın sürecini başlatırsınız. Daha sonra dağıtım doğrulandıktan ve onaylandıktan sonra, otomatik süreçler veya manuel onaylar aracılığıyla işlemi yükselterek ve onaylayarak sürümü çeşitli hedef ortamlara taşırsınız.
Sürüm oluşturma
Cloud Deploy'un işleyiş şeklini anlamak için bu eğitimin önceki bölümlerinde Cloud Deploy dosyaları oluşturmuştuk. Demo amacıyla aynı Cloud Deploy dosyalarını oluşturup örnek bir Go uygulamasıyla birlikte bir GitHub deposuna gönderdik. Bu uygulamanın yayınlanması için Cloud Deploy'i kullanacağız.
export REL_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud beta deploy releases create \
sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--description="Release demo" \
--build-artifacts=artifacts.json \
--annotations="release-id=rel-${REL_TIMESTAMP}"
Sürümü inceleme
Cloud Deploy sürümü oluşturulduğunda, önizleme olan ilk hedefte otomatik olarak kullanıma sunulur.
- Google Cloud Console'da <Cloud Deploy>'a gidin.
- "sample-app"i tıklayın.
Bu ekranda, ardışık düzeninizin grafik gösterimini görürsünüz.
- Önizleme kutusunun sol tarafında yeşil bir ana hat olduğunu doğrulayın. Bu, sürümün söz konusu ortama dağıtıldığı anlamına gelir.
- İsteğe bağlı olarak, ekranın alt kısmındaki Yayın Ayrıntıları bölümünde yayın adını tıklayarak yayınla ilgili ek ayrıntıları inceleyin.
- Sürümün uygulamayı başarıyla dağıttığını doğrulamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
gcloud container clusters get-credentials preview --zone us-central1-a && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
- 8080 numaralı bağlantı noktasında önizle'yi seçin.
Bu işlem sizi "Hello World!" mesajının gösterildiği yeni bir sayfaya yönlendirir.
- Bağlantı yönlendirmeyi sonlandırmak için terminalde
ctrl+cöğesini kullanın.
Yeni şarkı tanıtımı
Sürümünüz, işlem hattındaki ilk hedefe (önizleme) dağıtıldığına göre artık bir sonraki hedefe (canary) yükseltebilirsiniz. İşlemi başlatmak için aşağıdaki komutu çalıştırın.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
Yayın promosyonunu inceleme
- Google Cloud Console'da sample-app işlem hattına gidin.
- Canary kutusunun sol tarafında, sürümün bu ortama dağıtıldığını gösteren yeşil bir ana hat olduğunu doğrulayın.
- Uygulamaya tünel oluşturarak uygulamanın doğru şekilde dağıtıldığını doğrulayın.
gcloud container clusters get-credentials canary --zone us-central1-b && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
- 8080 numaralı bağlantı noktasında önizle'yi seçin.
Bu işlem sizi "Hello World!" mesajının gösterildiği yeni bir sayfaya yönlendirir.
- Bağlantı yönlendirmeyi sonlandırmak için terminalde
ctrl+cöğesini kullanın.
Üretim sürümünü onaylama
prod.yaml aracılığıyla üretim hedefi oluşturduğumuzda requireApproval etiketini true olarak belirttiğimizi hatırlayın. Bu işlem, üretimde tanıtım için onay zorunluluğu getirir.
- Aşağıdaki komutla kanarya sürümünü üretime yükseltin.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Google Cloud Console'da sample-app işlem hattına gidin.
- "1 bekliyor" yazan sarı göstergeye dikkat edin.
Bu mesaj, canlı sürüme dağıtım için sıraya alınmış ancak inceleme ve onay gerektiren bir sürüm olduğunu gösterir.
- Sarı bildirimin hemen altındaki "İncele" düğmesini tıklayın.
- Üretime yönelik onay ekranına erişmek için sonraki ekranda tekrar "İncele"yi tıklayın.
- İsteğe bağlı olarak, değişiklikleri incelemek için Manifest Diff'i inceleyin. Bu durumda, tamamen yeni bir dosya.
- "Onayla" düğmesini tıklayın.
- örnek uygulama ardışık düzeni sayfasına dönün. Burada, üretime sürümün devam ettiğini görürsünüz.
Üretim sürümünü inceleme
Diğer ortamlarda olduğu gibi, aşağıdaki adımları uygulayarak dağıtım tamamlandığında inceleyebilirsiniz.
- Bağlantı noktası yönlendirmeyi oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın.
gcloud container clusters get-credentials prod --zone us-central1-c && kubectl port-forward --namespace default $(kubectl get pod --namespace default --selector="app=cloud-deploy-tutorial" --output jsonpath='{.items[0].metadata.name}') 8080:8080
- Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
- 8080 numaralı bağlantı noktasında önizle'yi seçin.
Bu işlem sizi "Hello World!" mesajının gösterildiği yeni bir sayfaya yönlendirir.
- Bağlantı yönlendirmeyi sonlandırmak için terminalde
ctrl+cöğesini kullanın.