2009-11-27 13 views
16

मैं अपने मौजूदा बिल्डबॉट सेटअप को प्रतिस्थापित करने के लिए हडसन को आजमा रहा हूं। मैंने गिट प्लगइन स्थापित किया।हडसन का उपयोग करना और एकाधिक गिट भंडारों के साथ चरणों का निर्माण

ssh://server:/repo/test_framework.git 
ssh://server:/repo/project_a.git 

अब, project_a निर्माण करने के लिए मैं (लोगों ऊपर) कई Git संग्रह के साथ एक नया काम कहा: हमारी मौजूदा सेटअप की तरह है। मैं चाहता था कि हडसन $WORKSPACE के तहत विभिन्न निर्देशिकाओं में रिपॉजिटरीज को क्लोन करना चाहें, क्योंकि test_framework को पदानुक्रम की आवश्यकता है। लेकिन हडसन इसके बजाय सब कुछ $WORKSPACE में विलय करना प्रतीत होता है। कंसोल लॉग से:

warning: no common commits 
... 
[workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 96d2b3c27595de243702414c4358366923696d78 
[workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 5bb011b3fa288afd5e4392640b32b8bcc982103e 
[workspace] $ git merge-base ce14a4579e87971659e5e0469136713847055a29 aa6ade81669883909ba5f5459a205df1bd0df3c0 

क्या मैं इसे हमारे प्रोजेक्ट सेटअप में बेहतर फिट करने के लिए हडसन में कॉन्फ़िगर कर सकता हूं? क्या मुझे प्रत्येक प्रोजेक्ट के साथ गिट सबोडोड्यूल या कुछ के रूप में स्थानीय डमी गिट रिपोजिटरी बनाने की ज़रूरत है?

उत्तर

6

हडसन के भीतर आप कई नौकरियों को एक साथ जोड़ सकते हैं। आप test_framework के लिए अलग-अलग हडसन नौकरियां बनाने और प्रोजेक्ट_ए के लिए एक और बनाने का प्रयास कर सकते हैं। हडसन प्रत्येक नौकरी के लिए $ WORKSPACE में एक अलग निर्देशिका बनाता है, इसलिए अब आपके पास $ WORKSPACE के तहत दो अलग-अलग निर्देशिकाएं होनी चाहिए।


सेटअप श्रृंखलन

project_a पुस्तक का काम विन्यास में कार्रवाई के बाद का निर्माण और अन्य परियोजनाओं के निर्माण की जांच ... परियोजना का निर्माण करने के रूप में test_framework में दर्ज करने के लिए नीचे।

test_framework का काम विन्यास में यह सुनिश्चित करें कि पोल एससीएम अनियंत्रित है और वह अन्य परियोजनाओं project_a को सेट होने के बाद बनाएँ।


यह कैसे काम करता

क्या आप अब कॉन्फ़िगर किया है project_a एससीएम परिवर्तन की तलाश में मतदान होगा, जब बदलाव पाए जाते हैं यह Git से उन्हें खींच लेंगे। रन बिल्ड (यदि कोई हो) चलाएं और पूरा होने पर गिट (यदि कोई हो) से परिवर्तन खींचने के लिए test_framework जॉब को ट्रिगर करें और इसके निर्माण चरणों को चलाएं।

+1

1) क्यों हम साथ साथ 'पोल एससीएम' का उपयोग नहीं कर सकते हैं के साथ 'के बाद का निर्माण ..'? 2) इस अप/डाउनस्ट्रीम सेटअप के साथ क्या लगता है, गिट रेपो भाई निर्देशिका में नहीं होंगे। हम उपरोक्त उदाहरण में HUDSON_HOME/jobs/project_a/workspace और HUDSON_HOME/jobs/test_framework/workspace में प्राप्त होते हैं .. क्या उन्हें एक ही स्तर पर लाया जा सकता है? – inger

6

"अन्य परियोजनाओं का निर्माण" समाधान के साथ समस्या यह है कि इसे बनाने की project_a ट्रिगर नहीं करेगा अगर वहाँ test_framework में परिवर्तन हो रहा है। इसके बजाय, मैं Git प्लगइन को छोड़ने की सलाह देते हैं और निम्नलिखित के साथ एक "खोल निष्पादित" का निर्माण कदम की स्थापना:

rm -rf ${WORKSPACE}/* 

git clone ssh://server:/repo/test_framework.git ${WORKSPACE}/test_framework 
cd ${WORKSPACE}/test_framework 
git fetch -t ssh://[email protected]:/repo/test_framework.git +refs/heads/*:refs/remotes/origin/* 
git ls-tree HEAD 

git clone ssh://server:/repo/project_a.git ${WORKSPACE}/project_a 
cd ${WORKSPACE}/project_a 
git fetch -t ssh://[email protected]:/repo/project_a.git +refs/heads/*:refs/remotes/origin/* 
git ls-tree HEAD 

इसके बाद, हुक फ़ाइलों को बनाने के "सर्वर: /repo/test_framework.git/hooks/post-receive" और "सर्वर: /repo/project_a.git/hooks/post-receive" निम्नलिखित सामग्री के साथ:

#!/bin/sh 
curl http://hudson/job/job_name/build 

अब, जब भी परिवर्तन के भंडार के लिए धकेल दिया जाता है, हुक हडसन की एपीआई का उपयोग करेगा निर्माण को गति प्रदान करने।

+2

क्या यह प्रत्येक निर्माण में फिर से क्लोन होगा? – inger

1

मैं एक ही समस्या में भाग गया और वर्तमान में इसे प्रत्येक परियोजना के लिए नौकरी बनाकर और Copy Artifact Plugin का उपयोग करके निर्भर नौकरी के निर्माण की अनुमति देने के लिए हल किया, भले ही गिट अपडेट इसकी निर्भरताओं पर किया जाता है (यह बीच में इमारत से बचने के लिए है परियोजना है जो हम पर निर्भर के लिए एक अद्यतन की)।

तो project_a नवीनतम स्थिर कलाकृतियों यह test_framework से जरूरत की नक़ल की और परीक्षण ढांचे के लिए एक अद्यतन project_a में एक निर्माण को ट्रिगर करेगा।project_a अभी भी गिट में बदलाव से ट्रिगर किया जा सकता है, यह सिर्फ टेस्ट_फ्रेमवर्क में नवीनतम कलाकृतियों की प्रतिलिपि बनाता है।

6

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

मान लें कि आपके पास दो रिपॉजिटरीज़ (ए और बी) हैं।

कदम:

1) बनाओ दो परियोजनाओं दूरदराज के खजाने एक से कोड को खींचने के लिए और बी या तो भंडार में किसी भी आवश्यक निर्माण चरणों रखो।

2) किसी भी स्रोत नियंत्रण प्रबंधन के बिना तीसरी निर्देशिका बनाएं। इस परियोजना के निर्माण चरण जोड़ें इस के समान एक शेल कमांड निष्पादित करने के लिए: (। आपका पथ एक ही नहीं हो सकता है के लिए उन्हें स्वयं देखो!)

ln -s /var/lib/jenkins/jobs/A/workspace A 
ln -s /var/lib/jenkins/jobs/B/workspace B 

अब आप किसी भी अन्य निर्माण चरणों में जोड़ सकते हैं यह निर्देशिका में ए और बी बहनों पर निर्भर करता है। हाँ प्रतीकात्मक लिंक!

3) तीन कार्यों को एक साथ चेन करें। पुल कार्यों का क्रम महत्वपूर्ण हो सकता है या इससे कोई फर्क नहीं पड़ता (आप मुझसे बेहतर जानते हैं) लेकिन स्रोत नियंत्रण के बिना कार्य श्रृंखला में अंतिम लिंक होना चाहिए।

+0

धन्यवाद पीटर। अभी तक सामयिक! – pojo

1

समस्या आप का वर्णन कर रहे हैं पहले से ही जेनकींस बगट्रैकर में बग के रूप में दर्ज किया गया है: https://issues.jenkins-ci.org/browse/JENKINS-8082


हम विस्तारित परियोजना काम विन्यास में "कस्टम कार्यक्षेत्र" विकल्प का उपयोग की उपनिर्देशिका में हमारा काम का संग्रह चेकआउट करने के लिए दूसरी नौकरी।

बस इतना ही submodules साथ मुख्य निर्देशिका बाहर अन्य नौकरी चेक:

var/lib/jenkins/jobs/ 
    + main_job 
    + workspace (main git checkout with submodules) 
     + modules 
     + mod1 
     + mod2 
    + mod1_job (custom workspace set to main_job/workspace/modules/mod1) 
    + workspace (empty) 
संबंधित मुद्दे