GitHub क्रियाएँ वर्कफ़्लो कॉन्फ़िगर करें
यहां, आप वर्कफ़्लो फ़ाइल के भीतर कुछ सामान्य कॉन्फ़िगरेशन सीखते हैं। आप ईवेंट प्रकारों की श्रेणियों, कार्यप्रवाहों को अक्षम करने और हटाने और सुरक्षा सर्वोत्तम अभ्यासों के लिए किसी कार्रवाई के विशिष्ट संस्करणों का उपयोग करने का भी अन्वेषण करते हैं.
शेड्यूल किए गए ईवेंट्स चलाने के लिए वर्कफ़्लोज़ कॉन्फ़िगर करना
जैसा कि पहले उल्लेख किया गया है, आप अपने वर्कफ़्लोज़ को चलाने के लिए कॉन्फ़िगर कर सकते हैं जब GitHub पर विशिष्ट गतिविधि होती है, जब GitHub के बाहर कोई ईवेंट होता है, या निर्धारित समय पर।
schedule ईवेंट आपको POSIX क्रोन सिंटैक्स का उपयोग करके विशिष्ट UTC समय पर चलाने के लिए वर्कफ़्लो ट्रिगर करनेअनुमति देता है। इस क्रॉन सिंटैक्स में पांच * फ़ील्ड हैं, और प्रत्येक फ़ील्ड समय की एक इकाई का प्रतिनिधित्व करता है।
उदाहरण के लिए, यदि आप प्रत्येक 15 मिनट में वर्कफ़्लो चलाना चाहते हैं, schedule तो ईवेंट निम्न उदाहरण की तरह दिखाई देगा:
on:
schedule:
- cron: '*/15 * * * *'
और यदि आप प्रत्येक रविवार को सुबह 3:00 बजे वर्कफ़्लो चलाना चाहते हैं, तो schedule ईवेंट इस तरह दिखेगा:
on:
schedule:
- cron: '0 3 * * SUN'
आप ऑपरेटर्स का उपयोग मानों की श्रेणी निर्दिष्ट करने या अपने शेड्यूल किए गए वर्कफ़्लो में डायल करने के लिए भी कर सकते हैं. शेड्यूल किए गए वर्कफ़्लोज़ को आप चला सकते हैं सबसे छोटा अंतराल हर पाँच मिनट में एक बार होता है, और वे डिफ़ॉल्ट या आधार शाखा पर नवीनतम कमिट पर चलते हैं।
मैन्युअल ईवेंट्स चलाने के लिए कार्यप्रवाहों को कॉन्फ़िगर करना
शेड्यूल किए गए ईवेंट्स के अतिरिक्त, आप workflow_dispatch ईवेंट का उपयोग करके वर्कफ़्लो को मैन्युअल रूप से ट्रिगर कर सकते हैं. यह ईवेंट आपको GitHub REST API का उपयोग करके या GitHub पर अपने भंडार के भीतर क्रियाएँ टैब में वर्कफ़्लो चलाएँ बटन का चयन करके वर्कफ़्लो चलाने की अनुमति देता है। का उपयोग करके workflow_dispatch, आप चुन सकते हैं कि आप किस शाखा पर वर्कफ़्लो चलाना चाहते हैं, और वैकल्पिक inputs सेट करें जो GitHub UI में फॉर्म तत्वों के रूप में प्रस्तुत करता है।
on:
workflow_dispatch:
inputs:
logLevel:
description: 'Log level'
required: true
default: 'warning'
tags:
description: 'Test scenario tags'
workflow_dispatchके अलावा, आप repository_dispatchनामक वेबहुक ईवेंट को ट्रिगर करने के लिए GitHub API का उपयोग कर सकते हैं। यह ईवेंट आपको GitHub के बाहर होने वाली गतिविधि के लिए वर्कफ़्लो ट्रिगर करने की अनुमति देता है। यह अनिवार्य रूप से आपके रिपॉजिटरी के लिए एक HTTP अनुरोध के रूप में कार्य करता है जो GitHub को किसी क्रिया या वेबहुक से वर्कफ़्लो ट्रिगर करने के लिए कहता है। इस मैन्युअल ईवेंट का उपयोग करने के लिए आपको दो काम करने होंगे: GitHub एंडपॉइंट POST को अनुरोध बॉडी में वेबहुक ईवेंट नामों के साथ एक /repos/{owner}/{repo}/dispatches अनुरोध भेजें, और repository_dispatch ईवेंट का उपयोग करने के लिए अपने वर्कफ़्लो को कॉन्फ़िगर करें।
curl \
-X POST \
-H "Accept: application/vnd.github.v3+json" \
https://api.github.com/repos/octocat/hello-world/dispatches \
-d '{"event_type":"event_type"}'
on:
repository_dispatch:
types: [opened, deleted]
वेबहुक ईवेंट चलाने के लिए कार्यप्रवाह कॉन्फ़िगर करें
अंत में, आप GitHub पर विशिष्ट वेबहुक ईवेंट होने पर चलने के लिए वर्कफ़्लो कॉन्फ़िगर कर सकते हैं। आप वेबहुक के लिए एक से अधिक गतिविधि से अधिकांश वेबहुक ईवेंट ट्रिगर कर सकते हैं। यदि वेबहुक के लिए एकाधिक गतिविधियाँ मौजूद हैं, तो आप वर्कफ़्लो ट्रिगर करने के लिए कोई गतिविधि प्रकार निर्दिष्ट कर सकते हैं. उदाहरण के लिए, आप ईवेंट के check_run लिए वर्कफ़्लो चला सकते हैं, लेकिन केवल या rerequested गतिविधि प्रकारों के requested_action लिए.
on:
check_run:
types: [rerequested, requested_action]
Repository_dispatch
repository_dispatch GitHub क्रियाओं में एक कस्टम ईवेंट है जो बाहरी सिस्टम (या यहां तक कि अन्य GitHub वर्कफ़्लोज़) को GitHub API को POST अनुरोध भेजकर मैन्युअल रूप से वर्कफ़्लो ट्रिगर करने की अनुमति देता है।
यह लचीले स्वचालन और बाहरी उपकरणों, स्क्रिप्ट, या सिस्टम के साथ एकीकरण को सक्षम बनाता है जिन्हें आपके रेपो में वर्कफ़्लो शुरू करने की आवश्यकता होती है।
बक्सों का इस्तेमाल करें
बाहरी CI/CD टूल से वर्कफ़्लोज़ ट्रिगर करें।
मल्टी-रेपो परिनियोजन का समन्वय करें (उदाहरण के लिए, रेपो ए बिल्ड पूरा करता है → रेपो बी को ट्रिगर करता है)।
बाहरी घटनाओं (वेबहुक, निगरानी अलर्ट, गिटहब के बाहर क्रॉन नौकरियां) के आधार पर स्वचालन शुरू करें।
रिपॉजिटरी के बीच या मोनोरेपो के भीतर चेन वर्कफ़्लो निष्पादन।
उदाहरण वर्कफ़्लो जो repository_dispatch को सुनता है
name: Custom Dispatch Listener
on:
repository_dispatch:
types: [run-tests, deploy-to-prod] # Optional filtering
jobs:
run:
runs-on: ubuntu-latest
steps:
- name: Echo the payload
run: |
echo "Event type: ${{ github.event.action }}"
echo "Payload value: ${{ github.event.client_payload.env }}"
प्रमुख तत्व:
प्रकार: वैकल्पिक। कस्टम ईवेंट प्रकारों को परिभाषित करता है जैसे
run-tests,deploy-to-prod, आदि।github.event.client_payload: प्रेषण घटना में पारित किसी भी अन्य कस्टम डेटा तक पहुंच।
github.event.action: भेजे गए event_type का नाम.
एपीआई के माध्यम से घटना को ट्रिगर करना
आपको GitHub REST API v3 समापन बिंदु पर एक POST अनुरोध भेजना होगा:
POST https://api.github.com/repos/OWNER/REPO/dispatches
प्राधिकरण
- रेपो स्कोप के साथ एक व्यक्तिगत एक्सेस टोकन (पीएटी) की आवश्यकता होती है।
- संगठनों के लिए, अपने टोकन के लिए उचित पहुंच सेटिंग्स सुनिश्चित करें।
नमूना आदेश संरचना
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token YOUR_GITHUB_TOKEN" \
https://api.github.com/repos/OWNER/REPO/dispatches \
-d '{"event_type":"run-tests","client_payload":{"env":"staging"}}'
पेलोड संरचना
{
"event_type": "run-tests",
"client_payload": {
"env": "staging"
}
}
पैरामीटर्स
| क्षेत्र | प्रकार | विवरण | आवश्य |
|---|---|---|---|
event_type |
स्ट्रिंग | ईवेंट के लिए एक कस्टम नाम. यह नाम आपके वर्कफ़्लो ट्रिगर में प्रकार मान को मैप करता है | हां |
client_payload |
वस्तु | कार्यप्रवाह में कस्टम डेटा भेजने के लिए मनमाना JSON पेलोड (github.event.client_payload) | नहीं |
Repository_dispatch पैरामीटर ब्रेकडाउन
GitHub API एंडपॉइंट पर POST अनुरोध करते समय, आपको दो मुख्य पैरामीटर के साथ JSON बॉडी पास करनी होगी:
- event_type
- client_payload
event_type
एक आवश्यक कस्टम स्ट्रिंग जिसे आप परिभाषित करते हैं. GitHub इस मान को प्रेषण के "क्रिया" या "प्रकार" के रूप में मानता है। इसका उपयोग यह पहचानने के लिए किया जाता है कि वर्कफ़्लो को किसने ट्रिगर किया और विशिष्ट प्रकारों के लिए सुनने वाले वर्कफ़्लोज़ को फ़िल्टर करें।
प्रारूप:
- प्रकार: स्ट्रिंग
- उदाहरण: "परिनियोजन", "रन-परीक्षण", "सिंक-डीबी", "बिल्ड-डॉकर"
वर्कफ़्लो में उपयोग करें: विशिष्ट ईवेंट प्रकारों को सुनने और वर्कफ़्लो के अंदर मान तक पहुँचने में उपयोग किया जाता है। यह कई उद्देश्यों के लिए एकल वर्कफ़्लो के पुन: उपयोग में मदद करता है और स्वचालन को अधिक व्यवस्थित और घटना-संचालित बनाता है।
उदाहरण:
- name: Print event type
run: echo "Event type: ${{ github.event.action }}"
client_payload
एक फ्री-फॉर्म JSON ऑब्जेक्ट जो आपको प्रेषण के साथ कस्टम डेटा भेजने देता है। आप संरचना को परिभाषित करते हैं, और यह वर्कफ़्लो के अंदर पहुंच योग्य है।
प्रारूप:
- प्रकार: वस्तु
- कस्टम कुंजियाँ और मान
वर्कफ़्लो में उपयोग करें: इस ऑब्जेक्ट का उपयोग बहु-परिवेश परिनियोजन, संस्करण रिलीज़, या किसी अन्य सिस्टम या पाइपलाइन से संदर्भ पास करने के लिए किया जाता है और इनपुट तर्कों के समान पैरामीटर किए गए वर्कफ़्लोज़ सक्षम करता है.
उदाहरण:
- name: Show payload values
run: |
echo "Environment: ${{ github.event.client_payload.env }}"
echo "Version: ${{ github.event.client_payload.version }}"
उदाहरण पेलोड विश्लेषण
{
"event_type": "deploy-to-prod",
"client_payload": {
"env": "production",
"build_id": "build-456",
"initiator": "admin_user",
"services": ["web", "api", "worker"]
}
}
सशर्त कीवर्ड का उपयोग करें
अपनी वर्कफ़्लो फ़ाइल में, आप संदर्भ जानकारी तक पहुँच सकते हैं और अभिव्यक्तियों का मूल्यांकन कर सकते हैं. यद्यपि किसी चरण को चलना चाहिए या नहीं, यह निर्धारित करने के लिए वर्कफ़्लो फ़ाइल में सशर्त if कीवर्ड के साथ आमतौर पर व्यंजकों का उपयोग किया जाता है, आप सशर्त बनाने के लिए किसी भी समर्थित संदर्भ और अभिव्यक्ति का उपयोग कर सकते हैं. यह जानना महत्वपूर्ण है कि अपने वर्कफ़्लो में सशर्त का उपयोग करते समय, आपको विशिष्ट सिंटैक्स का उपयोग करने की आवश्यकता होती है ${{ <expression> }}। यह वाक्यविन्यास GitHub को एक स्ट्रिंग के रूप में व्यवहार करने के बजाय एक अभिव्यक्ति का मूल्यांकन करने के लिए कहता है।
उदाहरण के लिए, एक वर्कफ़्लो जो यह जांचने के if लिए सशर्त का उपयोग करता है कि क्या github.ref (शाखा या टैग रेफरी जिसने वर्कफ़्लो रन को ट्रिगर किया) मेल खाता है refs/heads/main। आगे बढ़ने के लिए, वर्कफ़्लो कुछ इस तरह दिखाई देगा:
name: CI
on: push
jobs:
prod-check:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
...
ध्यान दें कि इस उदाहरण में, ${{ }} सिंटैक्स से गायब हैं। कुछ व्यंजकों के if साथ, जैसे सशर्त, आप व्यंजक सिंटैक्स को छोड़ सकते हैं. GitHub स्वचालित रूप से इनमें से कुछ सामान्य अभिव्यक्तियों का मूल्यांकन करता है, लेकिन आप उन्हें हमेशा शामिल कर सकते हैं यदि आप भूल जाते हैं कि GitHub स्वचालित रूप से किन अभिव्यक्तियों का मूल्यांकन करता है।
वर्कफ़्लो सिंटैक्स और व्यंजकों के बारे में अधिक जानकारी के लिए, GitHub क्रियाएँ के लिए वर्कफ़्लो सिंटैक्सदेखें.
वर्कफ़्लोज़ अक्षम करें और हटाएँ
अपने रिपॉजिटरी में वर्कफ़्लो जोड़ने के बाद, आपको ऐसी स्थिति मिल सकती है जहाँ आप वर्कफ़्लो को अस्थायी रूप से अक्षम करना चाहते हैं। आप रेपो से फ़ाइल को हटाए बिना, या तो GitHub पर या GitHub REST API के माध्यम से वर्कफ़्लो को ट्रिगर होने से रोक सकते हैं। जब आप वर्कफ़्लो को फिर से सक्षम करना चाहते हैं, तो आप इसे उन्हीं विधियों का उपयोग करके आसानी से कर सकते हैं।
वर्कफ़्लो अक्षम करना निम्न में से कुछ स्थितियों में उपयोगी हो सकता है:
- वर्कफ़्लो पर कोई त्रुटि बाह्य सेवाओं को नकारात्मक रूप से प्रभावित करने वाले बहुत अधिक या गलत अनुरोध उत्पन्न कर रही है.
- आप किसी ऐसे कार्यप्रवाह को अस्थायी रूप से रोकना चाहते हैं, जो महत्वपूर्ण नहीं है और जिसमें आपके खाते में बहुत अधिक मिनट लग रहे हैं.
- आप किसी ऐसे वर्कफ़्लो को रोकना चाहते हैं जो किसी ऐसी सेवा को अनुरोध भेज रहा है जो बंद है.
- आप एक फोर्क पर काम कर रहे हैं, और आपको इसमें शामिल कुछ वर्कफ़्लोज़ की सभी कार्यक्षमता की आवश्यकता नहीं है (जैसे शेड्यूल किए गए वर्कफ़्लोज़)।
आप क्रियाएँ टैब से या GitHub API समापन बिंदु DELETE /repos/{owner}/{repo}/actions/runs/{run_id}का उपयोग करके GitHub UI UI में चल रहे वर्कफ़्लो रन को रद्द भी कर सकते हैं. ध्यान रखें कि जब आप वर्कफ़्लो रन रद्द करते हैं, तो GitHub उस रन के भीतर अपनी सभी नौकरियों और चरणों को रद्द कर देता है।
किसी संगठन के टेम्पलेटेड वर्कफ़्लो का उपयोग करना
यदि आपके पास ऐसा वर्कफ़्लो है जिसका उपयोग संगठन में एकाधिक टीमें करती हैं, तो आपको प्रत्येक रिपॉसिटरी के लिए समान वर्कफ़्लो पुनः बनाने की आवश्यकता नहीं है. इसके बजाय, आप संगठन .github के संग्रह में परिभाषित वर्कफ़्लो टेम्पलेट का उपयोग करके अपने संगठन में संगतता को बढ़ावा दे सकते हैं. संगठन का कोई भी सदस्य संगठन टेम्पलेट वर्कफ़्लो का उपयोग कर सकता है, और उस संगठन के भीतर किसी भी रिपॉसिटरी को उन टेम्पलेट वर्कफ़्लोज़ तक पहुँच प्राप्त होती है.
आप संगठन के भीतर किसी रिपॉसिटरी के क्रियाएँ टैब पर नेविगेट करके, नया वर्कफ़्लोका चयन करके और फिर "संगठन नाम द्वारा बनाए गए वर्कफ़्लोज़" शीर्षक वाले संगठन के वर्कफ़्लो टेम्पलेट अनुभाग को ढूँढकर इन कार्यप्रवाहों को ढूँढ सकते हैं. उदाहरण के लिए, मोना नामक संगठन में एक टेम्पलेट वर्कफ़्लो है जैसा कि यहां दिखाया गया है।
किसी क्रिया के विशिष्ट संस्करणों का उपयोग करें
अपने वर्कफ़्लो में क्रियाओं का संदर्भ देते समय, हम अनुशंसा करते हैं कि आप केवल क्रिया के बजाय उस क्रिया के किसी विशिष्ट संस्करण का संदर्भ लें. किसी विशिष्ट संस्करण को संदर्भित करके, आप उस कार्रवाई में धकेले गए अप्रत्याशित परिवर्तनों से सुरक्षा प्रदान कर रहे हैं जो संभावित रूप से आपके वर्कफ़्लो को भंग कर सकते हैं. यहाँ कई तरीके दिए गए हैं, जिनसे आप किसी कार्रवाई के किसी विशिष्ट संस्करण का संदर्भ ले सकते हैं:
steps:
# Reference a specific commit
- uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
# Reference the major version of a release
- uses: actions/setup-node@v1
# Reference a minor version of a release
- uses: actions/setup-node@v1.2
# Reference a branch
- uses: actions/setup-node@main
कुछ संदर्भ दूसरों की तुलना में सुरक्षित हैं। उदाहरण के लिए, किसी विशिष्ट शाखा को संदर्भित करना उस शाखा से नवीनतम परिवर्तनों से उस क्रिया को चलाता है, जो आप चाहते हैं या नहीं भी कर सकते हैं। किसी विशिष्ट संस्करण संख्या या प्रतिबद्ध SHA हैश को संदर्भित करके, आप अपने द्वारा चलाई जा रही कार्रवाई के संस्करण के बारे में अधिक विशिष्ट हो रहे हैं। अधिक स्थिरता और सुरक्षा के लिए, हम अनुशंसा करते हैं कि आप अपने वर्कफ़्लोज़ में रिलीज़ की गई कार्रवाई के प्रतिबद्ध SHA का उपयोग करें.