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