मैं CI के लिए कार्यप्रवाह बनाने के लिए GitHub क्रियाओं का उपयोग कैसे करूँ?
याद रखें कि आपका लक्ष्य कोड निर्माण और प्रकाशन प्रक्रिया को स्वचालित करना है ताकि हर बार डेवलपर द्वारा कोड बेस में परिवर्तन जोड़ने पर सुविधाओं का अद्यतन किया जा सके.
इस प्रक्रिया को लागू करने के लिए, आप निम्न कार्य करना सीखते हैं:
- टेम्पलेट से वर्कफ़्लो बनाएँ.
- पुन: उपयोग योग्य वर्कफ़्लोज़ का उपयोग करके डुप्लिकेशन से बचें.
- कई लक्ष्यों के खिलाफ परीक्षण।
- अलग-अलग निर्माण और परीक्षण कार्य।
टेम्पलेट से वर्कफ़्लो बनाना
वर्कफ़्लो बनाने के लिए, टेम्पलेट का उपयोग करके प्रारंभ करना सामान्य है. टेम्पलेट में सामान्य कार्य और चरण होते हैं जो आपके द्वारा कार्यान्वित किए जा रहे विशिष्ट प्रकार के स्वचालन के लिए पूर्व-कॉन्फ़िगर किए जाते हैं। यदि आप वर्कफ़्लोज़, नौकरियों और चरणों से परिचित नहीं हैं, तो GitHub क्रियाएँ मॉड्यूल का उपयोग करके स्वचालित विकास कार्यों की जाँच करें।
अपने GitHub रिपॉजिटरी के मुख्य पृष्ठ पर, क्रियाएँ चुनें और फिर नया वर्कफ़्लो चुनें.
कोई वर्कफ़्लो चुनें पृष्ठ पर, आप कई प्रकार के टेम्पलेट्स में से चुन सकते हैं. एक उदाहरण Node.js टेम्पलेट है। Node.js टेम्पलेट Node.js और सभी निर्भरताएँ स्थापित करता है, स्रोत कोड बनाता है, और Node.jsके विभिन्न संस्करणों के लिए परीक्षण चलाता है. एक अन्य उदाहरण पायथन पैकेज टेम्पलेट है, जो पायथन और इसकी निर्भरताओं को स्थापित करता है, और फिर पायथन के कई संस्करणों में लिंट सहित परीक्षण चलाता है।
Node.js वर्कफ़्लो टेम्पलेट के साथ प्रारंभ करने के लिए, खोज बॉक्स में, Node.jsदर्ज करें.
खोज परिणामों में, Node.js फलक में, कॉन्फ़िगर करें का चयन करें.
टेम्पलेट से आपकी परियोजना के लिए एक node.js.yml फ़ाइल बनाई गई है:
name: Node.js CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
जैसा कि विशेषता में देखा गया on है, यह उदाहरण वर्कफ़्लो या तो रिपॉजिटरी को पुश करने के जवाब में चलता है या जब मुख्य शाखा के खिलाफ एक पुल अनुरोध बनाया जाता है।
यह वर्कफ़्लो एक कार्य चलाता है, जो विशेषता द्वारा इंगित किया गया है job ।
runs-on विशेषता निर्दिष्ट करती है कि, ऑपरेटिंग सिस्टम के लिए, वर्कफ़्लो ubuntu-latestपर चलता है.
node-version विशेषता निर्दिष्ट करती है कि तीन बिल्ड हैं, Node.js संस्करण 14.x, 16.x और 18.x के लिए एक-एक। विशेषता को matrix बाद में मॉड्यूल में गहराई से वर्णित किया गया है।
विशेषता में jobs , चरण आपके रिपॉजिटरी से वर्चुअल मशीन (VM) में कोड प्राप्त करने के लिए GitHub Actions actions/checkout@v3 क्रिया का उपयोग करते हैं और Node.jsका सही संस्करण सेट करने के लिए क्रिया/सेटअप-node@v3 का उपयोग करते हैं। आप निर्दिष्ट करते हैं कि आप विशेषता का उपयोग करके Node.js के तीन संस्करणों का परीक्षण करना चाहते हैं ${{ matrix.node-version }} । यह विशेषता उस मैट्रिक्स का संदर्भ देती है जिसे आपने पहले परिभाषित किया था.
cache विशेषता डिफ़ॉल्ट निर्देशिका में कैशिंग के लिए एक पैकेज प्रबंधक निर्दिष्ट करता है।
इस चरण का अंतिम भाग उन आदेशों को निष्पादित करता है जो Node.js प्रोजेक्ट उपयोग करते हैं।
npm ci आदेश फ़ाइल से निर्भरताएँ स्थापित करता हैpackage-lock.json।
npm run build --if-present यदि यह मौजूद है तो एक बिल्ड स्क्रिप्ट चलाता है।
npm test परीक्षण ढांचा चलाता है। इस टेम्पलेट में एक ही कार्य में बिल्ड और परीक्षण चरण दोनों शामिल हैं.
एनपीएम के बारे में अधिक जानने के लिए, एनपीएम दस्तावेज देखें:
डेवलपर्स की एक टीम बार-बार स्वचालन चरणों को कारगर बनाने और मानकीकृत करने के लिए पुन: प्रयोज्य वर्कफ़्लो का उपयोग करने से लाभ उठा सकती है। पुन: प्रयोज्य वर्कफ़्लोज़ का उपयोग करके, आप अतिरेक को कम कर सकते हैं, रखरखाव में सुधार कर सकते हैं, और अपने निरंतर एकीकरण/निरंतर परिनियोजन (CI/CD) पाइपलाइनों में स्थिरता सुनिश्चित कर सकते हैं।
पुनः उपयोग योग्य कार्यप्रवाहों का उपयोग करके डुप्लिकेशन से बचें
जैसे-जैसे टीम स्केल और प्रोजेक्ट बढ़ते हैं, एक ही चरण को एकाधिक वर्कफ़्लो फ़ाइलों में दोहराया जाना आम बात है। इन चरणों में कोड चेकआउट, निर्भरता स्थापना, परीक्षण और परिनियोजन शामिल हो सकते हैं। इस तरह का दोहराव न केवल आपके कोड बेस को अव्यवस्थित करता है बल्कि कोड परिवर्तन की आवश्यकता होने पर रखरखाव का समय भी बढ़ाता है। पुन: प्रयोज्य वर्कफ़्लोज़ आपको स्वचालन तर्क को एक बार परिभाषित करने की अनुमति देकर इस समस्या को हल करते हैं, और फिर अन्य वर्कफ़्लोज़ से तर्क को कॉल करते हैं।
पुन: प्रयोज्य वर्कफ़्लोज़ विशेष GitHub क्रियाएँ वर्कफ़्लो हैं जिन्हें अन्य वर्कफ़्लो प्रोग्रामिंग में फ़ंक्शन के समान कॉल कर सकते हैं। आप उन्हें दोहराए गए तर्क जैसे बिल्ड चरण, परीक्षण प्रक्रियाओं, या परिनियोजन रणनीतियों को साझा करने के लिए बनाते हैं। पुनः उपयोग योग्य वर्कफ़्लो बनाने के बाद, आप इसे किसी अन्य वर्कफ़्लो से समान संग्रह में या भिन्न रिपॉसिटरी में भी संदर्भित कर सकते हैं.
पुनः उपयोग योग्य कार्यप्रवाह का उपयोग क्यों करें?
पुनः उपयोग करने योग्य कार्यप्रवाहों का उपयोग करने के ये लाभ हैं:
- स्थिरता। टीमें सभी परियोजनाओं में समान स्वचालन मानकों का पालन कर सकती हैं।
- दक्षता। चरणों की प्रतिलिपि बनाने और चिपकाने के बजाय, आप केवल पुनः उपयोग योग्य वर्कफ़्लो को इंगित करते हैं.
- आसान अपडेट। जब कोई प्रक्रिया परिवर्तित होती है, जैसे कोई परीक्षण चरण जोड़कर, तो आप उसे एक स्थान पर अद्यतन करते हैं. फिर वर्कफ़्लो का उपयोग करने वाले सभी वर्कफ़्लोज़ स्वचालित रूप से लाभान्वित होते हैं।
- मापनीयता. पुन: प्रयोज्य वर्कफ़्लोज़ प्लेटफ़ॉर्म या DevOps टीमों के लिए आदर्श हैं जो कई सेवाओं का प्रबंधन करती हैं।
इसके बाद, अपनी परियोजनाओं को बेहतर बनाने के लिए पुन: प्रयोज्य वर्कफ़्लो का उपयोग करने का तरीका एक्सप्लोर करें।
पुनः उपयोग योग्य कार्यप्रवाह कार्यान्वित करें
पुनः उपयोग योग्य कार्यप्रवाह का उपयोग करने के लिए:
- अपने रिपॉजिटरी फ़ोल्डर में, पुनः उपयोग योग्य वर्कफ़्लो बनाएँ. फ़ाइल में वे स्वचालन चरण शामिल होते हैं जिन्हें आप साझा करना चाहते हैं, जैसे परीक्षण, निर्माण और परिनियोजन में शामिल सामान्य चरण.
- वर्कफ़्लो को ईवेंट के साथ कॉन्फ़िगर करके पुन: उपयोग योग्य होने के लिए स्पष्ट रूप से सक्षम करें
workflow_call. - अपने मुख्य वर्कफ़्लोज़ (कॉलर वर्कफ़्लोज़) में, इस पुनः उपयोग योग्य फ़ाइल का संदर्भ लें और कोई भी आवश्यक इनपुट या रहस्य प्रदान करें.
पुनः उपयोग योग्य कार्यप्रवाहों के लाभों को समझाने के लिए, निम्न वास्तविक-विश्व परिदृश्य पर विचार करें.
उदाहरण
कल्पना करें कि आपके संगठन में 10 माइक्रोसर्विसेज हैं। सभी 10 माइक्रोसर्विसेज को समान चरणों की आवश्यकता है:
- परीक्षण चलाएं
- लिंट कोड
- एक विशिष्ट वातावरण में परिनियोजित करें
पुन: प्रयोज्य वर्कफ़्लोज़ के बिना, प्रत्येक रिपॉजिटरी कई वर्कफ़्लो फ़ाइलों में एक ही तर्क को डुप्लिकेट करता है, जिससे बार-बार कदम और कठिन रखरखाव होता है।
यदि आप पुनः उपयोग योग्य कार्यप्रवाह का उपयोग करते हैं:
- आप केंद्रीय फ़ाइल में एक बार प्रक्रिया को परिभाषित करते हैं (उदाहरण के लिए, में
ci-standard.yml)। - आप इस फ़ाइल को प्रत्येक माइक्रोसर्विस के स्वयं के वर्कफ़्लो से कॉल करते हैं, पर्यावरण या एप्लिकेशन नाम जैसे चर में गुजरते हैं।
यदि कोई नया सुरक्षा चरण या उपकरण जोड़ा जाता है, जैसे सुरक्षाछिद्र के लिए स्कैन करने के लिए, तो आप इसे पुनः उपयोग योग्य वर्कफ़्लो में केवल एक बार जोड़ते हैं. सभी 10 माइक्रोसर्विसेज तुरंत अद्यतन प्रक्रिया का उपयोग करना शुरू कर देते हैं। आपको 10 माइक्रोसर्विसेज को संशोधित करने की आवश्यकता नहीं है।
पुन: प्रयोज्य कार्यप्रवाह कैसे कार्य करते हैं और उनके लाभों को समझकर, आप उनकी प्रभावशीलता को अधिकतम करने और अपनी CI/CD पाइपलाइनों के साथ सहज एकीकरण सुनिश्चित करने के लिए सर्वोत्तम प्रथाओं को अपना सकते हैं।
सबसे सही तरीके
- अपने पुन: प्रयोज्य वर्कफ़्लोज़ को एक रिपॉजिटरी में केंद्रीकृत करें यदि आप उन्हें टीमों में साझा करने की योजना बना रहे हैं।
- अपने वर्कफ़्लोज़ को संस्करण बनाने के लिए शाखाओं या टैग का उपयोग करें (उदाहरण के लिए, उपयोग
@v1करें), ताकि यदि आवश्यक हो तो आप परिवर्तनों को आसानी से वापस रोल कर सकें। - दस्तावेज़ इनपुट और रहस्य स्पष्ट रूप से। पुन: प्रयोज्य वर्कफ़्लोज़ अक्सर इनपुट और रहस्यों पर निर्भर करते हैं। टीमों को यह जानने की जरूरत है कि किस जानकारी का उपयोग करना है।
- यदि आपको केवल कुछ चरणों का पुनः उपयोग करने की आवश्यकता है, तो पूर्ण वर्कफ़्लो बनाने के बजाय पुनः उपयोग योग्य कार्यप्रवाहों को मिश्रित क्रियाओं के साथ संयोजित करें.
पुन: प्रयोज्य वर्कफ़्लोज़ स्थिरता लागू करने, दोहराव को कम करने और किसी भी इंजीनियरिंग टीम में DevOps प्रथाओं को स्केल करने का एक शक्तिशाली तरीका है। चाहे आप एकल रिपॉजिटरी, माइक्रोसर्विसेज, या ओपन-सोर्स लाइब्रेरी का प्रबंधन कर रहे हों, पुन: प्रयोज्य वर्कफ़्लोज़ स्वचालन को सरल बना सकते हैं, इसलिए आपका CI/CD आपके लिए तेज़, क्लीनर और प्रबंधित करने में आसान है।
वर्कफ़्लो टेम्पलेट्स अनुकूलित करें
इस मॉड्यूल की शुरुआत में, आपने एक परिदृश्य पर विचार किया जिसमें आपको डेवलपर्स की अपनी टीम के लिए सीआई स्थापित करने की आवश्यकता है। Node.js टेम्पलेट एक शानदार शुरुआत है, लेकिन आप इसे अपनी टीम की आवश्यकताओं के अनुरूप बेहतर ढंग से अनुकूलित करना चाहते हैं। आप Node.js के विभिन्न संस्करणों और विभिन्न ऑपरेटिंग सिस्टमों को लक्षित करना चाहते हैं. आप यह भी चाहते हैं कि बिल्ड और टेस्ट चरण अलग-अलग काम हों।
यहाँ अनुकूलित वर्कफ़्लो का एक उदाहरण दिया गया है:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
इस उदाहरण में, आप एक बिल्ड मैट्रिक्स एकाधिक ऑपरेटिंग सिस्टम और भाषा संस्करणों में परीक्षण के लिए कॉन्फ़िगर करें। यह मैट्रिक्स चार बिल्ड का उत्पादन करता है, प्रत्येक ऑपरेटिंग सिस्टम के लिए एक Node.jsके प्रत्येक संस्करण के साथ जोड़ा जाता है।
चार बिल्ड और उनके परीक्षण बड़ी मात्रा में लॉग डेटा का उत्पादन करते हैं। यह सब के माध्यम से हल करना मुश्किल हो सकता है। निम्न नमूने में, आप परीक्षण चरण को एक समर्पित परीक्षण कार्य पर ले जाते हैं। यह नौकरी कई लक्ष्यों के खिलाफ परीक्षण करती है। बिल्ड और परीक्षण चरणों को अलग करना लॉग डेटा के साथ काम करना आसान बनाता है।
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: npm install, and test
run: |
npm install
npm test
env:
CI: true