Cloud Deploy की मदद से रिलीज़ करना

1. मकसद

इस ट्यूटोरियल में, आपको तीन GKE क्लस्टर बनाने हैं. इनके नाम preview, canary, और prod होंगे. इसके बाद, हर क्लस्टर के हिसाब से Cloud Deploy टारगेट और Cloud Deploy पाइपलाइन बनाएं. यह पाइपलाइन, उन टारगेट में डिप्लॉयमेंट करने के लिए चरणों का क्रम तय करेगी.

डिप्लॉयमेंट फ़्लो, CloudBuild पाइपलाइन से ट्रिगर होगा. यह Cloud Deploy रिलीज़ बनाएगा और प्रीव्यू क्लस्टर में डिप्लॉयमेंट करेगा. जब आपको यह पुष्टि हो जाए कि प्रीव्यू में डिप्लॉयमेंट सही तरीके से काम कर रहा है, तब आपको कैनरी क्लस्टर में रिलीज़ को मैन्युअल तरीके से प्रमोट करना होगा. प्रोडक्शन क्लस्टर में रिलीज़ का प्रमोशन करने के लिए, अनुमति लेनी होगी. Cloud Deploy के यूज़र इंटरफ़ेस (यूआई) में, प्रोडक्शन पाइपलाइन को अनुमति दें और आखिर में उसका प्रमोशन करें.

इस ट्यूटोरियल के लक्ष्यों को इन चरणों में बांटा जा सकता है:

  • अपना वर्कस्पेस तैयार करना
  • Cloud Deploy के टारगेट तय करना
  • Cloud Deploy पाइपलाइन तय करना
  • रिलीज़ बनाना
  • किसी डिप्लॉयमेंट को प्रमोट करना
  • किसी प्रोडक्शन रिलीज़ को मंज़ूरी देना

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

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

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

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

2. प्लैटफ़ॉर्म सेटअप करना

आपका वर्कस्पेस तैयार किया जा रहा है

हम यहां इस ट्यूटोरियल को चलाने के लिए ज़रूरी एनवायरमेंट सेट अप करेंगे. यह चरण पूरा होने के बाद, हमारे पास एक GKE क्लस्टर होगा, जहां हम डिप्लॉयमेंट चला सकते हैं.

  1. gcloud config की डिफ़ॉल्ट सेटिंग सेट करना

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. एपीआई चालू करना

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

Cloud Deploy के टारगेट तय करना

  1. Cloud Shell में, deploy डायरेक्ट्री में preview.yaml नाम की फ़ाइल बनाएं. इसके लिए, यह कमांड इस्तेमाल करें:

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. Cloud Shell में, deploy डायरेक्ट्री में canary.yaml नाम की फ़ाइल बनाएं. इसके लिए, यह कमांड इस्तेमाल करें:

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. Cloud Shell में, deploy डायरेक्ट्री में prod.yaml नाम की फ़ाइल बनाएं. इसके लिए, यह कमांड इस्तेमाल करें:

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

Notice the tag requireApproval which is set to true. मंज़ूरी मिलने तक, इस ऐप्लिकेशन को प्रोडक्शन ट्रैक पर प्रमोट नहीं किया जा सकेगा. रिलीज़ को मंज़ूरी देने के लिए, आपके पास roles/clouddeploy.approver की भूमिका होनी चाहिए.

  1. डिप्लॉय टारगेट बनाना
         `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. ऐप्लिकेशन बनाना

नया ऐप्लिकेशन बनाते समय, सीआई/सीडी पाइपलाइन को आम तौर पर ऑटोमैटिक बिल्ड, इंटिग्रेशन टेस्टिंग, और डिप्लॉयमेंट करने के लिए सेट अप किया जाता है. यहां दिया गया तरीका, नए ऐप्लिकेशन को सेटअप करने की प्रोसेस का हिस्सा माना जाता है. हर नए ऐप्लिकेशन के लिए, डिप्लॉयमेंट पाइपलाइन कॉन्फ़िगर की जाएगी.

Cloud Deploy पाइपलाइन तय करना

  1. Cloud Shell में, डिप्लॉय डायरेक्ट्री में pipeline.yaml नाम की फ़ाइल बनाएं. इसके लिए, यह कमांड इस्तेमाल करें:

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 टैग में stages नाम का एक टैग होता है. यह उन सभी टारगेट की सूची होती है जिनके लिए, इस डिलीवरी पाइपलाइन को डिप्लॉय करने के लिए कॉन्फ़िगर किया गया है.

targetId से पता चलता है कि डिलीवरी पाइपलाइन के इस चरण के लिए, किस टारगेट का इस्तेमाल करना है. यह वैल्यू, टारगेट की परिभाषा से मिली metadata.name प्रॉपर्टी होती है.

profiles, skaffold.yaml फ़ाइल में मौजूद, Skaffold की प्रोफ़ाइल के नामों की सूची है. इसमें शून्य या उससे ज़्यादा नाम हो सकते हैं. रिलीज़ बनाते समय Cloud Deploy, skaffold render वाली प्रोफ़ाइल का इस्तेमाल करता है.

  1. पाइपलाइन लागू करें

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

4. डेवलपमेंट फ़ेज़

ऐप्लिकेशन डेवलप किए जाने के दौरान, अपने-आप काम करने वाली सीआईसीडी टूलचेन, ऐसेट को बनाएंगी और उन्हें सेव करेंगी. skaffold का इस्तेमाल करके ऐप्लिकेशन बनाने और Cloud Deploy की मदद से डिप्लॉय करने के लिए, ऐसेट सेव करने के लिए यहां दिए गए निर्देशों का पालन करें. यह चरण, हर ऐप्लिकेशन बिल्ड के लिए आपकी सीआई/सीडी प्रोसेस से पूरा किया जाएगा.

  1. skaffold की मदद से ऐप्लिकेशन बनाना और उसे सेव करना

skaffold build \

--file-output=artifacts.json \

--default-repo gcr.io/$PROJECT_ID \

--push=true

5. रिलीज़ फ़ेज़

सीआई/सीडी प्रोसेस के आखिर में, आम तौर पर जब कोड को प्रोडक्शन के लिए टैग किया जाता है, तब cloud deploy release कमांड को कॉल करके रिलीज़ प्रोसेस शुरू की जाती है. बाद में, डिप्लॉयमेंट की पुष्टि हो जाने और उसे मंज़ूरी मिल जाने के बाद, रिलीज़ को अलग-अलग टारगेट एनवायरमेंट में ले जाया जाएगा. इसके लिए, ऑटोमेटेड प्रोसेस या मैन्युअल तरीके से मंज़ूरी देकर, ऐक्शन को प्रमोट और स्वीकार किया जाएगा.

रिलीज़ बनाना

हमने इस ट्यूटोरियल में Cloud Deploy फ़ाइलें पहले ही बना ली थीं, ताकि यह समझा जा सके कि Cloud Deploy कैसे काम करता है. डेमो के लिए, हमने Cloud Deploy की एक जैसी फ़ाइलें बनाई हैं. साथ ही, उन्हें GitHub repo में पुश किया है. इसमें सैंपल के तौर पर एक Go ऐप्लिकेशन भी शामिल है. हम 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 Console में<Cloud Deploy> पर जाएं
  2. "sample-app" पर क्लिक करें

इस स्क्रीन पर, आपको अपनी पाइपलाइन का ग्राफ़ दिखेगा.

  1. पुष्टि करें कि झलक वाले बॉक्स के बाईं ओर हरी आउटलाइन दिख रही हो. इसका मतलब है कि रिलीज़ को उस एनवायरमेंट में डिप्लॉय कर दिया गया है.
  2. स्क्रीन के निचले सेक्शन में, रिलीज़ की जानकारी में जाकर रिलीज़ के नाम पर क्लिक करके, रिलीज़ के बारे में ज़्यादा जानकारी देखें. यह ज़रूरी नहीं है
  3. पुष्टि करें कि रिलीज़ ने ऐप्लिकेशन को सही तरीके से डिप्लॉय किया है. इसके लिए, Cloud Shell में यह कमांड चलाएं

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 Console में sample-app पाइपलाइन पर जाएं
  2. Canary बॉक्स की बाईं ओर हरे रंग की आउटलाइन की पुष्टि करें. इसका मतलब है कि रिलीज़ को उस एनवायरमेंट में डिप्लॉय कर दिया गया है.
  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 के ज़रिए प्रॉड टारगेट बनाते समय, हमने requireApproval टैग को true के तौर पर सेट किया था. इससे प्रोडक्शन एनवायरमेंट में प्रमोशन के लिए अनुमति लेना ज़रूरी हो जाएगा.

  1. इस कमांड का इस्तेमाल करके, कैनरी रिलीज़ को प्रोडक्शन पर प्रमोट करें

gcloud beta deploy releases promote \

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

--delivery-pipeline=sample-app \

--quiet

  1. Google Cloud Console में sample-app पाइपलाइन पर जाएं
  2. "एक अनुरोध लंबित है" बताने वाले पीले इंडिकेटर पर ध्यान दें.

इस मैसेज का मतलब है कि प्रोडक्शन में डिप्लॉय करने के लिए, एक रिलीज़ को लाइन में रखा गया है. हालांकि, इसकी समीक्षा और मंज़ूरी ज़रूरी है.

  1. पीले रंग की सूचना के ठीक नीचे मौजूद, "समीक्षा करें" बटन पर क्लिक करें.
  2. अगली स्क्रीन पर, प्रोडक्शन के लिए मंज़ूरी वाली स्क्रीन को ऐक्सेस करने के लिए, "समीक्षा करें" पर फिर से क्लिक करें
  3. बदलावों की समीक्षा करने के लिए, मेनिफ़ेस्ट के अंतर की समीक्षा करें. यह ज़रूरी नहीं है. इस मामले में, एक नई फ़ाइल.
  4. "स्वीकार करें" बटन पर क्लिक करें
  5. sample-app pipeline page पर वापस जाएं. यहां आपको रिलीज़ टू प्रॉड की प्रोसेस दिखती है.

प्रोडक्शन रिलीज़ की समीक्षा करना

अन्य एनवायरमेंट की तरह ही, डिप्लॉयमेंट पूरा होने के बाद इसकी समीक्षा की जा सकती है. इसके लिए, यहां दिया गया तरीका अपनाएं.

  1. पोर्ट-फ़ॉरवर्ड बनाने के लिए, Cloud Shell में यह कमांड चलाएं

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 पर झलक देखें को चुनें

इससे आपको एक नया पेज दिखेगा, जिस पर "नमस्ते, दुनिया के लोगों!" मैसेज दिखेगा

  1. पोर्ट-फ़ॉरवर्डिंग बंद करने के लिए, टर्मिनल में ctrl+c का इस्तेमाल करें.