Cloud Deploy ile yayınlama

1. Hedefler

Bu eğitimde, önizleme, kanarya ve üretim 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ştirecek adım sırasını tanımlayacak bir Cloud Deploy ardışık düzeni oluşturacaksınız.

Dağıtım akışı, Cloud Deploy sürümünü 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ün kanarya kümesinde manuel olarak tanıtımını yaparsınız. Sürümün prod grubunda tanıtılması için onay gerekir. Cloud Deploy kullanıcı arayüzünde prod ardışık düzenini onaylar ve ardından tanıtımını yaparsınız.

Bu eğitimdeki hedefler 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

Kendi hızınızda ortam kurulumu

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcılarının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir ve istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğine (genellikle PROJECT_ID olarak tanımlanır) referans vermeniz gerekir. Bu kimliği beğenmezseniz rastgele başka bir kimlik oluşturun veya kendi kimliğinizi deneyip kullanılabilir olup olmadığını kontrol edin. Proje oluşturulduktan sonra ise "dondurulur".
  • Bazı API'lerin kullandığı üçüncü bir değer de vardır: Proje Numarası. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde 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ırmak çok pahalı olmayacaktır. Bu eğiticinin dışında faturalandırılmamak için kaynakları kapatmak üzere codelab'in sonundaki "temizlik" talimatlarını uygulayın. Google Cloud'un yeni kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.

2. Platform Kurulumu

Çalışma alanınızı hazırlama

Bu eğiticiyi çalıştırmak için gereken ortamımızı burada ayarlayacağız. Bu adım tamamlandığında, dağıtımları çalıştırabileceğimiz bir GKE kümesi oluşturulur.

  1. gcloud config varsayılanlarını ayarlama

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Depo klonlama

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. 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)")

  1. 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` 
  1. 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

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

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

Doğru olarak ayarlanmış requireApproval etiketine dikkat edin. Bu durumda, onay verilene kadar promosyonun üretim hedefine eklenmesine izin verilmez. Bir sürümü onaylamak için roles/clouddeploy.approver rolüne sahip olmanız gerekir.

  1. 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 kapsamında CICD ardışık düzeni genellikle otomatik derlemeler, entegrasyon testleri ve dağıtımlar gerçekleştirecek şekilde ayarlanır. Aşağıdaki adımlar, yeni bir uygulamanın kurulum sürecinin bir parçası olarak kabul edilir. Her yeni uygulamada yapılandırılmış bir dağıtım ardışık düzeni bulunur.

Cloud Deploy ardışık düzenini tanımlama

  1. 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ınlama ardışık düzeninin dağıtılmak üzere yapılandırılacağı tüm hedeflerin listesi olan stages adlı bir etiket içerir.

targetId, yayınlama ardışık düzeninin bu aşamasında kullanılacak hedefi tanımlar. Değer, hedef tanımındaki metadata.name mülküdür.

profiles, skaffold.yaml dosyasından sıfır veya daha fazla Skaffold profil adının listesidir. Cloud Deploy, sürümü oluştururken skaffold oluşturma aracıyla profili kullanır.

  1. 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şturur ve depolar. Aşağıdaki komutlar, skaffold kullanılarak uygulamayı derlemek ve Cloud Deploy ile dağıtılacak öğeleri depolamak için yürütülür. Bu adım, her uygulama derlemesi için CICD süreciniz tarafından gerçekleştirilir.

  1. Skaffold ile uygulamayı derleme ve depolama

skaffold build \

--file-output=artifacts.json \

--default-repo gcr.io/$PROJECT_ID \

--push=true

5. Yayınlama Aşaması

CICD sürecinizin sonunda, genellikle kod üretim için etiketlendiğinde cloud deploy release komutunu çağırarak yayınlama işlemini başlatırsınız. Daha sonra, dağıtım doğrulanıp onaylandıktan sonra, işlemi otomatik süreçler veya manuel onaylar aracılığıyla tanıtıp onaylayarak sürümü çeşitli hedef ortamlara taşıyabilirsiniz.

Sürüm oluşturma

Cloud Deploy'ın işleyiş şeklini anlamak için bu eğitimde daha önce Cloud Deploy dosyaları oluşturduk. Demo amacıyla aynı Cloud Deploy dosyalarını oluşturup örnek bir Go uygulaması içeren bir GitHub deposuna gönderdik. Bu uygulamayı yayınlamak için Cloud Deploy'ı 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, otomatik olarak önizleme olan ilk hedefe dağıtılır.

  1. Google Cloud Console'da <Cloud Deploy>e gidin.
  2. "sample-app"i tıklayın

Bu ekranda ardışık düzeninizin grafiksel bir temsilini görürsünüz.

  1. Önizleme kutusunun sol tarafında yeşil bir ana hat olduğunu onaylayın. Bu, sürümün ilgili ortama dağıtıldığı anlamına gelir.
  2. İsteğe bağlı olarak, ekranın alt kısmındaki Sürüm Ayrıntıları bölümünde sürüm adını tıklayarak sürümle ilgili ek ayrıntıları inceleyin.
  3. Sürümün uygulamayı başarıyla dağıttığını doğrulamak için CloudShell'da 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

  1. Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
  2. 8080 bağlantı noktasında önizle'yi seçin

Bu işlem sizi "Merhaba Dünya!" mesajını gösteren yeni bir sayfaya yönlendirir.

  1. Bağlantı yönlendirmeyi sonlandırmak için terminalde ctrl+c simgesini kullanın.

Sürüm tanıtımı

Sürümünüz ardışık düzendeki ilk hedefe (önizleme) dağıtıldığına göre bir sonraki hedefe (kanarik) tanıtabilirsiniz. İş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

Sürüm promosyonunu inceleme

  1. Google Cloud Console'daki sample-app ardışık düzenine gidin.
  2. Canary kutusunun sol tarafında yeşil bir ana hat olduğunu doğrulayın. Bu, sürümün ilgili ortama dağıtıldığı anlamına gelir.
  3. Uygulamaya bir tünel oluşturarak uygulamanın doğru şekilde dağıtıldığını doğrulama

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

  1. Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
  2. 8080 bağlantı noktasında önizle'yi seçin

Bu işlem sizi "Merhaba Dünya!" mesajını gösteren yeni bir sayfaya yönlendirir.

  1. Bağlantı yönlendirmeyi sonlandırmak için terminalde ctrl+c simgesini kullanın.

Üretim sürümünü onaylama

prod.yaml aracılığıyla prod hedefini oluştururken requireApproval etiketini true olarak belirttiğimizi unutmayın. Bu, üretimde promosyon için onay şartı uygulanmasına neden olur.

  1. Aşağıdaki komutla kanarya sürümünü üretime tanıtın

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. Google Cloud Console'daki sample-app ardışık düzenine gidin.
  2. "1 beklemede" ifadesini belirten sarı göstergeyi görebilirsiniz.

Bu mesaj, üretime dağıtılmak üzere sıraya alınmış ancak inceleme ve onay gerektiren bir sürüm olduğunu gösterir.

  1. Sarı uyarının hemen altındaki "İncele" düğmesini tıklayın.
  2. Sonraki ekranda, üretim için onay ekranına erişmek üzere tekrar "İncele"yi tıklayın.
  3. İsteğe bağlı olarak, değişiklikleri incelemek için Manifest Fark'ı inceleyin. Bu durumda, tamamen yeni bir dosya.
  4. "Onayla" düğmesini tıklayın
  5. Üretime sürüm yayınlama işleminin devam ettiğini göreceğiniz sample-app ardışık düzen sayfasına dönün.

Üretim sürümünü inceleme

Diğer ortamlarda olduğu gibi, dağıtım tamamlandığında aşağıdaki adımları uygulayarak dağıtımı inceleyebilirsiniz.

  1. Bağlantı yönlendirme 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

  1. Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
  2. 8080 bağlantı noktasında önizle'yi seçin

Bu işlem sizi "Merhaba Dünya!" mesajını gösteren yeni bir sayfaya yönlendirir.

  1. Bağlantı yönlendirmeyi sonlandırmak için terminalde ctrl+c simgesini kullanın.