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



- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक कैरेक्टर स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे किसी भी समय अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता कि यह क्या है. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. इसे आम तौर पर
PROJECT_IDके तौर पर पहचाना जाता है. इसलिए, अगर आपको यह पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट करें. इसके अलावा, अपने हिसाब से कोई आईडी बनाकर देखें कि वह उपलब्ध है या नहीं. इसके बाद, प्रोजेक्ट बनाने के बाद इसे "फ़्रीज़" कर दिया जाता है. - तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
- इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. संसाधन बंद करने के लिए, कोडलैब के आखिर में दिए गए "बंद करें" निर्देशों का पालन करें, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.
2. आपका Workspace खाता तैयार किया जा रहा है
- इस यूआरएल पर जाकर, 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. पाइपलाइन के अपने-आप चलने की सुविधा कॉन्फ़िगर करना
Continuous Integration सिस्टम का मुख्य हिस्सा, सोर्स कंट्रोल सिस्टम में होने वाले इवेंट के आधार पर पाइपलाइन लॉजिक को लागू करने की क्षमता है. जब कोई डेवलपर अपनी रिपॉज़िटरी में कोड सबमिट करता है, तो इवेंट ट्रिगर होते हैं. इन इवेंट को कॉन्फ़िगर किया जा सकता है, ताकि ये दूसरे सिस्टम में प्रोसेस को ट्रिगर कर सकें.
इस चरण में, GitHub को कॉन्फ़िगर किया जाएगा, ताकि जब भी उपयोगकर्ता अपनी रिपॉज़िटरी में कोड कमिट करें या टैग करें, तो Google Cloud Build को कॉल किया जा सके और आपकी पाइपलाइन को लागू किया जा सके.
सुरक्षित ऐक्सेस की सुविधा चालू करना
अपने ऐप्लिकेशन पाइपलाइन को सुरक्षित तरीके से ऐक्सेस करने के लिए, आपको दो चीज़ों की ज़रूरत होगी. एपीआई पासकोड और पाइपलाइन के लिए यूनीक सीक्रेट पासकोड.
एपीआई पासकोड
एपीआई कुंजी का इस्तेमाल, उस क्लाइंट की पहचान करने के लिए किया जाता है जो किसी एपीआई को कॉल कर रहा है. इस मामले में, क्लाइंट 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
- ऑनबोर्ड-env.sh स्क्रिप्ट में एक वैरिएबल सेट किया गया था. यह वैरिएबल, प्रोजेक्ट की कंटेनर रजिस्ट्री को तय करता है. नीचे दिए गए कमांड की मदद से वैल्यू की समीक्षा करें.
echo $IMAGE_REPO
- पहले बनाए गए वैरिएबल का इस्तेमाल करके, CloudBuild Webhook ट्रिगर बनाएं. ऐप्लिकेशन की रिपॉज़िटरी की जगह की जानकारी, 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 Repo की समीक्षा करना
इस समय, आपको 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 ट्रिगर की समीक्षा करें
- इस पेज पर, बिल्ड का इतिहास देखें