Cloud Deploy के साथ क्लाउड रन ऐप्लिकेशन को डिप्लॉय करना

1. खास जानकारी

इस लैब में, Cloud Deploy का इस्तेमाल करके .Net ऐप्लिकेशन को Cloud Run पर डिप्लॉय किया जाएगा. आपको Dockerfile का इस्तेमाल किए बिना, Cloud Build की मदद से कंटेनर इमेज बनानी होगी. Cloud Deploy की मदद से, तीन टारगेट एनवायरमेंट वाली पाइपलाइन सेट अप की जाएगी. साथ ही, एनवायरमेंट के ज़रिए रिलीज़ को प्रमोट करने के चरणों को पूरा किया जाएगा. आखिर में, आपको प्रोडक्शन एनवायरमेंट में डिप्लॉय की जाने वाली रिलीज़ को मंज़ूरी देनी होगी.

916a54f51af5ee54.png

Cloud Build क्या है?

Cloud Build की मदद से, सभी प्रोग्रामिंग भाषाओं में सॉफ़्टवेयर को तेज़ी से बनाया जा सकता है.

Cloud Deploy क्या है?

Cloud Deploy, लगातार डिलीवरी की पूरी तरह से मैनेज की जाने वाली सेवा है. Cloud Deploy की मदद से, GKE, Anthos, और Cloud Run के लिए डिप्लॉयमेंट पाइपलाइन बनाई जा सकती हैं.

Cloud Run क्या है?

Cloud Run की मदद से, किसी भी भाषा (जैसे कि Go, Python, Java, Node.js, .NET, और Ruby) में लिखे गए स्केलेबल कंटेनर वाले ऐप्लिकेशन को पूरी तरह से मैनेज किए गए प्लैटफ़ॉर्म पर डिप्लॉय किया जा सकता है.

Skaffold क्या है?

Skaffold एक कमांड-लाइन टूल है. यह Kubernetes-नेटिव ऐप्लिकेशन के लिए लगातार डेवलपमेंट की सुविधा देता है. Cloud Deploy, रेंडर और डिप्लॉय करने के लिए Skaffold का इस्तेमाल करता है.

आपको क्या सीखने को मिलेगा

इस लैब में, आपको ये काम करने का तरीका बताया जाएगा:

  • Cloud Deploy पाइपलाइन बनाना
  • Cloud Build की मदद से, Dockerfile का इस्तेमाल किए बिना .Net ऐप्लिकेशन के लिए कंटेनर इमेज बनाना
  • Cloud Deploy की मदद से, Cloud Run पर ऐप्लिकेशन डिप्लॉय करना
  • Cloud Deploy की रिलीज़ को प्रमोट करना

ज़रूरी शर्तें

  • इस लैब को शुरू करने से पहले, यह माना जा रहा है कि आपको Cloud Console और शेल एनवायरमेंट के बारे में जानकारी है.

2. सेटअप और ज़रूरी शर्तें

Cloud Project का सेटअप

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहेगा.
  • आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
  1. इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

एनवायरमेंट सेटअप करना

सर्च बार के दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell चालू करें.

eb0157a992f16fa3.png

प्रोजेक्ट के एनवायरमेंट वैरिएबल सेट करने के लिए, 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

एपीआई चालू करें:

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  clouddeploy.googleapis.com \
  artifactregistry.googleapis.com

ऐप्लिकेशन कंटेनर इमेज सेव करने के लिए, Artifact Registry रिपॉज़िटरी बनाएं:

gcloud artifacts repositories create containers-repo \
  --repository-format=docker \
  --location=${REGION} \
  --description="Containers repository"

3. कॉन्फ़िगरेशन फ़ाइलों की समीक्षा करना

29c2533441779de0.png

ऐप्लिकेशन के सोर्स कोड को क्लोन करना:

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: {}

सेवा के कॉन्फ़िगरेशन की फ़ाइलों की समीक्षा करें.

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

कंटेनर इमेज बनाने और Cloud Deploy रिलीज़ बनाने का तरीका जानने के लिए, cloudbuild.yaml फ़ाइल देखें:

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 पाइपलाइन बनाना

clouddeploy.yaml फ़ाइल में _PROJECT_ID वैल्यू को बदलें:

sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml

Cloud Deploy पाइपलाइन बनाएं:

gcloud deploy apply \
  --file=clouddeploy.yaml \
  --region=${REGION} \
  --project=${PROJECT_ID}

Cloud Deploy में जाकर, बनाई गई पाइपलाइन की समीक्षा करें.

5. कंटेनर इमेज बनाना और रिलीज़ बनाना

Cloud Build सेवा खाते में, Cloud Deploy ऑपरेटर की अनुमतियां जोड़ें:

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 में बनाई गई रिलीज़ की समीक्षा करें. डेवलपमेंट एनवायरमेंट में डिप्लॉयमेंट पूरा होने तक इंतज़ार करें.

6. QA और PROD एनवायरमेंट में रिलीज़ को प्रमोट करना

Cloud Console या Cloud Shell का इस्तेमाल करके, रिलीज़ को अगले टारगेट(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 Console में Cloud Deploy खोलें और प्रोडक्शन डिप्लॉयमेंट के लिए रिलीज़ को मंज़ूरी दें.

4c838b60770e9691.png

Cloud Deploy पाइपलाइन की स्थिति और उपलब्ध DORA मेट्रिक ("डिप्लॉयमेंट की संख्या", "डिप्लॉयमेंट की फ़्रीक्वेंसी", "डिप्लॉयमेंट फ़ेल होने की दर") की समीक्षा करें.

मेट्रिक

ब्यौरा

डिप्लॉयमेंट की संख्या

डिलीवरी पाइपलाइन में, फ़ाइनल टारगेट पर किए गए डिप्लॉयमेंट की कुल संख्या. इसमें सफल और असफल डिप्लॉयमेंट शामिल हैं.

डिप्लॉयमेंट की फ़्रीक्वेंसी

डिलीवरी पाइपलाइन में, डिलीवरी पाइपलाइन कितनी बार फ़ाइनल टारगेट पर डिप्लॉय होती है.यह DevOps Research and Assessment (DORA) प्रोग्राम की तय की गई चार मुख्य मेट्रिक में से एक है.

डिप्लॉयमेंट पूरा न होने की दर

डिलीवरी पाइपलाइन में, फ़ाइनल टारगेट तक पहुंचने से पहले रोल आउट न हो पाने वाले वर्शन का प्रतिशत.

Cloud Run में डिप्लॉय किए गए ऐप्लिकेशन की समीक्षा करें:

d6372b5350f10875.png

7. बधाई हो!

बधाई हो, आपने कोडलैब पूरा कर लिया है!

हमने इन विषयों पर बात की:

  • Cloud Deploy पाइपलाइन बनाने का तरीका
  • Cloud Build की मदद से, .Net ऐप्लिकेशन के लिए कंटेनर इमेज बनाने का तरीका
  • Cloud Deploy का इस्तेमाल करके, Cloud Run पर ऐप्लिकेशन डिप्लॉय करने का तरीका
  • Cloud Deploy रिलीज़ का प्रमोशन कैसे करें

व्यवस्थित करें

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, संसाधनों वाला प्रोजेक्ट मिटाएं. इसके अलावा, प्रोजेक्ट को बनाए रखने और अलग-अलग संसाधनों को मिटाने का विकल्प भी है.

प्रोजेक्ट मिटाना

बिलिंग को बंद करने का सबसे आसान तरीका यह है कि ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटा दें.

8. आगे क्या करना है