Github Actions में मैन्युअल वर्कफ़्लो ट्रिगर होता है


10

मैं एक परियोजना रिपॉजिटरी के लिए गितुब एक्शन स्थापित कर रहा हूं।

वर्कफ़्लो में निम्न चरण होते हैं:

  • एक डॉकटर छवि का निर्माण
  • एक कंटेनर रजिस्ट्री में छवि को धक्का देना
  • रोलआउट ए कुबेरनेट्स की तैनाती।

हालांकि, मेरे पास दो अलग-अलग कुबेरनेट तैनाती हैं: एक विकास के लिए, और एक उत्पादन के लिए। इसलिए, मेरे पास दो गीथब एक्शन वर्कफ़्लोज़ भी हैं।

विकास के लिए गितुब एक्शन वर्कफ़्लो को हर बार ट्रिगर किया जाता है जो एक प्रतिबद्ध है:

on:
  push:
    branches:
    - master

लेकिन मैं अपने उत्पादन वर्कफ़्लो के लिए ऐसा नहीं चाहता। मुझे मैन्युअल ट्रिगर की आवश्यकता होगी, जैसे सेंड टू प्रोडक्शन बटन। मैंने डॉक्स में उसके करीब कुछ भी नहीं देखा।


Github क्रियाओं में मैन्युअल रूप से वर्कफ़्लो को ट्रिगर करने का एक तरीका है?

मैं अपने विकास और अपने उत्पादन वर्कफ़्लोज़ को विभाजित करने के लिए कैसे प्राप्त कर सकता हूं जो मैं चाहता हूं, या तो जीथब एक्शन, डोकर या कुबेरनेट्स पर?

जवाबों:


9

Github क्रियाओं में मैन्युअल रूप से वर्कफ़्लो को ट्रिगर करने का एक तरीका है?

मुझे ऐसा करने के लिए थोड़ा हैक करना पड़ा है ...

वॉच इवेंट के साथ, आप मैन्युअल रूप से स्टार द्वारा एक एक्शन को ट्रिगर कर सकते हैं या रेपो को अनस्टार कर सकते हैं। आपके वर्कफ़्लो में ईवेंट का कोड है:

on:
  watch
    types: [started]

मुझे पता है कि यह एक अजीब बकवास है लेकिन यह काम करता है! फिर भी, अगर यह संभावित सितारों के साथ सार्वजनिक रेपो है तो यह सबसे अच्छा तरीका नहीं है।


मैं अपने विकास और अपने उत्पादन वर्कफ़्लोज़ को विभाजित करने के लिए कैसे प्राप्त कर सकता हूं जो मैं चाहता हूं, या तो जीथब एक्शन, डोकर या कुबेरनेट्स पर?

गितुब क्रियाओं में मेरा मतलब है, आप लक्षित शाखाओं या घटनाओं द्वारा कई वर्कफ़्लोज़ / जॉब और फ़िल्टर कर सकते हैं। आप कई घटनाओं को जोड़ सकते हैं उदाहरण के लिए पुश के लिए वर्कफ़्लो ट्रिगर करें और आधी रात को क्रोन के साथ


7
>: Haha, यह बहुत अच्छा है repository_dispatchएक गठजोड़ कर सकते हैं एक तरफ, watchसाथ if: github.actor == 'hackerman'बाहर यादृच्छिक अजनबियों फिल्टर करने के लिए। या बेहतर अभी तक - if: github.actor == github.event.repository.owner.loginअतिरिक्त "सुरक्षा" के लिए: डी
समीरा

1
हा हा धन्यवाद! हाँ अच्छा विचार है, मुझे यह कोशिश करनी होगी जब मुझे समय मिले! : डी
सारा एबडेमने 7

1
सही मुझे लगता है कि यह सबसे अच्छा तरीका है जबकि आधिकारिक तौर पर कुछ भी लागू नहीं है।
एंटोनी सी।

6

अद्यतन : एक स्लैश कमांड शैली "चैटऑप्स" समाधान के लिए स्लैश-कमांड-प्रेषण कार्रवाई देखें। यह आपको /deployसमस्या से स्लैश कमांड (जैसे ) के साथ वर्कफ़्लोज़ को ट्रिगर करने और अनुरोध टिप्पणियों को खींचने की अनुमति दे सकता है ।

यहाँ एक deployस्लैश कमांड के लिए एक बुनियादी उदाहरण है । REPO_ACCESS_TOKENएक repoस्कॉप्ड पर्सनल एक्सेस टोकन है

name: Slash Command Dispatch
on:
  issue_comment:
    types: [created]
jobs:
  slashCommandDispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Slash Command Dispatch
        uses: peter-evans/slash-command-dispatch@v1
        with:
          token: ${{ secrets.REPO_ACCESS_TOKEN }}
          commands: deploy

इस वर्कफ़्लो में कमांड को संसाधित किया जा सकता है।

name: Deploy Command
on:
  repository_dispatch:
    types: [deploy-command]

कई और विकल्प और अलग-अलग सेटअप हैं। पूर्ण उपयोग निर्देशों के लिए स्लैश-कमांड-प्रेषण देखें ।

मूल उत्तर : repository_dispatchGitHub एपीआई पर कॉल के रूप में वर्कफ़्लो को मैन्युअल रूप से ट्रिगर किया जा सकता है।

on:
  repository_dispatch:
    types: [production-deploy]
  • [username] एक GitHub उपयोगकर्ता नाम है
  • [token]एक repoस्कॉप्ड पर्सनल एक्सेस टोकन है
  • [repository] रिपॉजिटरी का नाम है जो वर्कफ़्लो में रहता है।
curl -XPOST -u "[username]:[token]" \
  -H "Accept: application/vnd.github.everest-preview+json" \
  -H "Content-Type: application/json" \
  https://api.github.com/repos/[username]/[repository]/dispatches \
  --data '{"event_type": "production-deploy"}'

1
रुचि रखने वाले किसी व्यक्ति के लिए, कई प्रेषणों के लिए एकल वर्कफ़्लो का उपयोग करना संभव है। जैसा event_typeकि वर्कफ़्लो के लिए उपलब्ध है github.event.action, वैसे ही भेजा जाता है , इसलिए ज़रूरत पड़ने पर विशिष्ट नौकरियों / चरणों को सक्षम / अक्षम किया जा सकता है। PS: PAT की वास्तव में जरूरत नहीं है, कर्ल शुरू करना -u "[username]:[password]"या उसके साथ भी -u "[username]"काम करता है (दूसरे मामले में कर्ल पासवर्ड के लिए उपयोगकर्ता को संकेत देता है); कुछ मामलों में उपयोग करना आसान है (उदाहरण के लिए स्क्रिप्ट लिखते समय जो उपयोगकर्ता नाम इनपुट के रूप में लेता है, या स्क्रिप्ट का उपयोग कम तकनीक-प्रेमी उपयोगकर्ताओं द्वारा किया जाता है)।
समीरा

2

हालाँकि सारा का पोस्ट मूल प्रश्न का सबसे करीबी और सरल उत्तर था, यह कुछ हद तक हैक करने वाला है, इसलिए हम अंततः devनिम्नलिखित ट्रिगर्स का उपयोग करने के लिए एक शाखा बनाकर समाप्त हो गए :

  • विकास वर्कफ़्लो: जब devशाखा पर एक धक्का लगाया जाता है तो ट्रिगर हो जाता है :

    on:
      push:
        branches:    
          - dev
    
  • उत्पादन वर्कफ़्लो: ट्रिगर जब एक पुल अनुरोध / मर्ज से किया जाता devहै master:

    on:
      pull_request:
        branches:    
          - master
    

2

वर्तमान गिथब एक्शन की पेशकश के साथ इसे हल करने का एक और तरीका यह है कि productionमास्टर की एक शाखा बनाई जाए, जब एक शाखा की जरूरत हो और productionशाखा पर तैनाती की कार्रवाई को ट्रिगर किया जाए । productionशाखा अनिवार्य रूप का एक आईना है master

on:
  push:
    branches:    
      - master

जब भी गुरु के प्रति कोई प्रतिबद्धता होती है, तो देव निर्माण / धक्का हो सकता है।

on:
  push:
    branches:    
      - production

रिलीज़ शेड्यूल के कुछ बिंदु पर, आप पीआर को productionशाखा में बढ़ा सकते हैं । यह ठेस निर्माण / तैनाती का ध्यान रखेगा।


2

अधिक विवरण / स्पष्टीकरण के लिए संपादित।

एक चीज जो आप कर सकते हैं वह है कॉल repository_dispatch। आप repository_dispatch यहाँ उपयोग करने के लिए GitHub प्रलेखन देख सकते हैं

उदाहरण के लिए, यदि आपके पास एक GitHub क्रियाएँ वर्कफ़्लो है जो इस तरह दिखता है:

on:
  repository_dispatch:
    types: [run_tests]
name: Run tests
jobs:
  test:
    name: Run your tests
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo "I just ran all your tests!"

GitHub v3 API दस्तावेज़ीकरण पर बताए गए चरणों का पालन करके आप एक रिपॉजिटरी प्रेषण घटना बना सकते हैं ।

सबसे पहले, प्रमाणीकरण के लिए GitHub पर एक व्यक्तिगत एक्सेस टोकन (PAT) बनाएं

फिर, आप ऐसा चला सकते हैं curl:

curl \
  -H "Authorization: token $YOUR_PAT" \
  --request POST \
  --data '{"event_type": "run_tests"}' \
  https://api.github.com/repos/$USER/$REPOSITORY/dispatches

उसी समय, मैं एक छोटी सी परियोजना भी साझा करना चाहता था जिसे मैं एक ऐसे दोस्त के साथ काम कर रहा हूं जो इस सटीक समस्या को हल करता है।

https://www.actionspanel.app/

ActionsPanel इसी repository_dispatchAPI का उपयोग करता है लेकिन GitHub App टोकन के साथ ऐसा करता है ताकि आपको अपने PAT को प्रबंधित करने के बारे में चिंता करने की आवश्यकता न हो। इससे कई लोगों के साथ टीमों में अपने कार्यों को ट्रिगर करना बहुत आसान हो जाता है।

उपयोगकर्ता के अनुरोधों और प्रतिक्रिया के आधार पर, हमने यह निर्दिष्ट करने के लिए कि शाखा को भेजने के repository_dispatchलिए सुविधाओं में बनाया है, और जब आप कार्रवाई को निष्पादित करना चाहते हैं तो हम मापदंडों को इंजेक्ट करने के तरीके में भी बनाए गए हैं।

आप अपने बटनों को डिक्लेक्टिव यम फ़ाइल के साथ कॉन्फ़िगर करते हैं, जिसे आप रेपो में छोड़ते हैं, और एक्शनपैननेल उस फ़ाइल को पढ़ेगा और गतिशील रूप से आपके यूआई को आपके कार्यों को ट्रिगर करने के लिए बनाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.