انتشار با Cloud Deploy

1. اهداف

در این آموزش شما سه کلاستر GKE به نام های preview، canary و prod ایجاد می کنید. سپس، یک هدف Cloud Deploy مربوط به هر خوشه و یک خط لوله Cloud Deploy ایجاد کنید که دنباله ای از مراحل را برای انجام استقرار در آن اهداف مشخص می کند.

جریان استقرار توسط یک خط لوله ساخت ابر آغاز می شود که انتشار Cloud Deploy را ایجاد می کند و استقرار را در خوشه پیش نمایش انجام می دهد. پس از اینکه تأیید کردید که استقرار در پیش‌نمایش موفقیت‌آمیز بوده و مطابق انتظار کار می‌کند، به صورت دستی انتشار را در خوشه قناری تبلیغ می‌کنید. تبلیغ نسخه در خوشه پرود نیاز به تایید دارد، شما خط لوله تولید را در Cloud Deploy UI تایید می کنید و در نهایت آن را تبلیغ می کنید.

اهداف این آموزش را می توان به مراحل زیر تقسیم کرد:

  • فضای کاری خود را آماده کنید
  • اهداف Cloud Deploy را تعریف کنید
  • خط لوله استقرار ابر را تعریف کنید
  • یک نسخه ایجاد کنید
  • یک استقرار را ترویج کنید
  • تایید انتشار تولید

تنظیم محیط خود به خود

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود و می توانید هر زمان که بخواهید آن را به روز کنید.
  • شناسه پروژه باید در تمام پروژه‌های Google Cloud منحصربه‌فرد باشد و تغییرناپذیر باشد (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (و معمولاً به عنوان PROJECT_ID شناخته می‌شود)، بنابراین اگر آن را دوست ندارید، یک نمونه تصادفی دیگر ایجاد کنید، یا می‌توانید شناسه پروژه را امتحان کنید و ببینید در دسترس است. سپس پس از ایجاد پروژه "یخ زده" می شود.
  • یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع Cloud/APIها، باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، دستورالعمل‌های «پاک‌سازی» را که در انتهای Codelab یافت می‌شود دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

2. راه اندازی پلت فرم

آماده سازی فضای کاری شما

برای اجرای این آموزش، محیط خود را در اینجا تنظیم خواهیم کرد. هنگامی که این مرحله به پایان رسید، ما یک کلاستر GKE ایجاد می کنیم که می توانیم استقرارها را اجرا کنیم.

  1. تنظیمات پیش فرض gcloud را تنظیم کنید

gcloud config set project <your project>

gcloud config set deploy/region us-central1

  1. کلون ریپو

git clone https://github.com/gushob21/software-delivery-workshop

cd software-delivery-workshop/labs/cloud-deploy/

cloudshell workspace .

rm -rf deploy && mkdir deploy

  1. تنظیم متغیرهای محیطی

export PROJECT_ID=$(gcloud config get-value project)

export PROJECT_NUMBER=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")

  1. API ها را فعال کنید

gcloud services enable \

cloudresourcemanager.googleapis.com \

    `container.googleapis.com \`

    `cloudbuild.googleapis.com \`

    `containerregistry.googleapis.com \`

    `secretmanager.googleapis.com \`

    `clouddeploy.googleapis.com` 
  1. خوشه های 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

تعریف اهداف گسترش ابر

  1. یک فایل در دایرکتوری 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.
  1. یک فایل در دایرکتوری 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

  1. یک فایل در دایرکتوری 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 نیاز دارید.

  1. 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 معمولاً برای انجام ساخت‌های خودکار، آزمایش یکپارچه‌سازی و استقرار راه‌اندازی می‌شود. مراحل زیر بخشی از فرآیند راه اندازی برای یک برنامه جدید در نظر گرفته می شود. هر برنامه جدید دارای یک خط لوله استقرار پیکربندی شده است.

تعریف خط لوله استقرار ابری

  1. یک فایل در دایرکتوری 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 استفاده می کند.

  1. Pipeline را اعمال کنید

gcloud beta deploy apply --file deploy/pipeline.yaml

4. فاز توسعه

همانطور که برنامه ها توسعه می یابند، زنجیره های ابزار خودکار CICD دارایی ها را ساخته و ذخیره می کنند. دستورات زیر برای ساخت برنامه با استفاده از skaffold و ذخیره دارایی ها برای استقرار با Cloud Deploy اجرا می شوند. این مرحله توسط فرآیند CICD شما برای هر ساخت برنامه انجام می شود.

  1. برنامه را با اسکافولد بسازید و ذخیره کنید

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 ایجاد می شود، به طور خودکار آن را در اولین هدف که پیش نمایش است منتشر می کند.

  1. در کنسول ابری Google به <Cloud Deploy> بروید
  2. روی "نمونه-برنامه" کلیک کنید

در این صفحه نمایش گرافیکی خط لوله خود را خواهید دید.

  1. یک طرح کلی سبز رنگ را در سمت چپ کادر پیش‌نمایش تأیید کنید که به این معنی است که نسخه در آن محیط مستقر شده است.
  2. با کلیک بر روی نام نسخه در قسمت جزئیات انتشار در بخش پایینی صفحه، جزئیات بیشتری را در مورد نسخه مرور کنید.
  3. بررسی کنید که نسخه با موفقیت برنامه را مستقر کرده است، دستور زیر را به صورت 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

  1. روی نماد پیش نمایش وب در سمت راست بالای صفحه کلیک کنید.
  2. پیش نمایش را در پورت 8080 انتخاب کنید

این شما را به صفحه جدیدی هدایت می کند که پیام "سلام جهان!"

  1. از ctrl+c در ترمینال برای پایان دادن به پورت فوروارد استفاده کنید.

ترویج انتشار

اکنون که نسخه شما در اولین هدف (پیش نمایش) در خط لوله مستقر شده است، می توانید آن را به هدف بعدی (قناری) ارتقا دهید. دستور زیر را برای شروع فرآیند اجرا کنید.

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

تبلیغ انتشار را مرور کنید

  1. به خط لوله نمونه برنامه در کنسول Google Cloud بروید
  2. یک طرح کلی سبز رنگ در سمت چپ جعبه قناری را تأیید کنید که به این معنی است که انتشار در آن محیط مستقر شده است.
  3. با ایجاد یک تونل به آن، تأیید کنید که برنامه به درستی مستقر شده است

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

  1. روی نماد پیش نمایش وب در سمت راست بالای صفحه کلیک کنید.
  2. پیش نمایش را در پورت 8080 انتخاب کنید

این شما را به صفحه جدیدی هدایت می کند که پیام "سلام جهان!"

  1. از ctrl+c در ترمینال برای پایان دادن به پورت فوروارد استفاده کنید.

تصویب انتشار تولید

به یاد داشته باشید زمانی که ما از طریق prod.yaml prod target را ایجاد کردیم، تگ requireApproval را درست تعیین کردیم. این امر نیاز به تأیید برای ارتقاء در تولید را مجبور می کند.

  1. با دستور زیر رهاسازی قناری را به تولید ارتقا دهید

gcloud beta deploy releases promote \

--release=sample-app-release-${REL_TIMESTAMP} \

--delivery-pipeline=sample-app \

--quiet

  1. به خط لوله نمونه برنامه در کنسول Google Cloud بروید
  2. به نشانگر زرد توجه کنید که "1 در انتظار" است.

این پیام نشان می دهد که یک نسخه در صف استقرار به تولید است اما نیاز به بررسی و تأیید دارد.

  1. روی دکمه "بازبینی" درست در زیر اعلان زرد کلیک کنید.
  2. در صفحه بعدی دوباره روی "بازبینی" کلیک کنید تا به صفحه تایید برای تولید دسترسی پیدا کنید
  3. برای بررسی تغییرات، به صورت اختیاری، Manifest Diff را مرور کنید. در این مورد یک فایل کاملا جدید.
  4. بر روی دکمه "تایید" کلیک کنید
  5. به صفحه خط لوله نمونه-برنامه بازگردید، جایی که نسخه برای تولید را در حال انجام خواهید دید.

نسخه تولید را مرور کنید

همانند سایر محیط‌ها، می‌توانید با استفاده از مراحل زیر، استقرار را پس از تکمیل بررسی کنید.

  1. دستور زیر 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

  1. روی نماد پیش نمایش وب در سمت راست بالای صفحه کلیک کنید.
  2. پیش نمایش را در پورت 8080 انتخاب کنید

این شما را به صفحه جدیدی هدایت می کند که پیام "Hello World!"

  1. از ctrl+c در ترمینال برای پایان دادن به پورت فوروارد استفاده کنید.