Cloud Deploy ile yayınlama

1. Hedefler

Bu eğiticide önizleme, canary ve üretim adında üç GKE kümesi oluşturacaksınız. Ardından, her bir kümeye karşılık gelen bir Cloud Deploy hedefi ve bu hedeflerde dağıtım yapmak için gerçekleştirilmesi gereken adımların sırasını tanımlayacak bir Cloud Deploy ardışık düzeni oluşturun.

Dağıtım akışı, Cloud Deploy sürümünü oluşturacak ve önizleme kümesinde dağıtımı gerçekleştirecek bir Cloudbuild ardışık düzeni tarafından tetiklenir. Önizlemede 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 tanıtırsınız. Sürümün üretim kümesinde tanıtılması için onay gerekir. Cloud Deploy kullanıcı arayüzünde üretim ardışık düzenini onaylayıp son olarak yükseltmeniz gerekir.

Bu eğiticinin hedefleri aşağıdaki adımlara ayrılabilir:

  • Çalışma alanınızı hazırlama
  • Cloud Deploy hedeflerini tanımlayın
  • Cloud Deploy ardışık düzenini tanımlayın
  • Sürüm Oluşturma
  • Dağıtımı tanıtma
  • Üretim sürümünü onaylama

Kendi hızınızda ortam kurulumu

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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 ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır 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ğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde 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ırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

2. Platform Kurulumu

Çalışma alanınız hazırlanıyor

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şturacağız.

  1. gcloud config varsayılanlarını ayarlama

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. Kod deposunu 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 önizleme.yaml adlı dağıtım dizininde 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 canary.yaml adlı dağıtım dizininde 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

DemandApproval etiketinin doğru değerine ayarlandığına dikkat edin. Bu durum, onay verilene kadar ürün hedefine tanıtılmaya izin vermez. Bir sürümü onaylamak için role/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 uygulamanın oluşturulması kapsamında CICD ardışık düzeni genellikle otomatik derlemeler, entegrasyon testleri ve dağıtımlar gerçekleştirmek için ayarlanır. Aşağıdaki adımlar, yeni bir uygulamanın kurulum sürecinin bir parçası olarak kabul edilir. Her yeni uygulamanın yapılandırılmış bir dağıtım ardışık düzeni olur.

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

  1. Cloudshell'de aşağıdaki komutla ardışık düzen.yaml adlı dağıtım dizininde 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 teslim ardışık düzeninin dağıtılmak üzere yapılandırıldığı tüm hedeflerin listesi olan aşama adlı bir etiket içerir.

targetId, teslim ardışık düzeninin bu aşamasında kullanılacak belirli hedefi tanımlar. Değer, hedef tanımdaki analytics.name özelliğidir.

profiles, skaffold.yaml kaynağından sıfır veya daha fazla Skaffold profil adından oluşan bir listedir. Cloud Deploy, sürümü oluştururken skaffold oluşturma özelliğiyle profili kullanır.

  1. Ardışık düzen uygulama

gcloud beta deploy apply --file deploy/pipeline.yaml

4. Geliştirme Aşaması

Uygulamalar geliştirildikçe öğeleri otomatik CICD araç zincirleri oluşturur ve depolar. Aşağıdaki komutlar, uygulamayı kaykay kullanarak derlemek ve öğeleri Cloud Deploy ile dağıtım için depolamak amacıyla yürütülür. Bu adım, her uygulama derlemesi için CICD süreciniz tarafından gerçekleştirilir.

  1. Uygulamayı skaffold ile derleme ve depolama

skaffold build \

--file-output=artifacts.json \

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

--push=true

5. Yayın Aşaması

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

Sürüm oluşturma

Cloud Deploy'un işleyiş şeklini anlamak için bu eğiticide Cloud Deploy dosyalarını oluşturduk. Demoda, aynı Cloud Deploy dosyalarını oluşturduk ve örnek go uygulaması ile bir github deposuna aktardık. Bu uygulamayı yayınlamak için Cloud Deploy'u 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

Bir Cloud Deploy sürümü oluşturulduğunda, bu sürüm otomatik olarak ilk hedef olan önizlemede kullanıma sunulur.

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

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

  1. Önizleme kutusunun sol tarafında, sürümün söz konusu ortama dağıtıldığını belirten yeşil dış çizgiyi onaylayın.
  2. İsteğe bağlı olarak ekranın alt kısmındaki Yayın Ayrıntıları altından 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ğrulayın, 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öşesindeki web önizlemesi simgesini tıklayın.
  2. 8080 bağlantı noktasında Önizleme'yi seçin

Bu sizi, "Hello World!" mesajını gösteren yeni bir sayfaya götürür.

  1. Bağlantı noktası ileriyi sonlandırmak için terminalde ctrl+c öğesini kullanın.

Bir yayını tanıtma

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

  1. Google Cloud Console'da ornek-uygulama ardışık düzenine gidin
  2. Canary kutusunun sol tarafında, sürümün söz konusu ortama dağıtıldığını belirten yeşil dış çizgiyi onaylayın.
  3. 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öşesindeki web önizlemesi simgesini tıklayın.
  2. 8080 bağlantı noktasında Önizleme'yi seçin

Bu sizi, "Hello World!" mesajını gösteren yeni bir sayfaya götürür.

  1. Bağlantı noktası ileriyi 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, requiredApproval etiketini doğru olarak belirttiğimizi unutmayın. Bu durum, üretimde tanıtım için onay zorunluluğunu zorunlu kılacak.

  1. Aşağıdaki komutla canary sürümünü üretim sürümüne yükseltin

gcloud beta deploy releases promote \

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

--delivery-pipeline=sample-app \

--quiet

  1. Google Cloud Console'da ornek-uygulama ardışık düzenine gidin
  2. "1 beklemede" yazan sarı göstergeye dikkat edin.

Bu mesaj, üretime dağıtım için sıraya alınmış bir sürüm olduğunu ancak inceleme ve onay gerektirdiğini gösterir.

  1. "İncele"yi tıklayın. düğmesini tıklayın.
  2. Sonraki ekranda "İncele"yi tıklayın tekrar dokunarak üretim için onay ekranına
  3. İsteğe bağlı olarak, değişiklikleri incelemek için Manifest Diff'i inceleyin. Bu durumda tamamen yeni bir dosya.
  4. "Onayla"yı tıklayın. düğme
  5. Üretim aşamasındaki sürümü göreceğiniz sample-app ardışık düzeni sayfasına dönün.

Üretim sürümünü inceleme

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

  1. İleri bağlantı noktası oluşturmak için it cloudshell 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öşesindeki web önizlemesi simgesini tıklayın.
  2. 8080 bağlantı noktasında Önizleme'yi seçin

Bu sizi, "Hello World!" mesajını gösteren yeni bir sayfaya götürür.

  1. Bağlantı noktası ileriyi sonlandırmak için terminalde ctrl+c öğesini kullanın.