paint-brush
GitHub (पूर्वावलोकन) Google क्लाउड प्लेटफ़ॉर्म के साथ परिनियोजन: एक आवश्यक मार्गदर्शिकाद्वारा@patrickheneise
470 रीडिंग
470 रीडिंग

GitHub (पूर्वावलोकन) Google क्लाउड प्लेटफ़ॉर्म के साथ परिनियोजन: एक आवश्यक मार्गदर्शिका

द्वारा Patrick Heneise6m2023/06/02
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

GitHub Deployer एक छोटी Node.js सेवा है जो GitHub ऐप के साथ अधिकृत है और GitHub Deployments API के साथ इंटरैक्ट करती है। यह आपको वातावरण बनाने देता है, प्रति वातावरण अलग-अलग चर रखता है और पुल अनुरोध पर सीधे निर्माण और परिनियोजन स्थिति दिखाता है। डॉकर छवि तैयार निर्मित नहीं है; आपको इसे स्वयं बनाना होगा और इसे अपनी रजिस्ट्री में धकेलना होगा।
featured image - GitHub (पूर्वावलोकन) Google क्लाउड प्लेटफ़ॉर्म के साथ परिनियोजन: एक आवश्यक मार्गदर्शिका
Patrick Heneise HackerNoon profile picture
0-item

प्रेरणा और परिचय

बिल्ड पूर्वावलोकन कुछ भी नया या अभिनव नहीं है। हरोकू उनके पास वर्षों से था। हालाँकि, यदि आप Google क्लाउड प्लेटफ़ॉर्म पर निर्माण कर रहे हैं, तो चीज़ें थोड़ी अधिक कठिन हैं। Google क्लाउड बिल्ड का उपयोग क्लाउड फ़ंक्शंस, क्लाउड रन, कुबेरनेट्स, ऐप इंजन आदि में परिनियोजन के लिए किया जा सकता है। यह वह है जो पूर्वावलोकन को थोड़ा जटिल बनाता है, क्योंकि क्लाउड बिल्ड को यह नहीं पता होता है कि आप अपने एप्लिकेशन या सेवा को कहाँ परिनियोजित कर रहे हैं। उनके पास रिपॉजिटरी को जोड़ने और GitHub में बिल्ड स्थिति दिखाने के लिए एक GitHub ऐप है, लेकिन बस इतना ही। हेरोकू, वर्सेल या फ्लाई जैसे उत्पादों से कोई पूर्वावलोकन, टिप्पणी या कोई "सामान्य" सामान नहीं है।


क्लाउड बिल्ड से गिटहब पुल अनुरोध पर एक सरल HTTP अनुरोध के साथ टिप्पणी पोस्ट करने का एक "आसान" तरीका है। लेकिन जब आप GitHub Deployments API का उपयोग कर सकते हैं तो यह कितना आसान है।


इस एपीआई के साथ, आप वातावरण बना सकते हैं, प्रति पर्यावरण अलग-अलग चर रख सकते हैं और पुल अनुरोध पर सीधे निर्माण और परिनियोजन स्थिति दिखा सकते हैं। और एक बार आपके सीडी प्लेटफॉर्म पर परिनियोजन हो जाने के बाद, आप URL को परिनियोजन स्थिति में जोड़ सकते हैं। इस लेख में हम यही करने जा रहे हैं।

स्क्रीनशॉट दिखा रहा है कि जीथब परिनियोजन स्थिति प्रगति पर है

गिटहब परिनियोजन स्थिति

दोबारा, HTTP अनुरोधों के साथ सीधे Deployments API का उपयोग करके ऐसा करने का एक और तरीका है। हालांकि यह कभी-कभी मुश्किल हो सकता है और आपको GitHub के साथ प्रमाणित करने के लिए एक व्यक्तिगत एक्सेस टोकन को परिभाषित करने की आवश्यकता होगी। इसके बजाय, हमने एक छोटी Node.js सेवा को एक साथ रखने का फैसला किया, जो ऐप टोकन बनाने और डिप्लॉयमेंट एपीआई के साथ इंटरैक्ट करने के लिए GitHub ऐप्स का उपयोग करती है। यह परिनियोजन प्रक्रिया पर थोड़ा बेहतर नियंत्रण की अनुमति देता है।

अस्वीकरण

यह आलेख विशेष रूप से Google क्लाउड प्लेटफ़ॉर्म और गिटहब के लिए लिखा गया है। Google क्लाउड प्लेटफ़ॉर्म, Google क्लाउड बिल्ड और IAM अनुमतियों की बुनियादी समझ मान ली गई है।


आपके पास Google क्लाउड प्लेटफ़ॉर्म प्रोजेक्ट स्थापित होना चाहिए।

गिटहब नियोक्ता (नोड.जेएस और डॉकर)

GitHub Deployer एक छोटी Node.js सेवा है जो GitHub ऐप के साथ अधिकृत है और GitHub Deployments API के साथ इंटरैक्ट करती है। आदेश पूर्वनिर्धारित होते हैं और कुछ सूचनाओं को डॉकर छवि में निर्मित करने की आवश्यकता होती है, अन्यथा क्लाउड बिल्ड में रनटाइम कॉन्फ़िगरेशन बहुत जटिल हो जाएगा।

डॉकर छवि तैयार निर्मित नहीं है; आपको इसे स्वयं बनाना होगा और इसे अपनी रजिस्ट्री में धकेलना होगा। सबसे अच्छी जगह Google आर्टिफैक्ट रजिस्ट्री है जहां आपके एप्लिकेशन के लिए छवियों को भी संग्रहीत किया जाता है (कंटेनर रजिस्ट्री को हटा दिया गया है):


  1. यदि पहले से नहीं किया गया है, तो एक आर्टिफैक्ट रजिस्ट्री रिपॉजिटरी बनाएं


  2. एक GitHub ऐप बनाएं और इसे अपने संगठन में इंस्टॉल करें

  3. ऐप आईडी (ऐप सेटिंग स्क्रीन से), और ऐप इंस्टॉलेशन आईडी कॉपी करें ("कॉन्फ़िगर करें" पर क्लिक करने के बाद आपको यूआरएल में इंस्टॉलेशन आईडी मिल जाएगी। पता नहीं और कहां मिल सकती है)


  4. एक निजी कुंजी बनाएं और डाउनलोड करें और इसे बेस 64 में बदलें ( base64 -i your.private-key.pem )

GitHub ऐप को 'कॉन्फ़िगर' बटन के साथ दिखाने वाला स्क्रीनशॉट

डॉकर छवि बनाएँ

स्रोत


क्लाउड बिल्ड amd64 पर चलता है, इसलिए हमें x86 प्लेटफॉर्म के लिए छवि बनाने के लिए buildx आवश्यकता है:

docker buildx build --platform linux/amd64 . -t us-central1-docker.pkg.dev/[PROJECT]/docker/gh-deployer \

--build-arg GH_APP_ID=[GITHUB_APP_ID] \

--build-arg GH_APP_PRIVATE_KEY=[GITHUB_PRIVATE_KEY_BASE_64] \

--build-arg GH_APP_INSTALLATION_ID=[GITHUB_INSTALLATION_ID] \

--build-arg GH_OWNER=[GITHUB_ORG]


छवि को अपनी रजिस्ट्री में पुश करें:

docker push us-central1-docker.pkg.dev/[PROJECT]/docker/gh-deployer

स्थानीय रूप से डॉकर छवि चलाएँ

docker run -it -e REPO_NAME=test -e REF=main -e ENVIRONMENT=test us-central1-docker.pkg.dev/[PROJECT]/docker/gh-deployer:latest create


आवश्यक पर्यावरण चर:

  • REPO_NAME : रिपॉजिटरी का नाम आवश्यक है (उदाहरण के लिए gh-deployer )
  • REF : तैनात करने के लिए शाखा, टैग या SHA की आवश्यकता होती है (उदाहरण के लिए main )
  • ENVIRONMENT : परिनियोजित करने के लिए पर्यावरण की आवश्यकता होती है (उदाहरण preview )
  • TRANSIENT_ENVIRONMENT : वैकल्पिक/झूठा अगर true पर सेट किया जाता है, तो परिनियोजन एक निश्चित समय के बाद हटा दिया जाएगा
  • DESCRIPTION : वैकल्पिक परिनियोजन का विवरण

निम्नलिखित आदेश पहले तर्क के रूप में उपलब्ध हैं:

  • create - एक नया परिनियोजन बनाएँ
  • pending - निर्माण लंबित है
  • in_progress - निर्माण प्रगति पर है
  • queued - निर्माण कतारबद्ध है
  • success - तैनाती सफल रही
  • error - कुछ गलत हो गया
  • failure - परिनियोजन विफल रहा


क्लाउड बिल्ड के साथ विकल्प वर्तमान में थोड़े सीमित हैं। कोई pending स्थिति नहीं है क्योंकि प्रारंभिक परिनियोजन बनाने के लिए क्लाउड बिल्ड को प्रारंभ करने की आवश्यकता है। queued कोई मतलब नहीं है, इसलिए हमारे अपने सेटअप में, हम निम्नलिखित का उपयोग कर रहे हैं:


  1. gh-deployer/create एक कमिट के लिए क्षणिक परिनियोजन बनाने के लिए
  2. pgh-deployer/ending
  3. परिनियोजन के लिए डॉकर छवि बनाने के लिए कनिको बिल्ड चलाएँ
  4. gh-deployer/in_progress निर्माण पूरा होने के बाद और छवि तैनात होने से पहले
  5. छवि तैनात होने के बाद gh-deployer/success


फिर से, क्लाउड बिल्ड के साथ हम नहीं जानते कि परिनियोजन कहाँ होने जा रहा है, इसलिए परिनियोजन URL को success चरण में पास करने के दो तरीके हैं:


  1. निर्माण चरण में, URL को /workspace/deployer_environment_url में लिखें
  2. success के बाद डॉकर छवि के लिए दूसरा तर्क पास करें


हम अपने परिनियोजन के लिए क्लाउड रन का उपयोग करते हैं, इसलिए किसी दिए गए पुल अनुरोध संख्या के लिए परिनियोजन URL को पुनः प्राप्त करने के लिए बिल्ड चरण यहां दिया गया है:


- नाम: gcr.io/google.com/cloudsdktool/cloud-sdk

 env: - PR_NUMBER=$_PR_NUMBER script: >- gcloud run services list --project [project] --filter preview-$PR_NUMBER --format "value(status.address.url)" > /workspace/deployer_environment_url

क्लाउड बिल्ड कॉन्फ़िगरेशन / टेराफॉर्म

cloudbuild.yaml

cloudbuild.yaml

यहाँ cloudbuild.yaml कॉन्फ़िगरेशन फ़ाइल का उपयोग करके एक पूर्ण उदाहरण दिया गया है। हम तैनाती लक्ष्य के रूप में निर्माण और क्लाउड रन के लिए कनिको का उपयोग करते हैं।

यदि आप टेराफॉर्म के साथ काम करते हैं, तो टेराफॉर्म फाइल भी उपलब्ध है: प्रीव्यू.टीएफ


गिटहब क्रियाएँ

परिनियोजन API का उपयोग करके, आप GitHub क्रियाएँ को deployment_status पर ट्रिगर कर सकते हैं। इससे प्रत्येक प्रीव्यू बिल्ड पर गुणवत्ता आश्वासन जांच, एंड-टू-एंड टेस्ट आदि चलाना आसान हो जाता है। यहां प्रत्येक पूर्वावलोकन पर Playwright चलाने के लिए एक उदाहरण दिया गया है, जिसमें environment_url का उपयोग किया गया है जो success स्थिति के लिए पारित किया गया है:


नाटककार-क्यूए:

 if: ${{ github.event.deployment\_status.state == 'success' }} timeout-minutes: 60 runs-on: ubuntu\-latest steps: \- uses: actions/[\[email protected\]](/cdn-cgi/l/email-protection) \- uses: actions/setup\-[\[email protected\]](/cdn-cgi/l/email-protection) with: node-version: 20 cache: 'npm' \- run: npm ci \- name: Install Playwright Browsers run: npm exec playwright install \-\-with\-deps \-y \- name: Run Playwright tests run: pnpm exec playwright test env: BASE\_URL: ${{github.event.deployment\_status.environment\_url}} \- uses: actions/upload\-[\[email protected\]](/cdn-cgi/l/email-protection) if: always() with: name: playwright\-report path: playwright\-report/ retention-days: 30

अनुकूलन

निष्कर्ष

स्क्रीनशॉट दिखा रहा है कि जीथब तैनाती की स्थिति हो गई है

गिटहब परिनियोजन स्थिति हो गई


गिटहब पुल अनुरोधों पर टिप्पणियां पहली बार में आसान होती हैं, लेकिन जब आपके पास प्रति पुल अनुरोध में एकाधिक तैनाती होती है, बिल्ड विफल हो जाती है आदि। वे बहुत अधिक लचीलापन प्रदान नहीं करते हैं और बनाए रखने/अपडेट करने में कठिन होते हैं। GitHub Deployments API किसी भी तृतीय पक्ष CI/CD सिस्टम से परिनियोजन बनाने और प्रबंधित करने का एक शानदार तरीका प्रदान करता है। GitHub Deployer के साथ हमने तैनाती एपीआई के साथ बातचीत को सुव्यवस्थित करने की कोशिश की और कुछ साइड इफेक्ट्स या नुकसान का ख्याल रखा जो कि केवल HTTP एपीआई के साथ हल करना असंभव है।


GitHub डिप्लॉयमेंट API का उपयोग करने का एक अन्य लाभ यह है कि आप GitHub क्रियाओं के लिए deployment_status ट्रिगर का उपयोग कर सकते हैं और सीधे ईवेंट पेलोड के साथ environment_url प्राप्त कर सकते हैं।


आप GitHub रिपॉजिटरी पर थोड़ा और विस्तृत इंस्टालेशन / बिल्ड निर्देश और सभी कोड पा सकते हैं


यदि आपका कोई प्रश्न या टिप्पणी है , तो कृपया ब्लूस्काई/ ट्विटर पर संपर्क करें या गिटहब पर चर्चा में शामिल हों


यहाँ भी प्रकाशित हुआ।