۱. مرور کلی
در این آزمایش، شما یک برنامه .Net را با استفاده از Cloud Deploy در Cloud Run مستقر خواهید کرد. شما یک تصویر کانتینر با Cloud Build بدون استفاده از Dockerfile خواهید ساخت. شما یک خط لوله با سه محیط هدف با Cloud Deploy راهاندازی خواهید کرد و مراحلی را برای ترویج انتشار از طریق محیطها طی خواهید کرد. در نهایت، انتشار را برای استقرار در محیط تولید تأیید خواهید کرد.

ساخت ابری چیست؟
با Cloud Build میتوانید به سرعت نرمافزارها را در تمام زبانهای برنامهنویسی بسازید.
استقرار ابری چیست؟
Cloud Deploy یک سرویس تحویل مداوم کاملاً مدیریتشده است. با Cloud Deploy میتوانید خطوط لوله استقرار برای GKE، Anthos و Cloud Run ایجاد کنید.
کلود ران چیست؟
با Cloud Run میتوانید برنامههای کانتینری مقیاسپذیر نوشته شده به هر زبانی (از جمله Go، Python، Java، Node.js، .NET و Ruby) را روی یک پلتفرم کاملاً مدیریتشده مستقر کنید.
اسکفولد چیست؟
Skaffold یک ابزار خط فرمان است که امکان توسعه مداوم برنامههای بومی Kubernetes را فراهم میکند. Cloud Deploy از Skaffold برای عملیات رندر و استقرار استفاده میکند.
آنچه یاد خواهید گرفت
در این آزمایشگاه، شما یاد خواهید گرفت که چگونه موارد زیر را انجام دهید:
- ایجاد خط لوله استقرار ابری
- ایجاد تصویر کانتینر برای برنامه .Net با Cloud Build بدون استفاده از Dockerfile
- استقرار برنامه در Cloud Run با Cloud Deploy
- انتشار نسخههای Cloud Deploy را تبلیغ کنید
پیشنیازها
- این آزمایشگاه فرض را بر آشنایی با محیطهای Cloud Console و Shell میگذارد.
۲. تنظیمات و الزامات
راهاندازی پروژه ابری
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان
PROJECT_IDشناخته میشود). اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند. - برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، میتوانید منابعی را که ایجاد کردهاید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
تنظیمات محیط
با کلیک روی آیکون سمت راست نوار جستجو، Cloud Shell را فعال کنید.

از Cloud Shell، دستور زیر را برای تنظیم متغیرهای محیطی پروژه اجرا کنید:
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1
فعال کردن APIها:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
clouddeploy.googleapis.com \
artifactregistry.googleapis.com
ایجاد مخزن رجیستری Artifact برای ذخیره تصاویر کانتینر برنامه:
gcloud artifacts repositories create containers-repo \
--repository-format=docker \
--location=${REGION} \
--description="Containers repository"
۳. بررسی فایلهای پیکربندی

کد منبع برنامه کلون:
git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy
بررسی پیکربندی خط لوله Cloud Deploy:
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
فایل skaffold.yaml را که سه محیط را تعریف میکند، بررسی کنید. این فایل از Cloud Run به عنوان سرویس هدف استفاده میکند.
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: {}
بررسی فایلهای پیکربندی سرویس
استقرار-dev.yaml
kind: Service
metadata:
name: app-dev
spec:
template:
spec:
containers:
- image: app
resources:
limits:
cpu: 1000m
memory: 128Mi
استقرار-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
فایل cloudbuild.yaml را با مراحل ساخت یک تصویر کانتینر و ایجاد نسخه Cloud Deploy مرور کنید:
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
۴. ایجاد خط لوله استقرار ابری
مقدار _PROJECT_ID را در clouddeploy.yaml جایگزین کنید:
sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml
ایجاد خط لوله استقرار ابری:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region=${REGION} \
--project=${PROJECT_ID}
بررسی خط لوله ایجاد شده در Cloud Deploy .
۵. ساخت ایمیج کانتینر و ایجاد یک نسخه آزمایشی
مجوزهای اپراتور Cloud Deploy را به حساب سرویس Cloud Build اضافه کنید:
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
ایجاد تصویر کانتینر و انتشار Cloud Deploy:
export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')
gcloud builds submit \
--config cloudbuild-plus.yaml \
--substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}
نسخه ایجاد شده در Cloud Deploy را بررسی کنید. منتظر بمانید تا استقرار در محیط توسعه (Dev environment) کامل شود.
۶. انتشار در محیطهای QA و PROD را ارتقا دهید
با استفاده از کنسول ابری یا پوسته ابری، انتشار را به مقصد بعدی (qa-env) ارتقا دهید.
با استفاده از Cloud Shell، انتشار را تبلیغ کنید، دستور gcloud را برای تبلیغ انتشار اجرا کنید.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
صبر کنید تا استقرار در محیط تضمین کیفیت (QA) انجام شود. انتشار را به مقصد بعدی (prod-env) ارتقا دهید.
gcloud beta deploy releases promote \
--release="release-${RELEASE_TIMESTAMP}" \
--delivery-pipeline=cloud-run-pipeline \
--region=${REGION} \
--quiet
Cloud Deploy را در Cloud Console باز کنید و انتشار را برای استقرار در محیط عملیاتی تأیید کنید.

وضعیت خط لوله Cloud Deploy و معیارهای موجود DORA ("تعداد استقرار"، "فراوانی استقرار"، "میزان شکست استقرار") را بررسی کنید.
متریک | توضیحات |
تعداد استقرارها | تعداد کل استقرارهای موفق و ناموفق به هدف نهایی در خط لوله تحویل شما. |
فرکانس استقرار | هر چند وقت یکبار، خط لوله تحویل به هدف نهایی در خط لوله تحویل شما اعزام میشود. یکی از چهار معیار کلیدی تعریف شده توسط برنامه تحقیق و ارزیابی DevOps (DORA). |
نرخ شکست در استقرار | درصد عرضههای ناموفق به هدف نهایی در خط تولید شما. |
بررسی برنامههای مستقر در Cloud Run :

۷. تبریک میگویم!
تبریک میگویم، شما codelab را تمام کردید!
آنچه ما پوشش دادهایم:
- نحوه ایجاد خط لوله Cloud Deploy
- نحوه ایجاد تصویر کانتینر برای برنامه .Net با Cloud Build
- نحوه استقرار برنامه در Cloud Run با Cloud Deploy
- چگونه نسخه Cloud Deploy را تبلیغ کنیم
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب گوگل کلود خود برای منابع استفاده شده در این آموزش، یا پروژهای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید.
حذف پروژه
سادهترین راه برای حذف هزینهها، حذف پروژهای است که برای آموزش ایجاد کردهاید.