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
- 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 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.
- 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.
- gcloud config varsayılanlarını ayarlama
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- 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
- 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 ö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.
- 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
- 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.
- 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
- 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.
- 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.
- 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.
- <Cloud Deploy> in Google Cloud Console'da
- "sample-app"i tıklayın
Bu ekranda ardışık düzeninizin grafik bir temsilini görürsünüz.
- Önizleme kutusunun sol tarafında, sürümün söz konusu ortama dağıtıldığını belirten yeşil dış çizgiyi onaylayın.
- İ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.
- 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
- Ekranın sağ üst köşesindeki web önizlemesi simgesini tıklayın.
- 8080 bağlantı noktasında Önizleme'yi seçin
Bu sizi, "Hello World!" mesajını gösteren yeni bir sayfaya götürür.
- 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
- Google Cloud Console'da ornek-uygulama ardışık düzenine gidin
- Canary kutusunun sol tarafında, sürümün söz konusu ortama dağıtıldığını belirten yeşil dış çizgiyi onaylayın.
- 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öşesindeki web önizlemesi simgesini tıklayın.
- 8080 bağlantı noktasında Önizleme'yi seçin
Bu sizi, "Hello World!" mesajını gösteren yeni bir sayfaya götürür.
- 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.
- 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
- Google Cloud Console'da ornek-uygulama ardışık düzenine gidin
- "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.
- "İncele"yi tıklayın. düğmesini tıklayın.
- Sonraki ekranda "İncele"yi tıklayın tekrar dokunarak üretim için onay ekranına
- İsteğe bağlı olarak, değişiklikleri incelemek için Manifest Diff'i inceleyin. Bu durumda tamamen yeni bir dosya.
- "Onayla"yı tıklayın. düğme
- Ü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.
- İ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
- Ekranın sağ üst köşesindeki web önizlemesi simgesini tıklayın.
- 8080 bağlantı noktasında Önizleme'yi seçin
Bu sizi, "Hello World!" mesajını gösteren yeni bir sayfaya götürür.
- Bağlantı noktası ileriyi sonlandırmak için terminalde
ctrl+c
öğesini kullanın.