1. Genel Bakış
Bu laboratuvarda, Cloud Deploy'u kullanarak Cloud Run'a bir .Net uygulaması dağıtacaksınız. Dockerfile kullanmadan Cloud Build ile bir kapsayıcı görüntüsü oluşturacaksınız. Cloud Deploy ile üç hedef ortam içeren bir ardışık düzen oluşturacak ve sürümü ortamlarda yükseltme adımlarını uygulayacaksınız. Son olarak, sürümün üretim ortamına dağıtılmasını onaylarsınız.

Cloud Build nedir?
Cloud Build ile tüm programlama dillerinde hızlıca yazılım derleyebilirsiniz.
Cloud Deploy nedir?
Cloud Deploy, tümüyle yönetilen bir sürekli teslim hizmetidir. Cloud Deploy ile GKE, Anthos ve Cloud Run için dağıtım işlem hatları oluşturabilirsiniz.
Cloud Run nedir?
Cloud Run ile, herhangi bir dilde (Go, Python, Java, Node.js, .NET ve Ruby dahil) yazılmış ölçeklenebilir kapsayıcılı uygulamaları tamamen yönetilen bir platformda dağıtabilirsiniz.
Skaffold nedir?
Skaffold, Kubernetes'e özgü uygulamalar için sürekli geliştirme sağlayan bir komut satırı aracıdır. Cloud Deploy, oluşturma ve dağıtma işlemleri için Skaffold'u kullanır.
Öğrenecekleriniz
Bu laboratuvarda şunları yapmayı öğreneceksiniz:
- Cloud Deploy ardışık düzeni oluşturma
- Dockerfile kullanmadan Cloud Build ile .Net uygulaması için kapsayıcı görüntüsü oluşturma
- Cloud Deploy ile uygulamayı Cloud Run'a dağıtma
- Cloud Deploy sürümlerini yükseltme
Ön koşullar
- Bu laboratuvarda Cloud Console ve kabuk ortamları hakkında bilgi sahibi olduğunuz varsayılır.
2. Kurulum ve Gereksinimler
Cloud projesi 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 dizesidir. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir 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. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır. - 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 oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Ortam Kurulumu
Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.

Proje ortam değişkenlerini ayarlamak için Cloud Shell'de aşağıdaki komutu çalıştırın:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
API'leri etkinleştirin:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
Uygulama kapsayıcı görüntülerini depolamak için Artifact Registry deposu oluşturun:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
3. Yapılandırma dosyalarını inceleme

Uygulama kaynak kodunu klonlayın:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
Cloud Deploy ardışık düzen yapılandırmasını inceleyin:
clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
stages:
- targetId: dev-env
profiles: [dev]
- targetId: qa-env
profiles: [qa]
- targetId: prod-env
profiles: [prod]
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev-env
description: Cloud Run development service
run:
location: projects/_PROJECT_ID/locations/us-west1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: qa-env
description: Cloud Run QA service
run:
location: projects/_PROJECT_ID/locations/us-central1
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: prod-env
description: Cloud Run PROD service
run:
location: projects/_PROJECT_ID/locations/us-south1
Üç ortamı tanımlayan ve hedef hizmet olarak Cloud Run'ı kullanan skaffold.yaml dosyasını inceleyin.
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: cloud-run-app
profiles:
- name: dev
manifests:
rawYaml:
- deploy-dev.yaml
- name: qa
manifests:
rawYaml:
- deploy-qa.yaml
- name: prod
manifests:
rawYaml:
- deploy-prod.yaml
deploy:
cloudrun: {}
Hizmet yapılandırma dosyalarını inceleyin.
deploy-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
deploy-qa.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
deploy-prod.yaml
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: app-prod
spec:
template:
spec:
containers:
- image: app
Container görüntüsü oluşturma ve Cloud Deploy sürümü oluşturma adımlarını içeren cloudbuild.yaml dosyasını inceleyin:
cloudbuild.yaml
steps:
- name: 'gcr.io/k8s-skaffold/pack'
entrypoint: 'pack'
args: ['build',
'--builder=gcr.io/buildpacks/builder',
'--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
args:
[
"deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
"--delivery-pipeline", "cloud-run-pipeline",
"--region", "${_REGION}",
"--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
]
entrypoint: gcloud
4. Cloud Deploy ardışık düzeni oluşturma
clouddeploy.yaml dosyasında _PROJECT_ID değerini değiştirin:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
Cloud Deploy ardışık düzeni oluşturma:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
Oluşturulan ardışık düzeni Cloud Deploy'da inceleyin.
5. Kapsayıcı görüntüsü oluşturma ve sürüm oluşturma
Cloud Build hizmet hesabına Cloud Deploy Operator izinleri ekleyin:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/clouddeploy.operator
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser
Container görüntüsü ve Cloud Deploy sürümü oluşturma:
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
Oluşturulan sürümü Cloud Deploy'da inceleyin. Geliştirme ortamına dağıtımın tamamlanmasını bekleyin.
6. Sürümü KG ve PROD ortamlarına yükseltme
Cloud Console veya Cloud Shell'i kullanarak sürümü bir sonraki hedefe(qa-env) yükseltin.
Cloud Shell ile sürümü yükseltin, sürümü yükseltmek için gcloud komutunu çalıştırın.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Kalite kontrol ortamına dağıtım tamamlanana kadar bekleyin. Yayın, bir sonraki hedefe(üretim ortamı) yükseltilir.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Cloud Console'da Cloud Deploy'u açın ve sürümün üretim dağıtımı için onaylayın.

Cloud Deploy işlem hattı durumunu ve kullanılabilir DORA metriklerini ("dağıtım sayısı", "dağıtım sıklığı", "dağıtım hatası oranı") inceleyin.
Metrik | Açıklama |
Dağıtım sayısı | Teslimat işlem hattınızda nihai hedefe yapılan başarılı ve başarısız dağıtımların toplam sayısı. |
Dağıtım sıklığı | Teslimat ardışık düzeninin, teslimat ardışık düzeninizdeki nihai hedefe ne sıklıkta dağıtım yaptığı.DevOps Research and Assessment (DORA) programı tarafından tanımlanan dört temel metriğin biridir. |
Dağıtım başarısızlığı oranı | Teslimat işlem hattınızda nihai hedefe yönelik başarısız dağıtımların yüzdesi. |
Cloud Run'da dağıtılan uygulamaları inceleyin:

7. Tebrikler!
Tebrikler, codelab'i tamamladınız.
İşlediğimiz konular:
- Cloud Deploy ardışık düzeni oluşturma
- Cloud Build ile .NET uygulaması için container görüntüsü oluşturma
- Cloud Deploy ile uygulamayı Cloud Run'a dağıtma
- Cloud Deploy sürümünü tanıtma
Temizleme
Bu eğitimde kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla kaynakları içeren projeyi silin veya projeyi koruyup tek tek kaynakları silin.
Projeyi silme
Faturalandırılmanın önüne geçmenin en kolay yolu, eğitim için oluşturduğunuz projeyi silmektir.