मैं एक git पुश (GitHub और node.js) के बाद अपने ऐप को कैसे स्वचालित रूप से तैनात कर सकता हूं?


92

मेरे पास एक वीपीएस (लिनक्स) पर तैनात मेरा आवेदन (नोड.जेएस) है। मैं एक हब के रूप में गिट हब का उपयोग कर रहा हूं। मैं git पुश पर एप्लिकेशन को स्वचालित रूप से कैसे लागू कर सकता हूं?


4
क्या आपने git Hooks progit.org/book/ch7-3.html की जाँच की है , और github help.github.com/test-webhooks
Pawel Dubiel

1
उपरोक्त लिंक के लिए अपडेट करें: git-scm.com/book/en/Customizing-Git-Git-Hooks
कोड

Git 2.10 में एक दिलचस्प फीचर जोड़ा जाएगा: पुश ऑप्शन stackoverflow.com/a/38770670/6309
VonC

जवाबों:


63

PHP में उदाहरण:

अपने github भंडार में github पर नेविगेट करें "एडमिन" पर क्लिक करें

टैब पर क्लिक करें 'सेवा हुक' => 'वेबहूक यूआरएल'

और जोड़

http://your-domain-name/git_test.php

फिर git_test.php बनाएं

<?php 
try
{
  $payload = json_decode($_REQUEST['payload']);
}
catch(Exception $e)
{
  exit(0);
}

//log the request
file_put_contents('logs/github.txt', print_r($payload, TRUE), FILE_APPEND);


if ($payload->ref === 'refs/heads/master')
{
  // path to your site deployment script
  exec('./build.sh');
}

Build.sh में आपको अपनी साइट को github से पुनर्प्राप्त करने के लिए सामान्य कमांड डालने की आवश्यकता होगी


6
हाय, बहुत-बहुत धन्यवाद। क्या बॉब मेरी तैनाती स्क्रिप्ट को निष्पादित करने से रोकता है?
उन्नत

16
@ उन्नत 1 स्क्रिप्ट स्क्रिप्ट अनुमति, निष्पादन ध्वज ... 2 PHP में समापन टैग जोड़ना एक बुरा अभ्यास है।
पावेल डबियल

3
@ उन्नत तकनीक यह सुनिश्चित करने के लिए कि बॉब आपकी स्क्रिप्ट को निष्पादित नहीं करता है, यह सुनिश्चित करने के लिए कि POST अनुरोध Github के सर्वर से आता है। HTTP हेडर देखें जो अनुरोध करते समय वे भेजते हैं। इसके अलावा आप एक 'गुप्त' URL बना सकते हैं जो अनुमान लगाने योग्य नहीं है।
ज्योप

5
@Purefan नहीं एक मजाक :) stackoverflow.com/questions/3219383/…
पावेल डबियल

1
@ एरियस 2038 एवर ने "आप हर दिन कुछ नया सीखते हैं" के बारे में सुना है? आज यह मेरी "कुछ नया" है। साझा करने के लिए धन्यवाद!
प्योरफैन

23

उत्तर / टिप्पणियों के रूप में गिट हुक के कुछ उल्लेख थे, जो मेरे लिए अतीत में काम कर चुके हैं .. इसलिए यहां मेरी नुस्खा किसी और को अधिक विशिष्टताओं की आवश्यकता होनी चाहिए।

मैं सरल ऑटो परिनियोजन को पूरा करने के लिए git के बाद प्राप्त हुक और नोड-पर्यवेक्षक के संयोजन का उपयोग करता हूं (यह मानकर कि आप उस मशीन पर git रिमोट रिपॉजिटरी का उपयोग कर रहे हैं)।


अपना पोस्ट-प्राप्त हुक सेट करें

आपके भंडार में: sudo vi hooks/post-receive

और यह कुछ इस तरह दिखना चाहिए:

#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f

फ़ाइल अनुमतियां सेट करें: chmod +x hooks/post-receive

रेपो के लिए एक पुश के बाद Git आपकी ऐप डायरेक्टरी में फाइलों को रिफ्रेश करेगा।


नोड-पर्यवेक्षक के साथ नोड चलाएं

आपको वैश्विक नोड मॉड्यूल के रूप में अपनी मशीन पर नोड-पर्यवेक्षक स्थापित करने की आवश्यकता होगी: sudo npm install supervisor -g

अब केवल नोड-सुपरवाइज़र के साथ अपना नोड ऐप चलाएं और यह आपकी कार्यशील निर्देशिका में फ़ाइलों में परिवर्तन के लिए देखेगा:

supervisor /home/path/to/your/www/server.js(नोट के supervisorबदले node)


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

2
नहींं .. कोई भी नोड मॉड्यूल मेरा स्थानीय ऐप निर्भर करता है जो मेरी परियोजना के नोड_मॉड्यूल्स सब डायरेक्टरी में स्थापित हैं, जो कि मेरा स्थानीय जीआईटी रेपो है, इसलिए जब मैं जोड़ता हूं, प्रतिबद्ध करता हूं, तो दूरस्थ सर्वर पर उन्हें कॉपी करने के लिए पुश करें।
वेस जॉनसन

8
ठीक है, लेकिन इसका क्या मतलब है कि यदि उन मॉड्यूलों में से कोई भी कोड था जो संकलित किया गया था (उदाहरण के लिए mhash), तो यह किसी अन्य सर्वर पर नहीं चल सकता है जो एक अलग ओएस और / या वास्तुकला है। अपने आश्रितों पर नज़र रखने के लिए package.json का उपयोग करना और फिर npm install -lदूरस्थ सर्वर पर कार्य करने वाली एक कार्यनीति स्मार्ट है। यह निश्चित रूप से पोस्ट-प्राप्त हुक का उपयोग करके आपकी विधि के साथ जोड़ा जा सकता है।
k00k

1
और आप सीधे git चेकआउट कमांड में Git वर्क ट्री को जोड़ सकते हैं: git --work-tree = / var / www / tree --git-dir = / var / repo / तैनात.it चेकआउट -f (बनाने के बजाय चर और इसे अपनी स्क्रिप्ट में निर्यात करना।
जेसन

सवाल गितुब के बारे में है, हालांकि।
नूह

18

शायद यहाँ रेप करने में बहुत देर हो गई। लेकिन मुझे यह प्रोजेक्ट जीथब पर मिला और ऐसा लगता है कि आप जो करना चाहते हैं लेकिन बहुत साफ-सुथरे तरीके से करना चाहते हैं।

https://github.com/logsol/Github-Auto-Deploy

इसकी जांच - पड़ताल करें। यह जानने के लिए भी इच्छुक होंगे कि अन्य लोग टिप्पणियों और उत्थान के संदर्भ में इसके बारे में क्या सोचते हैं।

चीयर्स,
एस


15
"शायद यहाँ रेप करने में बहुत देर हो गई।" कभी भी देर से नहीं। :) आप वास्तव में पूरे समुदाय में योगदान दे रहे हैं (हम में से अधिकांश googler; वाह, बस उन 20k विचारों को देख रहे हैं!), एक आदमी ने सवाल नहीं पूछा "कुछ समय पहले"। समय, अपने आप में अप्रासंगिक है: जब तक प्रश्न में प्रौद्योगिकी प्रासंगिक है, तब तक आपका उत्तर भी होगा। (टिप के लिए धन्यवाद, BTW, इसे बाहर की जाँच ...)
एसजेड।

1
आपके हेडअप के लिए धन्यवाद! ;) यह मेरे लिए उस समय बहुत काम आया। अब मैं स्वचालित तैनाती के लिए ट्रैविस (travis-ci.org), ( जहां भी मैं कर सकता हूं ) का उपयोग करना पसंद करता हूं । @lunakid
सौरभ कुमार

8

एक परियोजना में मैं वर्तमान में विकसित कर रहा हूं मैं Jez Humble की शानदार पुस्तक "कंटीन्यूअस डिलिवरी" (अच्छी तरह से पढ़ने लायक) में शामिल दिशानिर्देशों का पालन करता हूं।

इसका मतलब है कि निरंतर एकीकरण सर्वर (मैं गो के थॉटवर्क्स मुक्त समुदाय संस्करण का उपयोग करता हूं) के कुछ प्रकार का उपयोग करके एक तैनाती पाइपलाइन बनाना , जो कि गुणवत्ता, जटिलता और चल रहे यूनिट परीक्षणों के लिए पहले आपके कोड की जांच करने के लिए जिम्मेदार है। यह तब एक परिनियोजन पाइपलाइन का अनुसरण कर सकता है जिसके परिणामस्वरूप आपके उत्पादन सर्वर को धक्का लग सकता है।

यह बहुत जटिल लगता है, लेकिन होना नहीं है, और कोड लिखने की पूरी प्रक्रिया करता है और यह इसे उत्पादन में सुरक्षित और चिंता मुक्त (कोई डरावना रिलीज दिन नहीं!) बना रहा है।

मैं लाइव सिस्टम के लिए पूर्ण परिनियोजन पाइपलाइन का उपयोग करता हूं, और npm मॉड्यूल के लिए एक कट डाउन संस्करण जो मैं लिखता हूं, और दोनों एक ही 1-परिनियोजन तकनीक साझा करते हैं।


और पुस्तक सिफारिश के लिए एक और +1! मुझे पता है कि सीआई को लापरवाही से संपर्क नहीं करना है।
मर्किक

ठीक है, लोग एक सरल प्रश्न पूछते हैं, आप एक पूर्ण समाधान देते हैं :)। मेरा कहना है कि यह एक ओवरकिल है। लेकिन अगर आप पहले से ही निरंतर डिलीवरी का उपयोग कर रहे हैं, तो शायद यह जाने का मार्ग है।
हवामहलौ

8

मैंने सिर्फ आपकी समस्या के लिए नोड-आधारित समाधान प्रकाशित किया है: नोड-सीडी

यह आपके VPS पर चलने वाले एक सरल नोड ऐप में शामिल है जो Github को प्राप्त करने के बाद हुक प्राप्त करेगा और आपके द्वारा पसंद की गई स्क्रिप्ट को निष्पादित करेगा (उदाहरण के लिए एक शेल स्क्रिप्ट जो आपके ऐप को मार देगा, git पुल, और इसे पुनः आरंभ करेगा)।


+1 क्योंकि यह शुद्ध नोड है। जेएस, इसलिए पोस्टर को अपने स्टैक में कुछ भी जोड़ने की ज़रूरत नहीं है, या ऐसी भाषा का उपयोग करें जिसके साथ वे सहज नहीं हैं। इसके अलावा, वास्तव में अच्छी तरह से बाहर रखा कोड
code_monk

3

यहां एक और सरल नोडजेएस कार्यान्वयन है।

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

https://github.com/shyam-habarakada/rscds

मेरे मंचन सर्वर में पहले से ही नोड स्थापित और चल रहा था, इसलिए इसे लिखना त्वरित और आसान था।


" yourdomain.com:8088/… " - सच में ?! URL में स्पष्ट "गुप्त" कुंजी पारित !!!! किसी को भी इसका इस्तेमाल नहीं करना चाहिए।
जूलियन नाइट

1
एक एस्पिरिन लें और जूलियन को बसाएं। Https का उपयोग करते समय मापदंडों को एन्क्रिप्ट किया जाता है।
गैविन

3

मैंने पाया कि आसान तैनाती के लिए परियोजना गिट का उपयोग करती है।

Git खेलने

मुझे लगता है कि यह आपके लिए उचित तरीका है।

इसकी जांच - पड़ताल करें।


2

यदि आप एक अजगर / बवंडर आधारित समाधान चाहते हैं, तो मैंने गितुब की वेबहुक सर्विसेज से POST अनुरोधों को संभालने के लिए एक स्क्रिप्ट लिखी । आप इसे https://github.com/Akobi/ops/tree/master/autodeploy पर पा सकते हैं

यह मूल रूप से एक JSON कॉन्फिग फाइल का उपयोग करता है जो यह बताता है कि आप किस पुश की अपेक्षा करते हैं, जो आप कमांड पर चलाना चाहते हैं, और कमांड को किस डाइरेक्टरी में चलना चाहिए। आपको बस इतना करना होगा कि आप अपनी पसंद और रन के लिए कॉन्फिगर फाइल को संशोधित करें। लिपी!

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

खुश धक्का!


1

मेरे विचार में PHP का उत्तर पूरी तरह से वैध है, लेकिन अगर आप रूबी को पसंद करते हैं, तो मैंने एक समाधान ब्लॉग किया। यह PHP उत्तर के समान ही है, बस एक अलग भाषा में। आप वेब हुक का उपयोग करते हैं और आपके पास प्रासंगिक HTTP अनुरोधों के लिए एक सरल स्क्रिप्ट है।

http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html


1

मैंने अपना स्वयं का अल्पविकसित परिनियोजन उपकरण बनाया है, जो स्वचालित रूप से रेपो से नए अपडेट को खींच लेगा - https://github.com/jesalg/SlimJim - मूल रूप से यह गिटबब पोस्ट-प्राप्त-हुक को सुनता है और एक ट्रिगर को चलाने के लिए प्रॉक्सी का उपयोग करता है अद्यतन स्क्रिप्ट।


1

मैं https://commando.io का संस्थापक हूं और हाल ही में हमने एक सेवा के माध्यम से GitHub के साथ एकीकरण की घोषणा की। जब आप GitHub रेपो में धकेलते हैं तो एकीकरण आपको सर्वर पर निष्पादन चलाने की अनुमति देता है। जब आप कोड को पुश करते हैं, तो परिनियोजन स्क्रिप्ट को स्वचालित रूप से चलाने के लिए यह एक सही अवसर है।

एक निष्पादन एक स्क्रिप्ट है जिसे आप Commando.io के अंदर लिखते हैं जिसे बैश, पर्ल, पाइथन, रूबी, गो, या नोड में लिखा जा सकता है। अधिक पढ़ने के लिए, और चलने की एक उदाहरण निष्पादन स्क्रिप्ट git pullदेखें, हमारे ब्लॉग पोस्ट की घोषणा देखें: http://blog.commando.io/run-executions-via-github-push/


1

Deepl.io इस स्पेस में नए और होनहार दावेदार लग रहे हैं।

सुविधाएँ (इसकी वेबसाइट से ली गई):

  • GitLab और GitHub से webhooks को पकड़ें
  • कई रिपॉजिटरी कॉन्फ़िगर करें
  • प्रति शाखा कई शाखाओं को कॉन्फ़िगर करें
  • अपनी स्वयं की परिनियोजित स्क्रिप्ट का उपयोग करें, या तो PHP, शेल या दोनों
  • पुष्टिकरण ईमेल भेजता है

1

यह भी ध्यान दें कि REPOMAN.IO जैसी निशुल्क / सस्ती सेवाएं हैं जो आपके लिए लगभग सभी को स्वचालित करती हैं।

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