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
- 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ı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.
- 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.
- gcloud config varsayılanlarını ayarlama
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- 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
- 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
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.
- 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
- 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.
- 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.
- 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.
- Google Cloud Console'da <Cloud Deploy>e gidin.
- "sample-app"i tıklayın
Bu ekranda ardışık düzeninizin grafiksel bir temsilini görürsünüz.
- Ö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.
- İ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.
- 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
- Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
- 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.
- 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
- Google Cloud Console'daki sample-app ardışık düzenine gidin.
- 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.
- 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
- Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
- 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.
- 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.
- 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
- Google Cloud Console'daki sample-app ardışık düzenine gidin.
- "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.
- Sarı uyarının hemen altındaki "İncele" düğmesini tıklayın.
- Sonraki ekranda, üretim için onay ekranına erişmek üzere tekrar "İncele"yi tıklayın.
- İsteğe bağlı olarak, değişiklikleri incelemek için Manifest Fark'ı inceleyin. Bu durumda, tamamen yeni bir dosya.
- "Onayla" düğmesini tıklayın
- Ü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.
- 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
- Ekranın sağ üst kısmındaki web önizleme simgesini tıklayın.
- 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.
- Bağlantı yönlendirmeyi sonlandırmak için terminalde
ctrl+c
simgesini kullanın.