1. मकसद
इस ट्यूटोरियल में, आपको झलक, कैनरी, और प्रोडक्शन नाम के तीन GKE क्लस्टर बनाने होंगे. इसके बाद, हर क्लस्टर के लिए Cloud Deploy टारगेट और Cloud Deploy पाइपलाइन बनाएं. इससे उन टारगेट में डिप्लॉयमेंट करने के लिए, चरणों के क्रम की जानकारी मिलेगी.
डिप्लॉयमेंट फ़्लो को cloudbuild पाइपलाइन से ट्रिगर किया जाएगा. यह पाइपलाइन, Cloud Deploy रिलीज़ बनाएगी और झलक वाले क्लस्टर में डिप्लॉयमेंट करेगी. यह पुष्टि करने के बाद कि झलक में डिप्लॉयमेंट पूरा हो गया है और वह उम्मीद के मुताबिक काम कर रहा है, आपको कैनरी क्लस्टर में रिलीज़ को मैन्युअल तरीके से प्रमोट करना होगा. प्रोड क्लस्टर में रिलीज़ का प्रमोशन करने के लिए, अनुमति लेनी होगी. इसके लिए, आपको Cloud Deploy के यूज़र इंटरफ़ेस (यूआई) में प्रोड लाइन पाइपलाइन को मंज़ूरी देनी होगी. इसके बाद, उसका प्रमोशन किया जा सकता है.
इस ट्यूटोरियल के लक्ष्यों को इन चरणों में बांटा जा सकता है:
- अपना फ़ाइल फ़ोल्डर तैयार करना
- Cloud Deploy के टारगेट तय करना
- Cloud Deploy पाइपलाइन तय करना
- रिलीज़ बनाना
- किसी डिप्लॉयमेंट का प्रमोशन करना
- प्रोडक्शन रिलीज़ को मंज़ूरी देना
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे किसी भी समय अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट में यूनीक होना चाहिए. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि वह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई और स्ट्रिंग जनरेट करें या अपनी स्ट्रिंग आज़माकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है. - तीसरी वैल्यू, प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने में आपको ज़्यादा खर्च नहीं करना पड़ेगा. इस ट्यूटोरियल के बाद, आपसे कोई शुल्क न लिया जाए, इसके लिए संसाधनों को बंद करें. इसके लिए, कोडलैब के आखिर में दिए गए "क्लीन-अप" निर्देशों का पालन करें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले कार्यक्रम में शामिल हो सकते हैं.
2. प्लैटफ़ॉर्म सेटअप करना
आपका फ़ाइल फ़ोल्डर तैयार करना
हम इस ट्यूटोरियल को चलाने के लिए, यहां अपना एनवायरमेंट सेट अप करेंगे. यह चरण पूरा होने के बाद, हमारे पास एक GKE क्लस्टर बन जाएगा, जहां हम डिप्लॉयमेंट चला सकते हैं.
- gcloud config की डिफ़ॉल्ट सेटिंग सेट करना
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)")
- एपीआई चालू करना
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
Cloud Deploy के टारगेट तय करना
- cloudshell में यह कमांड इस्तेमाल करके, डिप्लॉय डायरेक्ट्री में 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.
- cloudshell में यह कमांड इस्तेमाल करके, डिप्लॉय डायरेक्ट्री में 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
- cloudshell में यह कमांड इस्तेमाल करके, डिप्लॉय डायरेक्ट्री में 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 एट्रिब्यूट की वैल्यू 'सही' पर सेट है. मंज़ूरी मिलने तक, प्रॉडक्ट टारगेट में प्रमोशन नहीं किया जा सकेगा. रिलीज़ को मंज़ूरी देने के लिए, आपके पास roles/clouddeploy.approver भूमिका होनी चाहिए.
- डिप्लॉय टारगेट बनाना
`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 पाइपलाइन तय करना
- cloudshell में यह कमांड इस्तेमाल करके, डिप्लॉय डायरेक्ट्री में 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 रेंडर की मदद से प्रोफ़ाइल का इस्तेमाल करता है.
- पाइपलाइन लागू करना
gcloud beta deploy apply --file deploy/pipeline.yaml
4. डेवलपमेंट फ़ेज़
ऐप्लिकेशन के डेवलप होने के साथ-साथ, ऑटोमेटेड सीआईसीडी टूलचेन, ऐसेट बनाएंगे और उन्हें सेव करेंगे. skaffold का इस्तेमाल करके ऐप्लिकेशन बनाने और Cloud Deploy की मदद से डिप्लॉय करने के लिए, नीचे दिए गए निर्देशों का इस्तेमाल किया जाता है. हर ऐप्लिकेशन बिल्ड के लिए, सीआईसीडी प्रोसेस यह चरण पूरा करेगी.
- 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 फ़ाइलें बनाई हैं और उन्हें सैंपल Go ऐप्लिकेशन के साथ GitHub repo में डाला है. साथ ही, हम उस ऐप्लिकेशन को रिलीज़ करने के लिए, 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 Console में<Cloud Deploy> पर जाएं
- "sample-app" पर क्लिक करें
इस स्क्रीन पर, आपको अपनी पाइपलाइन की ग्राफ़िक जानकारी दिखेगी.
- झलक वाले बॉक्स की बाईं ओर हरे रंग की आउटलाइन की पुष्टि करें. इसका मतलब है कि रिलीज़ को उस एनवायरमेंट में डिप्लॉय कर दिया गया है.
- इसके अलावा, स्क्रीन के निचले सेक्शन में मौजूद 'रिलीज़ की जानकारी' में जाकर, रिलीज़ के नाम पर क्लिक करके, रिलीज़ के बारे में ज़्यादा जानकारी देखी जा सकती है
- पुष्टि करें कि रिलीज़ ने ऐप्लिकेशन को सही तरीके से डिप्लॉय किया है. इसके लिए, क्लाउशेल में यह कमांड चलाएं
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 Console में sample-app पाइपलाइन पर जाएं
- Canary बॉक्स की बाईं ओर हरे रंग की आउटलाइन की पुष्टि करें. इसका मतलब है कि रिलीज़ को उस एनवायरमेंट में डिप्लॉय कर दिया गया है.
- ऐप्लिकेशन के लिए टनल बनाकर, पुष्टि करें कि ऐप्लिकेशन सही तरीके से डिप्लॉय किया गया है
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 टारगेट बनाया था, तब हमने टैग के लिए requireApproval को 'सही' के तौर पर सेट किया था. इससे, प्रोडक्शन में प्रमोशन के लिए अनुमति लेना ज़रूरी हो जाएगा.
- कैनरी रिलीज़ को प्रोडक्शन में प्रमोट करने के लिए, यह कमांड इस्तेमाल करें
gcloud beta deploy releases promote \
--release=sample-app-release-${REL_TIMESTAMP} \
--delivery-pipeline=sample-app \
--quiet
- Google Cloud Console में sample-app पाइपलाइन पर जाएं
- पीले रंग के इंडिकेटर पर ध्यान दें, जिसमें "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
- स्क्रीन पर सबसे ऊपर दाईं ओर मौजूद, वेब की झलक वाले आइकॉन पर क्लिक करें.
- पोर्ट 8080 पर झलक देखें चुनें
ऐसा करने पर, आपको एक नया पेज दिखेगा, जिस पर "नमस्ते दुनिया के लोगों!" मैसेज दिखेगा.
- पोर्ट-फ़ॉरवर्ड को बंद करने के लिए, टर्मिनल में
ctrl+c
का इस्तेमाल करें.