2015-02-13 15 views
14

मेरे पास एक स्प्रिंग बूट एप्लिकेशन है जो एम्बेडेड टॉमकैट सर्वलेट कंटेनर mvn spring-boot:run पर चलता है। और मैं इस परियोजना को स्टैंडअलोन टोमकैट के लिए अलग युद्ध के रूप में तैनात नहीं करना चाहता हूं।जेनकींस के साथ स्प्रिंगबूट मेवेन एप्लिकेशन को कैसे तैनात करें?

जब भी मैं बिटबकेट/गीथब को कोड दबाता हूं, तो एक हुक चलता है और एप्लिकेशन को तैनात करने के लिए जेनकिन्स जॉब (अमेज़ॅन ईसी 2 पर चलता है) ट्रिगर करता है।

जेनकिन्स नौकरी में एक पोस्ट बिल्ड एक्शन है: mvn spring-boot:run, समस्या यह है कि पोस्ट बिल्ड कार्रवाई समाप्त होने पर नौकरी लटकती है।

ऐसा करने का एक और तरीका होना चाहिए। किसी भी सहायता की सराहना की जाएगी।

+0

यदि आप जो कुछ भी चलाते हैं, तो यह लटकने जा रहा है। ऐसा लगता है कि आपको इसे पृष्ठभूमि प्रक्रिया के रूप में चलाने के लिए 'नोहुप' का उपयोग करने की आवश्यकता है। – Steve

+0

पैक किए गए आर्टिफैक्ट के बजाए 'जावा -जर' के बजाए आप मेवेन के माध्यम से स्रोत से अपना आवेदन क्यों चला रहे हैं? – kryger

+0

@ क्रिएगर मैं चल रहे विधि एएसएपी को बदल दूंगा। इस तरह पुरानी प्रक्रिया (एम्बेडेड टोमकैट इंस्टेंस) को नए को तैनात करने के लिए हटा दिया जाना चाहिए। मुझे इसे और अधिक सुरुचिपूर्ण तरीके से करना चाहिए। – azizunsal

उत्तर

17

समस्या यह है कि जेनकींस doesn't handle spawning child process from builds very well। @Steve ने सुझाव दिया workaround टिप्पणी (nohup ing) में मेरे मामले में व्यवहार परिवर्तन नहीं किया है, लेकिन एक सरल समाधान का at यूनिक्स कमांड का उपयोग करके अनुसूची एप्लिकेशन की शुरुआत करने के लिए किया गया था:

> echo "mvn spring-boot:run" | at now + 1 minutes 

इस तरह जेनकींस बिना समय के नौकरी सफलतापूर्वक पूरा करता है।


आप java -jar app.jar के माध्यम से एक .jar फ़ाइल से अपने आवेदन चल रहा है पता है कि Boot breaks if the .jar file is overwritten, आपको यह सुनिश्चित आवेदन विरूपण साक्ष्य को कॉपी पहले बंद कर दिया जाता है बनाने की आवश्यकता होगी हो अंत है। आप ApplicationPidListener उपयोग कर रहे हैं आपको लगता है कि आवेदन चल रहा है सत्यापित कर सकते हैं (और यह रोक अगर यह होता है) इस आदेश के निष्पादन जोड़कर:

> test -f application.pid && xargs kill < application.pid || echo 'App was not running, nothing to stop' 
+2

'echo" mvn spring-boot: run "| अभी पर '(1 मिनट की देरी के बिना) भी मेरे मामले में अच्छी तरह से काम करता है। – Abdull

+0

@Abdull जो शायद यूनिक्स के संस्करण पर निर्भर करता है; उबंटू 'अब' वर्तमान मिनट के 00 सेकंड पर निर्धारित होगा (यानी संभावित रूप से अतीत में भी)। मैंने मैक पर अभी + 1 मिनट की कोशिश की है और यह शिकायत करता है कि "बहुवचन गलत है": - | – kryger

+0

आपको (es। Sudo apt-get इंस्टॉल करें) पर स्थापित करना होगा –

4

मैं पहली बार पर एक निर्धारित क्षेत्र के लिए कलाकृतियों की नकल करने के लिए बहुत उपयोगी पाते हैं सर्वर तैनात कलाकृतियों का ट्रैक रखने के लिए और जेनकींस जॉब फ़ोल्डर से ऐप शुरू नहीं करने के लिए। फिर वहां एक सर्वर लॉग फ़ाइल बनाएं और सर्वर शुरू होने तक जेनकींस विंडो पर इसे सुनना शुरू करें।

कि मैं एक छोटे से खोल स्क्रिप्ट है कि आप here

तुम भी समझा जेनकींस पर परियोजना को कॉन्फ़िगर कैसे एक छोटे से लेख मिलेगा पा सकते हैं विकसित करने के लिए।

अगर आपके लिए काम किया गया तो कृपया मुझे बताएं। Thnaks

2

मुझे लगता है कि आप सर्वर पर एक जेनकींस-उपयोगकर्ता है और इस उपयोगकर्ता जेनकींस-सेवा के मालिक:

रूट के रूप में सर्वर पर में
  1. लॉग। अंत में (जेनकींस = अपने जेनकींस-उपयोगकर्ता) जेनकींस में में
  2. साइन करने और अपने नौकरियों चुनें और कॉन्फ़िगर करने के लिए
  3. चुनें पर क्लिक करें:
  4. रन sudo visudo
  5. ऐड "सभी जेनकींस सभी = (ALL) NOPASSWD" "शैल निष्पादित" "पोस्ट का निर्माण कदम"
  6. कॉपी में और इस पेस्ट:
service=myapp 
    if ps ax | grep -v grep | grep -v $0 | grep $service > /dev/null 
    then 
     sudo service myapp stop 
     sudo unlink /etc/init.d/myapp 
     sudo chmod +x /path/to/your/myapp.jar 
     sudo ln -s /path/to/your/myapp.jar /etc/init.d/myapp 
     sudo service myapp start 
    else 
     sudo chmod +x /path/to/your/myapp.jar 
     sudo ln -s /path/to/your/myapp.jar /etc/init.d/myapp 
     sudo service myapp start 
    fi 

सहेजें और अपने काम चलाने के लिए, सेवा स्वचालित रूप से शुरू कर देना चाहिए।

1

nohup और at now + 1 minutes मेरे लिए काम नहीं किया। चूंकि जेनकिंस पृष्ठभूमि में प्रक्रिया की प्रक्रिया को मार रहा था, इसलिए मैंने उस जेनकींस कार्य में फर्जी BUILD_ID स्थापित करके मारने की प्रक्रिया को सुनिश्चित नहीं किया।

BUILD_ID=do_not_kill_me 
java -jar -Dserver.port=8053 /root/Deployments/my_application.war & 
exit 

जैसा कि बताया जा here: यह क्या जेनकींस निष्पादित खोल कार्य लग रहा है की तरह है।

संबंधित मुद्दे