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

1. मकसद

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

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

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. cloudshell में यह कमांड देकर, 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. cloudshell में यह कमांड देकर, 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. cloudshell में यह कमांड देकर, 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

requireApproval टैग पर ध्यान दें, जिसे 'सही' पर सेट किया गया है. इससे, मंज़ूरी मिलने तक prod टारगेट में प्रमोशन नहीं किया जा सकेगा. रिलीज़ को मंज़ूरी देने के लिए, आपके पास 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. ऐप्लिकेशन बनाना

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

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

  1. cloudshell में यह कमांड देकर, deploy डायरेक्ट्री में 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 रेंडर के साथ प्रोफ़ाइल का इस्तेमाल करता है.

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

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

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

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

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

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 फ़ाइलें बनाई हैं और उन्हें github रिपॉज़िटरी में पुश किया है. इसमें, 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 रिलीज़ बनने पर, यह पहले टारगेट में अपने-आप रोल आउट हो जाती है. यह टारगेट, preview होता है.

  1. Google Cloud Console में <Cloud Deploy> पर जाएं
  2. "sample-app" पर क्लिक करें

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

  1. preview बॉक्स के बाईं ओर, हरे रंग की आउटलाइन की पुष्टि करें. इसका मतलब है कि रिलीज़ को उस एनवायरमेंट में डिप्लॉय कर दिया गया है.
  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 पर, झलक देखें को चुनें

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

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

रिलीज़ को प्रमोट करना

अब आपकी रिलीज़, पाइपलाइन के पहले टारगेट (preview) में डिप्लॉय हो गई है. इसे अगले टारगेट (canary) में प्रमोट किया जा सकता है. प्रोसेस शुरू करने के लिए, यह कमांड चलाएं.

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

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

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

प्रोडक्शन रिलीज़ को मंज़ूरी देना

याद रखें कि prod.yaml की मदद से prod टारगेट बनाते समय, हमने requireApproval टैग को 'सही' पर सेट किया था. इससे, prod में प्रमोशन के लिए मंज़ूरी की ज़रूरत होगी.

  1. canary रिलीज़ को प्रोडक्शन में प्रमोट करने के लिए, यह कमांड चलाएं

gcloud beta deploy releases promote \

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

--delivery-pipeline=sample-app \

--quiet

  1. Google Cloud Console में, sample-app पाइपलाइन पर जाएं
  2. पीले रंग के इंडिकेटर पर ध्यान दें, जिसमें "1 pending" लिखा है.

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

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

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

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

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

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 का इस्तेमाल करें.