एक ही जेनकिंस कार्यक्षेत्र में कई गिट रिपोज चेकआउट करें


127

जेनकिंस 1.501 और जेनकिन्स गिट प्लगइन 1.1.26 का उपयोग करना

मेरे पास कई प्रोजेक्ट्स के साथ 3 अलग-अलग git repos हैं।

अब मुझे 3 प्रोजेक्ट्स के सभी प्रोजेक्ट्स को जेनकिंस स्लेव पर एक ही कार्यक्षेत्र में चेकआउट करने की आवश्यकता है। मैंने प्रत्येक git रेपो को इसमें परिभाषित किया है: स्रोत कोड प्रबंधन: एकाधिक SCM । लेकिन हर बार एक रेपो को पिछले रेपो (और उससे जुड़ी परियोजनाओं) को हटा दिया जाता है।

मैंने इसे पढ़ा है:

http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html

लेकिन यह वास्तव में मदद नहीं करता है। मैंने सभी रेपो के लिए रेपो (वैकल्पिक) के लिए स्थानीय उपनिर्देशिका के तहत एक ही फ़ोल्डर को निर्दिष्ट करने की कोशिश की है, लेकिन यह एक ही परिणाम देता है।

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

जवाबों:


69

जेनकिंस + गिट प्लगिन के साथ एक ही कार्यक्षेत्र में एक बार में एक से अधिक रेपो की जाँच संभव नहीं है।

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

पहले मल्टीपल SCM प्लगइन इस समस्या के साथ मदद कर सकता था लेकिन अब इसे हटा दिया गया है। मल्टिपल एससीएम प्लगइन पेज से: "यूजर्स को https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin पर माइग्रेट करना चाहिए । पाइपलाइन कई मल्टीपल SCs से बाहर की जाँच करने का बेहतर तरीका प्रदान करता है, और जेनकींस द्वारा समर्थित है। मुख्य विकास टीम। "


पहला दृष्टिकोण समस्याग्रस्त क्यों है? नौकरियों का बंटवारा अच्छा अभ्यास लगता है।
कर्टनडॉग

1
यह सामान्य रूप से एक अच्छा अभ्यास है, लेकिन जब आपको एक ही भौतिक स्थान के रखरखाव में कई चेकआउट की आवश्यकता होती है, तो यह एक बड़ी चिंता का विषय बन जाता है। उदाहरण के लिए, यदि आप एक ब्रांच बिल्ड बनाना चाहते हैं, तो आपको 4 नौकरियों का क्लोन बनाना होगा और फिर व्यक्तिगत रूप से हर एक के लिए रास्ते बदलने होंगे। इसमें मदद करने के लिए बेशक प्लगइन्स हैं, लेकिन एक नौकरी से केवल एक रिश्तेदार पथ की जांच करना आसान है। फिर आप बिना सेटिंग में बदलाव किए जितना चाहें उतना क्लोन कर सकते हैं।
CIGuy

1
आपको इसे सही उत्तर से बदलने की आवश्यकता है क्योंकि यह अब प्रासंगिक नहीं है।
Dvir669

2
पाइपलाइनों के लिए आपको एक नया डीएसएल सीखने की आवश्यकता होती है, जो कि बहुत ही साधारण नौकरी के लिए बहुत कम है (कई रिपॉजिटरी से कोड देखें) हम इसे करना चाहते हैं। कई SCM प्लगइन के लिए छड़ी जब तक कि एक अच्छा GUI जेनकींस पाइपलाइन DSL के आसपास दिखाई न दे। मैं रिपोर्ट कर सकता हूं कि यह जेनकिंस 2.17 के साथ ठीक काम कर रहा है
बुरक अर्सलान

2
मैं अभी कई रिपोज के साथ एक ही मुद्दे में भाग गया। मैं अब भी पाइपलाइन प्लगइन का उपयोग कर रहा हूं, भले ही मैं नए DSL के बारे में @BurakArslan के रूप में उलझन में था। यह वास्तव में उतना बुरा नहीं है जितना मैंने सोचा था और एक यथोचित सभ्य स्निपेट जनरेटर के साथ आता है। केवल 2 घंटों के लिए इसका उपयोग करने के बाद, अब मैं वास्तव में इस दृष्टिकोण को पसंद करता हूं क्योंकि मैं अंत में पाइपलाइन निर्माण स्क्रिप्ट को बाकी कोड के साथ एक साथ लाने के लिए प्रतिबद्ध कर सकता हूं।
बेन

81

कई SCMs प्लगइन के साथ:

  • प्रत्येक रिपॉजिटरी के लिए एक अलग रिपॉजिटरी प्रविष्टि बनाएं जिसे आपको चेकआउट करने की आवश्यकता है (मुख्य परियोजना या निर्भरता परियोजना।

  • प्रत्येक प्रोजेक्ट के लिए, "उन्नत" मेनू (दूसरा "उन्नत" मेनू में, प्रत्येक रिपॉजिटरी के लिए "उन्नत" लेबल वाले दो बटन हैं), "रेपो (वैकल्पिक)" टेक्स्टफ़ील्ड के लिए स्थानीय उपनिर्देशिका खोजें। आप "कार्यक्षेत्र" निर्देशिका में उपनिर्देशिका को निर्दिष्ट कर सकते हैं जहां आप परियोजना को कॉपी करना चाहते हैं। आप मेरे विकास कंप्यूटर की फाइलसिस्टम को मैप कर सकते हैं।

"दूसरा उन्नत मेनू" अब मौजूद नहीं है, इसके बजाय जो करने की आवश्यकता है वह "जोड़ें" बटन ("अतिरिक्त व्यवहार" अनुभाग पर) का उपयोग करें, और "एक उप-निर्देशिका की जाँच करें" चुनें

  • यदि आप चींटी का उपयोग कर रहे हैं, जैसा कि अभी बिल्ड.xml फ़ाइल बिल्ड टारगेट के साथ कार्यक्षेत्र की रूट डायरेक्टरी में नहीं है, लेकिन एक उपनिर्देशिका में है, तो आपको "इनकैट एंट" कॉन्फ़िगरेशन में प्रतिबिंबित करना होगा। ऐसा करने के लिए, "इनवोक चींटी" में, "उन्नत" दबाएं और "बिल्ड फ़ाइल" इनपुट टेक्स्ट भरें, जिसमें उपनिर्देशिका का नाम शामिल है, जहां build.xml स्थित है।

उम्मीद है की वो मदद करदे।


3
यह पुराना होना चाहिए। मल्टीपल SCMs प्लगइन लिखने के समय GIT स्निपेट में वैकल्पिक उप-पथ नहीं होता है।
अलेक्सई ओस्ट

12
प्रत्येक रिपॉजिटरी में "डाउन" नामक एक ड्रॉप डाउन सूची है। इसमें आप विकल्प "चेकआउट को एक उप-निर्देशिका" पा सकते हैं, जो समान प्रदर्शन करता है।
गैरी ये

1
मैंने कई SCM प्लगइन और git के साथ आपके गाइड का पालन किया लेकिन मुझे एक और मज़ेदार समस्या है। ऐसा लगता है कि विभिन्न रिपॉजिटरी के लिए एक ही शाखा (विकास) को ठीक से जांचना नहीं चाहते हैं। यह हैश (जो केवल पहले रिपॉजिटरी में मान्य है) द्वारा एक कमिट की जाँच करने की कोशिश करता है। यह कैसे पता करने पर कोई विचार?
Lefteris

मल्टीपल SCM प्लगइन के साथ सबसे बड़ा मुद्दा यह है: "पोस्ट-कम टाइप ट्रिगर्स वर्तमान में काम नहीं करते (कम से कम तोड़फोड़ के लिए), इसलिए 'क्रोन' टाइप पोलिंग को कॉन्फ़िगर करना आवश्यक है।"
ग्रेईई

1
पाइपलाइनों के लिए आपको एक नया डीएसएल सीखने की आवश्यकता होती है, जो कि बहुत ही साधारण नौकरी के लिए बहुत कम है (कई रिपॉजिटरी से कोड देखें) हम इसे करना चाहते हैं। कई SCM प्लगइन के लिए छड़ी जब तक कि एक अच्छा GUI जेनकींस पाइपलाइन DSL के आसपास दिखाई न दे। मैं रिपोर्ट कर सकता हूँ कि यह जेनकिंस
बुरक अर्सलान

41

चूंकि मल्टीपल SCMs प्लगिन को हटा दिया जाता है।

जेनकिंस पाइपलाइन के साथ कई गिट रेपो की जांच करना संभव है और इसके बाद ग्रेडेल का उपयोग कर निर्माण करना

node {   
def gradleHome

stage('Prepare/Checkout') { // for display purposes
    git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'

    dir('a-child-repo') {
       git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
    }

    env.JAVA_HOME="${tool 'JDK8'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
    gradleHome = tool '3.4.1' 
}

stage('Build') {
  // Run the gradle build
  if (isUnix()) {
     sh "'${gradleHome}/bin/gradle' clean build"
  } else {
     bat(/"${gradleHome}\bin\gradle" clean build/)
  }
}
}

आप इस तरह एक कस्टम पाइपलाइन के बजाय git सबमॉड्यूल का उपयोग करने पर विचार करना चाह सकते हैं ।


धन्यवाद!!! dirब्लॉक की कुंजी है, मैं समझ नहीं सकता है क्यों मैं सिर्फ अपने काम के कार्यक्षेत्र में सबसे हाल-क्लोन रेपो देख रहा था।
bon

एकाधिक SCM के तहत "परिवर्तन" की धारणा को कैसे माना जाता है? क्या यह केवल उन सभी रिपॉज से देखे गए बदलावों का योग है जो नौकरियों को बनाते हैं? यदि संभव हो तो उन्हें प्रत्येक से अलग करना अच्छा होगा, 23 changes from repo XXX, 3 changes from repo YYYया उन पंक्तियों के साथ कुछ अधिक कॉम्पैक्ट होगा।
jxramos

20

मैंने कई SCMs प्लग इन का उपयोग जेनकिन्स के साथ सफलतापूर्वक Git Plugin के संयोजन में किया।


3
धन्यवाद यह बहुत अच्छा है, मैं रिपॉजिटरी सेक्शन में 2 बिटबकेट पथ डाल पा रहा हूं, और अब मैं रेपो 1 चेकआउट "डेवलप" ब्रांच को कैसे बता सकता हूं और रेपो 2 चेकआउट "फिक्स" ब्रांच के लिए? मैं जेनकिंस में भाग बनाने के लिए शाखाओं को देखता हूं, मैं शाखा स्पेसियर में रिपॉजिटरी नाम और Refsec कैसे सेट कर सकता हूं ('किसी' के लिए रिक्त), इसलिए प्रत्येक को संबंधित शाखा की जांच हो सकती है जो मुझे चाहिए? या मैं यह कर रहा हूँ और मुझे "मल्टीपल SCM" कहने वाले बूलियन पर क्लिक करना चाहिए?
पेलोस

@ पेलोस क्या आप समाधान खोजने में सक्षम थे?
गोविंद

फिलहाल हम yml फ़ाइल का उपयोग नहीं कर रहे हैं और हमने दो अलग-अलग वर्कफ़्लोज़ को नियमित कार्यों के साथ किया
पेलोस

5

खजाने के संबंधों के आधार पर, एक और दृष्टिकोण एक के रूप में अन्य भंडार (खजाने) जोड़ने के लिए है Git submodules खजाने से एक के लिए। एक git सबमॉड्यूल दूसरे रेपो का संदर्भ बनाता है। जब तक आप "सुपरप्रोजेक्ट" (आधिकारिक शब्द) --recursiveक्लोनिंग करते समय ध्वज को निर्दिष्ट नहीं करते हैं, तब तक वे सबमॉड्यूल रिपॉज क्लोन नहीं किए जाते हैं ।

यहाँ वर्तमान परियोजना में एक उपखंड जोड़ने की आज्ञा है:

git submodule add <repository URI path to clone>

हम जेनकिन्स v1.645 का उपयोग कर रहे हैं और गिट एससीएम सुपरप्रोजेक्ट्स के लिए एक पुनरावर्ती क्लोन करेंगे। Voila आपको सुपरप्रोजेक्ट फाइलें और सभी आश्रित (सबमॉड्यूल) रेपो फाइलें एक ही जेनकींस जॉब वर्कस्पेस में अपनी-अपनी निर्देशिका में मिलती हैं।

यह नहीं है कि यह सही तरीका है, बल्कि यह एक दृष्टिकोण है।


5

जेनकींस: एकाधिक एससीएम - पदावनत। GIT Plugin - कई रिपोज के लिए काम नहीं करता है।

कोड के रूप में स्क्रिप्टिंग / पाइपलाइन - जाने का रास्ता है।


2

मुझे भी यह समस्या थी। मैंने इसे अन्य प्रोजेक्ट्स पर ट्रिगर / कॉल बिल्ड का उपयोग करके हल किया। प्रत्येक रिपॉजिटरी के लिए मैं मापदंडों का उपयोग करके डाउनस्ट्रीम प्रोजेक्ट को कॉल करता हूं।

मुख्य परियोजना:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None

फिर प्रत्येक रिपॉजिटरी के लिए मैं इस तरह से एक डाउनस्ट्रीम परियोजना कहता हूं:

Trigger/call builds on other projects: 
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>

डाउनस्ट्रीम परियोजना: लिनक्स-टैग-चेकआउट:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/origin/tags/${TAG}
Branch Specifier: */tags/${TAG} 

1

एक भी कार्यक्षेत्र में एक समय में एक से अधिक रेपो की जांच कर रहा है (शायद ही अधिक हाल के संस्करणों में?) जेनकींस + Git प्लगइन के साथ संभव।

"स्रोत-कोड-प्रबंधन" अनुभाग में, "गिट" का चयन न करें, लेकिन "मल्टीपल SCMs" और कई गिट सूचनाओं को जोड़ें।

सुनिश्चित करें कि सभी में लेकिन आप एक "अतिरिक्त व्यवहार" क्रिया के रूप में जोड़ते हैं "एक उप-निर्देशिका की जाँच करें" और एक व्यक्तिगत उपनिर्देशिका निर्दिष्ट करें।


मुझे विश्वास है कि आप इस तरह से (पदावनत) मल्टीपल SCM प्लगइन का उपयोग कर रहे हैं न कि वेनिला गिट प्लगिन के।
राबर्ट

0

हम अपने कई GIT रिपॉजिटरी का प्रबंधन करने के लिए git-repo का उपयोग कर रहे हैं । इसमें जेनकिंस रेपो प्लगइन भी है जो सभी जेनिटिक्स जॉब वर्कस्पेस को git-repo द्वारा प्रबंधित रिपॉजिटरी के हिस्से को चेकआउट करने की अनुमति देता है।


इस सवाल में बताई गई समस्या को आप कैसे हल करते हैं? मैंने आपके द्वारा उल्लिखित प्लगइन स्थापित किया है, और रेपो और प्लगइन के बारे में पढ़ा है, लेकिन मैं यह नहीं देख सकता कि जेनकिन्स को एक परियोजना में निष्पादित करने के लिए दो रेपो को क्लोन कैसे किया जाए ...
GreenAsJade

रेपो का उपयोग करने के लिए, विशेष रिपॉजिटरी बनाने की आवश्यकता है जिसमें केवल प्रकट फ़ाइल (एस) होगी। इस फ़ाइल में आप अन्य रिपॉजिटरी के बारे में सभी जानकारी निर्दिष्ट करते हैं। मैनिफ़ेस्ट फ़ाइल्स का सटीक प्रारूप git-repo प्रोजेक्ट के डॉक्स / मेनिफ़ेस्ट-फॉर्मेट .xt फ़ाइल ( gerrit.googlesource.com/git-repo/+/master/docs/… ) में वर्णित है । जब नौकरी के जेनकींस रेपो भाग को कॉन्फ़िगर करना - आप 'मेनिफ़ेस्ट' रिपॉजिटरी के स्थान को निर्दिष्ट करते हैं और वैकल्पिक रूप से 'मेनिफ़ेस्ट' फ़ाइलों का नाम (आपके पास कई हो सकते हैं)। मेनिफ़ेस्ट में निर्दिष्ट सभी रिपॉजिटरी को क्लोन किया जाएगा।
व्लादिसल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.