1. اهداف
در این آموزش شما سه کلاستر GKE به نام های preview، canary و prod ایجاد می کنید. سپس، یک هدف Cloud Deploy مربوط به هر خوشه و یک خط لوله Cloud Deploy ایجاد کنید که دنباله ای از مراحل را برای انجام استقرار در آن اهداف مشخص می کند.
جریان استقرار توسط یک خط لوله ساخت ابر آغاز می شود که انتشار Cloud Deploy را ایجاد می کند و استقرار را در خوشه پیش نمایش انجام می دهد. پس از اینکه تأیید کردید که استقرار در پیشنمایش موفقیتآمیز بوده و مطابق انتظار کار میکند، به صورت دستی انتشار را در خوشه قناری تبلیغ میکنید. تبلیغ نسخه در خوشه پرود نیاز به تایید دارد، شما خط لوله تولید را در Cloud Deploy UI تایید می کنید و در نهایت آن را تبلیغ می کنید.
اهداف این آموزش را می توان به مراحل زیر تقسیم کرد:
- فضای کاری خود را آماده کنید
- اهداف Cloud Deploy را تعریف کنید
- خط لوله استقرار ابر را تعریف کنید
- یک نسخه ایجاد کنید
- یک استقرار را ترویج کنید
- تایید انتشار تولید
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
- شناسه پروژه باید در تمام پروژههای Google Cloud منحصربهفرد باشد و تغییرناپذیر باشد (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان
PROJECT_ID
شناخته میشود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود. - یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها، باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعملهای «پاکسازی» را که در انتهای Codelab یافت میشود دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
2. راه اندازی پلت فرم
آماده سازی فضای کاری شما
برای اجرای این آموزش، محیط خود را در اینجا تنظیم خواهیم کرد. هنگامی که این مرحله به پایان رسید، ما یک کلاستر GKE ایجاد می کنیم که می توانیم استقرارها را اجرا کنیم.
- تنظیمات پیش فرض gcloud را تنظیم کنید
gcloud config set project <your project>
gcloud config set deploy/region us-central1
- کلون ریپو
git clone https://github.com/gushob21/software-delivery-workshop
cd software-delivery-workshop/labs/cloud-deploy/
cloudshell workspace .
rm -rf deploy && mkdir deploy
- تنظیم متغیرهای محیطی
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
- API ها را فعال کنید
gcloud services enable \
cloudresourcemanager.googleapis.com \
`container.googleapis.com \`
`cloudbuild.googleapis.com \`
`containerregistry.googleapis.com \`
`secretmanager.googleapis.com \`
`clouddeploy.googleapis.com`
- خوشه های GKE ایجاد کنید
`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
تعریف اهداف گسترش ابر
- یک فایل در دایرکتوری deploy با نام preview.yaml با دستور زیر در cloudshell ایجاد کنید:
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.
- یک فایل در دایرکتوری deploy با نام canary.yaml با دستور زیر در cloudshell ایجاد کنید:
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
- یک فایل در دایرکتوری deploy با نام prod.yaml با دستور زیر در cloudshell ایجاد کنید:
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
به تگ requireApproval توجه کنید که روی true تنظیم شده است. این اجازه ارتقاء به هدف تولید را تا زمانی که تایید اعطا نشود، نخواهد داد. برای تأیید نسخه به نقش roles/clouddeploy.approver نیاز دارید.
- Deploy Targets را ایجاد کنید
`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. ایجاد برنامه
به عنوان بخشی از ایجاد یک برنامه جدید، خط لوله CICD معمولاً برای انجام ساختهای خودکار، آزمایش یکپارچهسازی و استقرار راهاندازی میشود. مراحل زیر بخشی از فرآیند راه اندازی برای یک برنامه جدید در نظر گرفته می شود. هر برنامه جدید دارای یک خط لوله استقرار پیکربندی شده است.
تعریف خط لوله استقرار ابری
- یک فایل در دایرکتوری deploy با نام pipeline.yaml با دستور زیر در cloudshell ایجاد کنید:
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
حاوی برچسبی به نام مراحل است که لیستی از تمام اهدافی است که این خط لوله تحویل برای استقرار در آنها پیکربندی شده است.
targetId
هدف خاصی را برای استفاده در این مرحله از خط لوله تحویل مشخص می کند. مقدار، ویژگی metadata.name از تعریف هدف است.
profiles
فهرستی از نامهای صفر یا بیشتر Skaffold از skaffold.yaml است. Cloud Deploy هنگام ایجاد نسخه از نمایه با رندر skaffold استفاده می کند.
- Pipeline را اعمال کنید
gcloud beta deploy apply --file deploy/pipeline.yaml
4. فاز توسعه
همانطور که برنامه ها توسعه می یابند، زنجیره های ابزار خودکار CICD دارایی ها را ساخته و ذخیره می کنند. دستورات زیر برای ساخت برنامه با استفاده از skaffold و ذخیره دارایی ها برای استقرار با Cloud Deploy اجرا می شوند. این مرحله توسط فرآیند CICD شما برای هر ساخت برنامه انجام می شود.
- برنامه را با اسکافولد بسازید و ذخیره کنید
skaffold build \
--file-output=artifacts.json \
--default-repo gcr.io/$PROJECT_ID \
--push=true
5. فاز انتشار
در پایان فرآیند CICD خود، معمولاً زمانی که کد برای تولید برچسب گذاری شده است، با فراخوانی فرمان cloud deploy release
فرآیند انتشار را آغاز خواهید کرد. بعداً پس از تأیید اعتبار و تأیید استقرار، با ترویج و تأیید عملکرد از طریق فرآیندهای خودکار یا تأییدهای دستی، انتشار را از طریق محیطهای هدف مختلف منتقل خواهید کرد.
ایجاد انتشار
ما قبلاً فایلهای Cloud Deploy را در این آموزش ایجاد کردیم تا درک درستی از نحوه عملکرد Cloud Deploy داشته باشیم. به منظور دمو، ما همان فایلهای Cloud Deploy را ایجاد کردهایم و آنها را با یک برنامه Go نمونه به یک مخزن github فرستادیم و از Cloud Deploy برای انتشار آن برنامه استفاده خواهیم کرد.
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}"
انتشار را مرور کنید
هنگامی که یک نسخه Cloud Deploy ایجاد می شود، به طور خودکار آن را در اولین هدف که پیش نمایش است منتشر می کند.
- در کنسول ابری Google به <Cloud Deploy> بروید
- روی "نمونه-برنامه" کلیک کنید
در این صفحه نمایش گرافیکی خط لوله خود را خواهید دید.
- یک طرح کلی سبز رنگ را در سمت چپ کادر پیشنمایش تأیید کنید که به این معنی است که نسخه در آن محیط مستقر شده است.
- با کلیک بر روی نام نسخه در قسمت جزئیات انتشار در بخش پایینی صفحه، جزئیات بیشتری را در مورد نسخه مرور کنید.
- بررسی کنید که نسخه با موفقیت برنامه را مستقر کرده است، دستور زیر را به صورت cloushell اجرا کنید
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
- روی نماد پیش نمایش وب در سمت راست بالای صفحه کلیک کنید.
- پیش نمایش را در پورت 8080 انتخاب کنید
این شما را به صفحه جدیدی هدایت می کند که پیام "سلام جهان!"
- از
ctrl+c
در ترمینال برای پایان دادن به پورت فوروارد استفاده کنید.
ترویج انتشار
اکنون که نسخه شما در اولین هدف (پیش نمایش) در خط لوله مستقر شده است، می توانید آن را به هدف بعدی (قناری) ارتقا دهید. دستور زیر را برای شروع فرآیند اجرا کنید.
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
تبلیغ انتشار را مرور کنید
- به خط لوله نمونه برنامه در کنسول Google Cloud بروید
- یک طرح کلی سبز رنگ در سمت چپ جعبه قناری را تأیید کنید که به این معنی است که انتشار در آن محیط مستقر شده است.
- با ایجاد یک تونل به آن، تأیید کنید که برنامه به درستی مستقر شده است
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
- روی نماد پیش نمایش وب در سمت راست بالای صفحه کلیک کنید.
- پیش نمایش را در پورت 8080 انتخاب کنید
این شما را به صفحه جدیدی هدایت می کند که پیام "سلام جهان!"
- از
ctrl+c
در ترمینال برای پایان دادن به پورت فوروارد استفاده کنید.
تصویب انتشار تولید
به یاد داشته باشید زمانی که ما از طریق prod.yaml prod target را ایجاد کردیم، تگ requireApproval را درست تعیین کردیم. این امر نیاز به تأیید برای ارتقاء در تولید را مجبور می کند.
- با دستور زیر رهاسازی قناری را به تولید ارتقا دهید
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- به خط لوله نمونه برنامه در کنسول Google Cloud بروید
- به نشانگر زرد توجه کنید که "1 در انتظار" است.
این پیام نشان می دهد که یک نسخه در صف استقرار به تولید است اما نیاز به بررسی و تأیید دارد.
- روی دکمه "بازبینی" درست در زیر اعلان زرد کلیک کنید.
- در صفحه بعدی دوباره روی "بازبینی" کلیک کنید تا به صفحه تایید برای تولید دسترسی پیدا کنید
- برای بررسی تغییرات، به صورت اختیاری، Manifest Diff را مرور کنید. در این مورد یک فایل کاملا جدید.
- بر روی دکمه "تایید" کلیک کنید
- به صفحه خط لوله نمونه-برنامه بازگردید، جایی که نسخه برای تولید را در حال انجام خواهید دید.
نسخه تولید را مرور کنید
همانند سایر محیطها، میتوانید با استفاده از مراحل زیر، استقرار را پس از تکمیل بررسی کنید.
- دستور زیر it cloudshell را برای ایجاد port-forward اجرا کنید
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
- روی نماد پیش نمایش وب در سمت راست بالای صفحه کلیک کنید.
- پیش نمایش را در پورت 8080 انتخاب کنید
این شما را به صفحه جدیدی هدایت می کند که پیام "سلام جهان!"
- از
ctrl+c
در ترمینال برای پایان دادن به پورت فوروارد استفاده کنید.