1. खास जानकारी
इस लैब में, आपको Cloud Build के साथ GKE (जीकेई) के लिए, लगातार डिलीवरी की प्रोसेस सेट अप करने का तरीका पता चलेगा. यह लैब, अलग-अलग git इवेंट के लिए Cloud Build जॉब को ट्रिगर करने के तरीके के साथ-साथ GKE में ऑटोमेटेड कैनरी रिलीज़ के लिए एक आसान पैटर्न को हाइलाइट करता है.
आपको ये चरण पूरे करने होंगे:
- GKE (जीकेई) ऐप्लिकेशन बनाएं
- git ब्रांच के लिए डिप्लॉयमेंट ऑटोमेट करना
- git मुख्य ब्रांच के लिए डिप्लॉयमेंट ऑटोमेट करना
- गिट टैग के लिए अपने-आप डिप्लॉयमेंट की सुविधा चालू करना
2. शुरू करने से पहले
इस रेफ़रंस गाइड के लिए, आपके पास Google Cloud प्रोजेक्ट होना चाहिए. नया प्रोजेक्ट बनाया जा सकता है या पहले से बनाया गया कोई प्रोजेक्ट चुना जा सकता है:
- Google Cloud प्रोजेक्ट चुनें या बनाएं.
प्रोजेक्ट चुनने वाले पेज पर जाएं
- अपने प्रोजेक्ट के लिए बिलिंग की सुविधा चालू करें.
3. आपके एनवायरमेंट को तैयार किया जा रहा है
- इस ट्यूटोरियल में इस्तेमाल करने के लिए, एनवायरमेंट वैरिएबल बनाएं:
export PROJECT_ID=$(gcloud config get-value project) export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') export ZONE=us-central1-b export CLUSTER=gke-progression-cluster export APP_NAME=myapp
- इन एपीआई को चालू करें:
- रिसोर्स मैनेजर
- GKE (जीकेई)
- Cloud Source Repositories
- Cloud Build
- कंटेनर रजिस्ट्री
gcloud services enable \ cloudresourcemanager.googleapis.com \ container.googleapis.com \ sourcerepo.googleapis.com \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ --async
- सैंपल सोर्स का क्लोन बनाएं और लैब डायरेक्ट्री पर स्विच करें:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git gke-progression cd gke-progression/labs/gke-progression rm -rf ../../.git
- सैंपल रिपॉज़िटरी में प्लेसहोल्डर वैल्यू को अपने
PROJECT_ID
से बदलें:इस चरण में, आपके मौजूदा एनवायरमेंट के हिसाब से यूनीक कॉन्फ़िगरेशन फ़ाइलों के इंस्टेंस बनाए जाते हैं.अपडेट किए जा रहे टेंप्लेट के उदाहरण देखने के लिए, नीचे दिया गया कमांड चलाएं.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़ॉलोइन कमांड को लागू करके, वैरिएबल को बदलें.cat k8s/deployments/dev/frontend-dev.yaml.tmpl
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है प्रतिस्थापन के बाद फ़ाइल के उदाहरण की समीक्षा करने के लिए, नीचे दिया गया कमांड चलाएं.for template in $(find . -name '*.tmpl'); do envsubst '${PROJECT_ID} ${ZONE} ${CLUSTER} ${APP_NAME}' < ${template} > ${template%.*}; done
cat k8s/deployments/dev/frontend-dev.yaml
- अगर आपने Cloud Shell में Git का इस्तेमाल पहले नहीं किया है, तो
user.name
औरuser.email
की उन वैल्यू को सेट करें जिनका इस्तेमाल आपको करना है:git config --global user.email "YOUR_EMAIL_ADDRESS" git config --global user.name "YOUR_USERNAME"
- सैंपल रिपॉज़िटरी से मिले कोड को Cloud सोर्स डेटा स्टोर करने की जगहों में सेव करें:
gcloud source repos create gke-progression git init git config credential.helper gcloud.sh git remote add gcp https://source.developers.google.com/p/$PROJECT_ID/r/gke-progression git branch -m main git add . && git commit -m "initial commit" git push gcp main
- अपना GKE (जीकेई) क्लस्टर बनाएं.
gcloud container clusters create ${CLUSTER} \ --project=${PROJECT_ID} \ --zone=${ZONE}
- अपने क्लस्टर को Cloud Build के अधिकार दें.Cloud Build आपके GKE (जीकेई) क्लस्टर में इस ऐप्लिकेशन को डिप्लॉय करेगा. साथ ही, ऐसा करने के लिए Cloud Build को अधिकारों की ज़रूरत होगी.
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role=roles/container.developer
आपका एनवायरमेंट तैयार है!
4. आपका GKE (जीकेई) ऐप्लिकेशन बनाया जा रहा है
इस सेक्शन में, प्रोडक्शन के लिए वह ऐप्लिकेशन बनाया और डिप्लॉय किया जाता है जिसका इस्तेमाल इस ट्यूटोरियल में किया जाता है.
- Cloud Build की मदद से ऐप्लिकेशन बनाएं:
gcloud builds submit --tag gcr.io/$PROJECT_ID/$APP_NAME:1.0.0 src/
- कैनरी और प्रोडक्शन एनवायरमेंट में मैन्युअल तरीके से डिप्लॉय करें:
kubectl apply
निर्देशों का इस्तेमाल करके, प्रोडक्शन और कैनरी डिप्लॉयमेंट और सेवाएं बनाएं.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है यहां डिप्लॉय की गई सेवा, ट्रैफ़िक को कैनरी और प्रोडक्शन, दोनों डिप्लॉयमेंट पर रूट करेगी.kubectl create ns production kubectl apply -f k8s/deployments/prod -n production kubectl apply -f k8s/deployments/canary -n production kubectl apply -f k8s/services -n production
- दौड़ने वाले पॉड की संख्या की समीक्षा करें, यह पक्का करें कि आपके पास फ़्रंटएंड के लिए चार पॉड चल रहे हैं. इसमें, प्रोडक्शन ट्रैफ़िक के लिए तीन और कैनरी रिलीज़ के लिए एक पॉड शामिल है. इसका मतलब है कि आपकी कैनरी रिलीज़ में किए गए बदलावों का असर, चार में से सिर्फ़ 1 (25%) उपयोगकर्ताओं पर पड़ेगा.
kubectl get pods -n production -l app=$APP_NAME -l role=frontend
- प्रोडक्शन सेवाओं के लिए बाहरी आईपी पता वापस पाएं.
लोड बैलेंसर से आईपी पता वापस मिलने पर, अगले चरण पर जाएंkubectl get service $APP_NAME -n production
- बाद में इस्तेमाल करने के लिए बाहरी आईपी को सेव करें.
export PRODUCTION_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=production services $APP_NAME)
- ऐप्लिकेशन की समीक्षा करें सेवा के वर्शन आउटपुट की जाँच करें. इसे Hello World v1.0 फ़ॉर्मैट में होना चाहिए
curl http://$PRODUCTION_IP
बधाई हो! आपने सैंपल ऐप्लिकेशन डिप्लॉय किया है! इसके बाद, अपने बदलावों को लगातार लागू करने के लिए आपको ट्रिगर सेट अप करने होंगे.
5. git ब्रांच के लिए डिप्लॉयमेंट ऑटोमेट करना
इस सेक्शन में, एक ट्रिगर सेट अप किया जाएगा. यह ट्रिगर, main
के अलावा किसी भी अन्य ब्रांच का इस्तेमाल करके Cloudbuild जॉब को एक्ज़ीक्यूट करेगा. यहां इस्तेमाल की गई Cloud Build फ़ाइल, किसी भी मौजूदा या नई ब्रांच के लिए, अपने-आप नेमस्पेस और डिप्लॉयमेंट बन जाएगी. इससे डेवलपर, मुख्य ब्रांच के साथ इंटिग्रेशन से पहले अपने कोड की झलक देख पाएंगे.
- ट्रिगर सेट अप करें:इस ट्रिगर का मुख्य कॉम्पोनेंट
branchName
पैरामीटर का इस्तेमाल करना है, ताकिmain
औरinvertRegex
पैरामीटर से मैच किया जा सके. यह पैरामीटर 'सही' पर सेट है. साथ ही, यहbranchName
पैटर्न में बदलाव करता है, ताकि वहmain
के अलावा किसी और चीज़ से मैच कर सके. आपके रेफ़रंस के लिए,build/branch-trigger.json
में ये लाइनें देखी जा सकती हैं."branchName": "main", "invertRegex": true
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इसके अलावा, इस ट्रिगर के साथ इस्तेमाल की जाने वाली Cloud Build फ़ाइल की आखिरी कुछ लाइनें, जॉब को ट्रिगर करने वाली ब्रांच के नाम पर एक नेमस्पेस बनाती हैं. इसके बाद, नए नेमस्पेस में ऐप्लिकेशन और सेवा को डिप्लॉय करती हैं. आपके रेफ़रंस के लिए,build/branch-cloudbuild.yaml
kubectl get ns ${BRANCH_NAME} || kubectl create ns ${BRANCH_NAME} kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/deployments/dev kubectl apply --namespace ${BRANCH_NAME} --recursive -f k8s/services
में ये लाइनें देखी जा सकती हैं अब आपने इस्तेमाल किया जा रहा तरीका समझ लिया है. इसलिए, नीचे दिए गए gcloud कमांड की मदद से ट्रिगर बनाएं.gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/branch-trigger.json
- ट्रिगर की समीक्षा करने के लिए, कंसोल में Cloud Build के ट्रिगर पेज पर जाएं.ट्रिगर पर जाएं
- नई ब्रांच बनाएं:
git checkout -b new-feature-1
- इस कोड में बदलाव करके, v1.1बदलाव
src/app.py
को दिखाएं और रिस्पॉन्स को 1.0 से 1.1 में बदलें@app.route('/') def hello_world(): return 'Hello World v1.1'
- बदलाव करें और रिमोट रिपॉज़िटरी में पुश करें:
git add . && git commit -m "updated" && git push gcp new-feature-1
- बिल्ड की प्रोग्रेस की समीक्षा करने के लिए, कंसोल में Cloud Build के इतिहास पेज पर जाएं.बिल्ड पर जाएंबिल्ड के पूरा होने के बाद, अगले चरण पर जाएं
- डिप्लॉय की गई नई ब्रांच सेवा के लिए, एक्सटर्नल आईपी पता वापस पाएं.
लोड बैलेंसर से आईपी पता वापस मिलने पर, अगले चरण पर जाएंkubectl get service $APP_NAME -n new-feature-1
- बाद में इस्तेमाल करने के लिए बाहरी आईपी को सेव करें.
export BRANCH_IP=$(kubectl get -o jsonpath="{.status.loadBalancer.ingress[0].ip}" --namespace=new-feature-1 services $APP_NAME)
- ऐप्लिकेशन की समीक्षा करें. सेवा का वर्शन आउटपुट देखें. इसे Hello World v1.0 फ़ॉर्मैट में होना चाहिए
curl http://$BRANCH_IP
6. git मुख्य ब्रांच के लिए, डिप्लॉयमेंट को ऑटोमेट करना
कोड को प्रोडक्शन में रिलीज़ करने से पहले, सभी ट्रैफ़िक को नए कोड बेस पर माइग्रेट करने से पहले, कोड को लाइव ट्रैफ़िक के एक छोटे सबसेट पर रिलीज़ करना सामान्य बात है.
इस सेक्शन में, एक ट्रिगर लागू किया गया है, जो मुख्य ब्रांच के लिए कोड के तय होने पर चालू होता है. ट्रिगर कैनरी डिप्लॉयमेंट का इस्तेमाल करता है, जिसे नए बदलाव पर पूरे लाइव ट्रैफ़िक का 25% मिलता है.
- मुख्य ब्रांच के लिए ट्रिगर सेट अप करें:
gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/main-trigger.json
- नए ट्रिगर की समीक्षा करने के लिए, कंसोल में Cloud Build के ट्रिगर पेज पर जाएं.ट्रिगर पर जाएं
- ब्रांच को मुख्य लाइन में मर्ज करें और उसे रिमोट रिपॉज़िटरी में पुश करें:
git checkout main git merge new-feature-1 git push gcp main
- बिल्ड की प्रोग्रेस की समीक्षा करने के लिए, कंसोल में Cloud Build इतिहास पेज पर जाएं.बिल्ड पर जाएंबिल्ड पर जाने के बाद, अगले चरण पर जाएं
- सर्वर से मिले एक से ज़्यादा रिस्पॉन्स की समीक्षा करें. नीचे दिया गया निर्देश चलाएं और ध्यान दें कि करीब 25% रिस्पॉन्स, Hello World v1.1 के नए रिस्पॉन्स दिखा रहे हैं
जब आप जारी रखने के लिए तैयार हों, तो लूप से बाहर निकलने के लिएwhile true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1; done
Ctrl+c
दबाएं.
7. Git टैग के लिए डिप्लॉयमेंट ऑटोमेट करना
ट्रैफ़िक के एक छोटे सबसेट से कैनरी डिप्लॉयमेंट की पुष्टि होने के बाद, बाकी बचे ट्रैफ़िक के लिए डिप्लॉयमेंट को रिलीज़ किया जाता है.
इस सेक्शन में, उस ट्रिगर को सेट अप किया जाता है जो रिपॉज़िटरी में टैग बनाने पर चालू होता है. ट्रिगर इमेज को सही टैग के साथ लेबल करता है. इसके बाद, यह पक्का करने के लिए अपडेट लागू करता है कि 100% ट्रैफ़िक, टैग की गई इमेज को ऐक्सेस कर रहा है.
- टैग ट्रिगर सेट अप करें:
gcloud beta builds triggers create cloud-source-repositories \ --trigger-config build/tag-trigger.json
- नए ट्रिगर की समीक्षा करने के लिए, कंसोल में Cloud Build के ट्रिगर पेज पर जाएं.ट्रिगर पर जाएं
- नया टैग बनाएं और रिमोट रिपॉज़िटरी में पुश करें:
git tag 1.1 git push gcp 1.1
- बिल्ड की प्रोग्रेस की समीक्षा करने के लिए, कंसोल में Cloud Build इतिहास पेज पर जाएं.बिल्ड पर जाएं
- सर्वर से मिले एक से ज़्यादा रिस्पॉन्स की समीक्षा करें. इसके लिए, यहां दिया गया निर्देश चलाएं और ध्यान दें कि 100% रिस्पॉन्स, Hello World v1.1 का नया रिस्पॉन्स दिखा रहे हैं. इसमें कुछ समय लग सकता है, क्योंकि GKE (जीकेई) में नए पॉड डिप्लॉय किए जाते हैं और उनकी परफ़ॉर्मेंस की जांच की जाती है
जब आप आगे बढ़ने के लिए तैयार हों, तब लूप से बाहर निकलने के लिएwhile true; do curl -w "\n" http://$PRODUCTION_IP; sleep 1; done
Ctrl+c
दबाएं.बधाई हो! आपने Cloud Build में ब्रांच और टैग के लिए सीआई/सीडी ट्रिगर बनाए हैं, ताकि GKE (जीकेई) पर अपने ऐप्लिकेशन डिप्लॉय किए जा सकें.
8. साफ़-सफ़ाई सेवा
प्रोजेक्ट मिटाएं
- Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
- प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
- डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए, शट डाउन करें पर क्लिक करें.