1. शुरू करने से पहले
अपने हिसाब से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. साथ ही, आप इसे किसी भी समय अपडेट कर सकते हैं.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, आईडी को बदला नहीं जा सकता. सेट अप के बाद इसे बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई और स्ट्रिंग जनरेट करें या अपनी स्ट्रिंग आज़माकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है. - तीसरी वैल्यू, प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने में ज़्यादा खर्च नहीं आता. इस ट्यूटोरियल के बाद, आपसे कोई शुल्क न लिया जाए, इसके लिए संसाधनों को बंद करें. इसके लिए, कोडलैब के आखिर में दिए गए "क्लीन-अप" निर्देशों का पालन करें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले कार्यक्रम में शामिल हो सकते हैं.
2. आपका फ़ाइल फ़ोल्डर तैयार किया जा रहा है
- इस यूआरएल पर जाकर, Cloud Shell एडिटर खोलें
https://ide.cloud.google.com
- पक्का करें कि आपके प्रोजेक्ट का नाम, सीएलआई में सेट हो
gcloud config set project {{project-id}}
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
- एपीआई चालू करें
gcloud services enable \
cloudbuild.googleapis.com \
secretmanager.googleapis.com
- CloudDeploy को अधिकार दें
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.admin ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/container.developer ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/iam.serviceAccountUser ${PROJECT_ID}
gcloud projects add-iam-policy-binding --member="serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" --role roles/clouddeploy.jobRunner ${PROJECT_ID}
- टर्मिनल विंडो में, इस कमांड का इस्तेमाल करके ऐप्लिकेशन सोर्स को क्लोन करें:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- डायरेक्ट्री में जाएं और IDE वर्कस्पेस को रिपॉज़िटरी के रूट पर सेट करें
cd software-delivery-workshop && rm -rf .git
cd delivery-platform && cloudshell workspace .
3. पहले से तय किए गए और कस्टम ऐप्लिकेशन टेंप्लेट का इस्तेमाल करना
डेवलपर, संगठन में आम तौर पर इस्तेमाल किए जाने वाले टेंप्लेट के सेट में से कोई एक टेंप्लेट चुन सकते हैं. शामिल होने की प्रोसेस के दौरान, आपके GitHub खाते में सेव किए गए टेंप्लेट डेटा स्टोर करने की जगहों का एक ही सेट बनेगा. बाद के चरणों में, इन टेंप्लेट रिपॉज़िटरी को कॉपी करके उनमें बदलाव किया जाएगा, ताकि नए ऐप्लिकेशन के आधार के तौर पर उनका इस्तेमाल किया जा सके. इस लैब के लिए, आपको यहां दिए गए सैंपल स्ट्रक्चर की मदद से, अपने टेंप्लेट रिपॉज़िटरी को सेट अप करना होगा. सैंपल के हिसाब से अन्य फ़ोल्डर जोड़कर, अपने टेंप्लेट जोड़े जा सकते हैं.
इस चरण में, आपको दिए गए उदाहरणों की फ़ाइलों से, ऐप्लिकेशन टेंप्लेट को सेव करने के लिए अपना रिपॉज़िटरी बनाना होगा. GitHub के साथ इंटरैक्शन को आसान बनाने के लिए, एक हेल्पर स्क्रिप्ट दी गई है.
टेंप्लेट रिपॉज़िटरी को पॉप्युलेट करने के लिए, ये चरण एक बार ही पूरे किए जाते हैं. आने वाले समय में, डेटा स्टोर करने की इन जगहों का फिर से इस्तेमाल किया जाएगा.
GitHub का ऐक्सेस कॉन्फ़िगर करना
डेटा स्टोर करने की जगह बनाने और कॉन्फ़िगर करने के लिए, इस ट्यूटोरियल में दिए गए चरणों को GitHub API को कॉल किया गया है. आने वाले समय में, GitHub पर आपका उपयोगकर्ता नाम और निजी ऐक्सेस टोकन की ज़रूरत होगी. नीचे दी गई स्क्रिप्ट की मदद से, वैल्यू हासिल की जा सकती हैं. साथ ही, उन्हें बाद में इस्तेमाल करने के लिए, लोकल वैरिएबल के तौर पर स्टोर किया जा सकता है.
source ./onboard-env.sh
echo Git Username: $GIT_USERNAME
echo Git Base URL: $GIT_BASE_URL
ऐप्लिकेशन टेंप्लेट का कलेक्शन बनाना
इस लैब में, ऐप्लिकेशन के सैंपल टेंप्लेट दिए गए हैं. इनसे आपको यह समझने में मदद मिलेगी कि अपने बेस टेंप्लेट को कैसे इंटिग्रेट किया जा सकता है. इस चरण में, अपने GitHub खाते के mcd-app-templates
रेपो में, इन फ़ाइलों की कॉपी बनाई जाती है.
- टेंप्लेट को वर्किंग डायरेक्ट्री में कॉपी करें
cp -R $BASE_DIR/resources/repos/app-templates $WORK_DIR
cd $WORK_DIR/app-templates
- अपने GitHub खाते में खाली रिमोट रिपॉज़िटरी बनाना
$BASE_DIR/scripts/git/gh.sh create mcd-app-templates
- टेंप्लेट रिपॉज़िटरी को अपनी रिमोट रिपॉज़िटरी में पुश करें
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-app-templates
git push origin main
- वर्किंग डायरेक्ट्री को खाली करना
cd $BASE_DIR
rm -rf $WORK_DIR/app-templates
शेयर किए गए बुनियादी कॉन्फ़िगरेशन का डेटा स्टोर करने की जगह बनाएं
यह ट्यूटोरियल, Kustomize नाम के टूल का इस्तेमाल करता है. यह टूल कई टीमों के साथ शेयर की गई बुनियादी कॉन्फ़िगरेशन फ़ाइलों का इस्तेमाल करता है. इसके बाद, ऐप्लिकेशन के हिसाब से बनाए गए कॉन्फ़िगरेशन को सबसे ऊपर ओवरले कर लेता है. इससे प्लैटफ़ॉर्म की टीमें, अलग-अलग टीमों और एनवायरमेंट में पहुंच पाती हैं.
इस चरण में, दिए गए सैंपल से mcd-shared_kustomize
नाम का शेयर किया गया कॉन्फ़िगरेशन रिपॉज़िटरी बनाया जाता है
- टेंप्लेट को वर्किंग डायरेक्ट्री में कॉपी करें
cp -R $BASE_DIR/resources/repos/shared-kustomize $WORK_DIR
cd $WORK_DIR/shared-kustomize
- अपने GitHub खाते में खाली रिमोट रिपॉज़िटरी बनाना
$BASE_DIR/scripts/git/gh.sh create mcd-shared_kustomize
- टेंप्लेट रिपॉज़िटरी को अपनी रिमोट रिपॉज़िटरी में पुश करें
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/mcd-shared_kustomize
git push origin main
- वर्किंग डायरेक्ट्री को खाली करना
cd $BASE_DIR
rm -rf $WORK_DIR/shared-kustomize
टेंप्लेट रिपॉज़िटरी बनाने के बाद, उनका इस्तेमाल करके ऐप्लिकेशन इंस्टेंस बनाया जा सकता है
4. किसी ऐप्लिकेशन का नया इंस्टेंस बनाना
किसी टेंप्लेट से नया ऐप्लिकेशन बनाने के लिए, अक्सर यह ज़रूरी होता है कि टेंप्लेट स्ट्रक्चर में मौजूद कई फ़ाइलों में, प्लेसहोल्डर वैरिएबल को असल वैल्यू से बदल दिया जाए. बदलाव पूरा होने के बाद, नए ऐप्लिकेशन इंस्टेंस के लिए एक नया रिपॉज़िटरी बन जाता है. डेवलपर, इस ऐप्लिकेशन इंस्टेंस रिपॉज़िटरी को क्लोन करेंगे और अपने रोज़मर्रा के डेवलपमेंट में इसका इस्तेमाल करेंगे.
इस चरण में, आपको ऐप्लिकेशन टेंप्लेट में वैल्यू बदलनी होंगी और नतीजों वाली फ़ाइलों को किसी नई रिपॉज़िटरी में पोस्ट करना होगा.
नए ऐप्लिकेशन के लिए कोई नाम तय करें
export APP_NAME=my-app
Golang टेंप्लेट रिपॉज़िटरी को वापस लाना
cd $WORK_DIR/
git clone -b main $GIT_BASE_URL/mcd-app-templates app-templates
rm -rf app-templates/.git
cd app-templates/golang
प्लेसहोल्डर वैल्यू बदलना
ऑनबोर्डिंग के लिए सबसे ज़रूरी चीज़ों में से एक है, ऐप्लिकेशन में इस्तेमाल किए जाने वाले असल इंस्टेंस के लिए, टेंप्लेट में वैरिएबल बदलना. उदाहरण के लिए, ऐप्लिकेशन का नाम देना. यह कमांड, सभी .tmpl फ़ाइलों के इंस्टेंस बनाता है. इन इंस्टेंस में, एनवायरमेंट वैरिएबल में सेव की गई वैल्यू का इस्तेमाल किया जाता है.
for template in $(find . -name '*.tmpl'); do envsubst < ${template} > ${template%.*}; done
नया रिपॉज़िटरी बनाना और अपडेट की गई फ़ाइलों को स्टोर करना
- अपने GitHub खाते में खाली रिमोट रिपॉज़िटरी बनाना
$BASE_DIR/scripts/git/gh.sh create ${APP_NAME}
- टेंप्लेट रिपॉज़िटरी को अपनी रिमोट रिपॉज़िटरी में पुश करना
git init && git symbolic-ref HEAD refs/heads/main && git add . && git commit -m "initial commit"
git remote add origin $GIT_BASE_URL/${APP_NAME}
git push origin main
ऐप्लिकेशन इंस्टेंस बना लेने के बाद, अब लगातार बिल्ड लागू करने का समय आ गया है.
5. ऑटोमेटेड पाइपलाइन के काम करने की प्रक्रिया को कॉन्फ़िगर करना
सोर्स कंट्रोल सिस्टम में होने वाले इवेंट के आधार पर, पाइपलाइन लॉजिक को लागू करने की सुविधा, लगातार इंटिग्रेशन सिस्टम का मुख्य हिस्सा है. जब कोई डेवलपर अपने रिपॉज़िटरी इवेंट में कोड लेता है, तो उन्हें दूसरे सिस्टम में प्रोसेस को ट्रिगर करने के लिए कॉन्फ़िगर किया जा सकता है.
इस चरण में, आपको GitHub को Google Cloud Build को कॉल करने के लिए कॉन्फ़िगर करना होगा. साथ ही, यह भी तय करना होगा कि जब भी उपयोगकर्ता अपनी रिपॉज़िटरी में कोड को कमिट या टैग करें, तब आपकी पाइपलाइन कैसे काम करे.
सुरक्षित ऐक्सेस की सुविधा चालू करना
अपनी ऐप्लिकेशन पाइपलाइन का सुरक्षित ऐक्सेस कॉन्फ़िगर करने के लिए, आपको दो एलिमेंट की ज़रूरत होगी. एपीआई पासकोड और पाइपलाइन के लिए यूनीक सीक्रेट.
API (एपीआई) कुंजी
एपीआई कुंजी का इस्तेमाल, किसी एपीआई को कॉल करने वाले क्लाइंट की पहचान करने के लिए किया जाता है. इस मामले में, क्लाइंट का नाम GitHub होगा. यहां बताया गया सबसे सही तरीका यह नहीं है कि एपीआई पासकोड का स्कोप सिर्फ़ उन एपीआई के लिए लॉक किया जाए जिन्हें क्लाइंट ऐक्सेस करेगा. आपने पिछले चरण में कुंजी बनाई थी.
- इस लिंक पर क्लिक करके, पासकोड की समीक्षा की जा सकती है
- यह पक्का करने के लिए कि वैल्यू सेट हो गई है, यह कमांड चलाएं
echo $API_KEY_VALUE
पाइपलाइन सीक्रेट
सीक्रेट का इस्तेमाल, कॉल करने वाले को अनुमति देने और यह पक्का करने के लिए किया जाता है कि उसके पास क्लाउड बिल्ड टारगेट जॉब के अधिकार हैं. आपके पास GitHub में दो अलग-अलग रिपॉज़िटरी हो सकती हैं. इन रिपॉज़िटरी के पास सिर्फ़ अपनी पाइपलाइन का ऐक्सेस होना चाहिए. API_KEY से यह तय होता है कि github किन एपीआई का इस्तेमाल कर सकता है. इस मामले में, Cloud Build API को कॉल किया जा रहा है. वहीं, पासकोड से यह तय होता है कि क्लाइंट, Cloud Build API में कौनसी जॉब को लागू कर सकता है.
- सीक्रेट का नाम, जगह, और वैल्यू तय करना
SECRET_NAME=${APP_NAME}-webhook-trigger-cd-secret
SECRET_PATH=projects/${PROJECT_NUMBER}/secrets/${SECRET_NAME}/versions/1
SECRET_VALUE=$(sed "s/[^a-zA-Z0-9]//g" <<< $(openssl rand -base64 15))
- सीक्रेट बनाना
printf ${SECRET_VALUE} | gcloud secrets create ${SECRET_NAME} --data-file=-
- Cloud Build को सीक्रेट पढ़ने की अनुमति दें
gcloud secrets add-iam-policy-binding ${SECRET_NAME} \
--member=serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-cloudbuild.iam.gserviceaccount.com \
--role='roles/secretmanager.secretAccessor'
Cloud Build ट्रिगर बनाना
Cloud Build ट्रिगर वह कॉन्फ़िगरेशन है जो असल में सीआईसीडी प्रोसेस को लागू करेगा.
ट्रिगर को सही तरीके से कॉन्फ़िगर करने के लिए, टास्क को बनाते समय कुछ मुख्य वैल्यू देनी होंगी.
- ट्रिगर का नाम बताएं. साथ ही, यह भी तय करें कि कॉन्फ़िगरेशन फ़ाइल कहां मिल सकती है
export TRIGGER_NAME=${APP_NAME}-clouddeploy-webhook-trigger
export BUILD_YAML_PATH=$WORK_DIR/app-templates/golang/build/cloudbuild-cd.yaml
- शेयर किए गए बेस कॉन्फ़िगरेशन के रेपो की जगह तय करें.
export KUSTOMIZE_REPO=${GIT_BASE_URL}/mcd-shared_kustomize
- प्रोजेक्ट की कंटेनर रजिस्ट्री को तय करने वाली onboard-env.sh स्क्रिप्ट में एक वैरिएबल सेट किया गया. नीचे दिए गए कमांड की मदद से वैल्यू देखें.
echo $IMAGE_REPO
- पहले से बनाए गए वैरिएबल का इस्तेमाल करके, CloudBuild वेबहुक ट्रिगर बनाएं. ऐप्लिकेशन के डेटा स्टोर करने की जगह की जानकारी, GitHub से मिले अनुरोध के बॉडी से ली जाती है. यहां दी गई वैल्यू, अनुरोध के मुख्य हिस्से में मौजूद उस पाथ का रेफ़रंस देती है जहां यह मौजूद है
gcloud alpha builds triggers create webhook \
`--name=${TRIGGER_NAME} \` `--substitutions='_APP_NAME='${APP_NAME}',_APP_REPO=$(body.repository.git_url),_CONFIG_REPO='${GIT_BASE_URL}'/'${CLUSTER_CONFIG_REPO}',_DEFAULT_IMAGE_REPO='${IMAGE_REPO}',_KUSTOMIZE_REPO='${GIT_BASE_URL}'/'${SHARED_KUSTOMIZE_REPO}',_REF=$(body.ref)' \` `--inline-config=$BUILD_YAML_PATH \` `--secret=${SECRET_PATH}`
- इस लिंक पर जाकर, Console में नए बनाए गए Cloud Build ट्रिगर की समीक्षा करें
- एंडपॉइंट यूआरएल के लिए एक वैरिएबल तय करें. इसका इस्तेमाल, GitHub अगले चरण में करेगा
WEBHOOK_URL="https://cloudbuild.googleapis.com/v1/projects/${PROJECT_ID}/triggers/${TRIGGER_NAME}:webhook?key=${API_KEY_VALUE}&secret=${SECRET_VALUE}"
GitHub वेबहुक कॉन्फ़िगर करना
- GitHub में वेबहुक कॉन्फ़िगर करना
$BASE_DIR/scripts/git/gh.sh create_webhook ${APP_NAME} $WEBHOOK_URL
- ऐप्लिकेशन के रिपॉज़िटरी पर जाएं और नए कॉन्फ़िगर किए गए वेबहुक की समीक्षा करें
REPO_URL=${GIT_BASE_URL}/${APP_NAME}/settings/hooks
echo $REPO_URL
आपने नया ऐप्लिकेशन बनाने के लिए, मैन्युअल तरीके से सभी ज़रूरी चरण पूरे कर लिए हैं. अब इसे स्क्रिप्ट में ऑटोमेट करने का समय आ गया है.
6. शामिल होने के सभी चरणों को ऑटोमेट करना
असल में, हर नए ऐप्लिकेशन के लिए ऊपर दिए गए हर चरण को पूरा करना मुमकिन नहीं है. इसके बजाय, आसानी से लागू करने के लिए लॉजिक को स्क्रिप्ट में शामिल किया जाना चाहिए. ऊपर बताए गए चरण आपके इस्तेमाल की स्क्रिप्ट में पहले ही शामिल कर लिए गए हैं.
इस चरण में, आपको नया ऐप्लिकेशन बनाने के लिए दी गई स्क्रिप्ट का इस्तेमाल करना होगा
नया ऐप्लिकेशन बनाएं
- पक्का करें कि आप सही डायरेक्ट्री में हों
cd $BASE_DIR
- नया ऐप्लिकेशन बनाना
export APP_NAME=demo-app
./app.sh create ${APP_NAME}
सभी चरण अपने-आप पूरे हो जाते हैं.
GitHub पर मौजूद डेटा स्टोर करने की जगह की समीक्षा करना
इसके बाद, GitHub में नए रिपॉज़िटरी की समीक्षा की जा सकेगी
- नीचे दिए गए निर्देश की मदद से, GitHub रिपॉज़िटरी का यूआरएल वापस पाएं
echo ${GIT_BASE_URL}/demo-app
- नए ऐप्लिकेशन की समीक्षा करने के लिए, अपने वेब ब्राउज़र से यूआरएल खोलें
- ऐसे उदाहरणों पर ध्यान दें जिनमें टेंप्लेट वैरिएबल को इंस्टेंस वैल्यू से बदल दिया गया है, जैसा कि नीचे दिए गए यूआरएल में दिखाया गया है
echo ${GIT_BASE_URL}/demo-app/blob/main/k8s/prod/deployment.yaml#L24
- यहां दिए गए यूआरएल पर जाकर, कॉन्फ़िगर किए गए वेबहुक की समीक्षा करें
echo ${GIT_BASE_URL}/demo-app/settings/hooks
CloudBuild ट्रिगर की समीक्षा करना
स्क्रिप्ट ने ट्रिगर अपने-आप सेट अप कर दिया था
- इस लिंक पर जाकर, Console में Cloud Build ट्रिगर की समीक्षा करें
- इस पेज पर, बिल्ड का इतिहास देखें