जेनकिन्स बिल्ड में अपडेट नहीं करने वाले गिट सबमॉडल्स


85

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

जब मैं बिल्ड को चलाता हूं, तो मैं देखता हूं कि कार्यक्षेत्र में सबमॉड्यूल से फाइलें हैं। समस्या यह है कि यह सबमॉडल का पहला संशोधन है। जब मैं परिवर्तन (GitHub पर होस्ट किए गए रिपॉजिटरी) को धक्का देता हूं तो जेनकिन्स सही बदलाव लाने के लिए सबमॉड्यूल को अपडेट नहीं करता है। क्या कभी किसी ने यह देखा है?

जवाबों:


96

ध्यान दें कि जेनकिंस Git प्लगइन 2.0 में "अग्रिम सबमॉड्यूल व्यवहार" होगा, जो कि उप-संस्करण के उचित अपडेट को सुनिश्चित करना चाहिए:

git 2.0

द्वारा टिप्पणी के रूप में vikramvi:

Advanced sub-modules behavior> " Path of the reference repo to use during submodule update" इस फ़ील्ड के विरुद्ध, सबमॉड्यूल गिट url जोड़ें।

पथ


टिप्पणियों में ओवेन बी का उल्लेख है :

प्रमाणीकरण समस्या के लिए, अब "पैरेंट रिपॉजिटरी के डिफ़ॉल्ट रिमोट से क्रेडेंशियल्स का उपयोग करें" विकल्प है

यहाँ JENKINS-20941 में देखा गया :

https://issues.jenkins-ci.org/secure/attachment/33245/Screen%20Shot%202016-07-08%20at%2010.09.17.png


6
पर कैसे? क्या आप विस्तृत चरण भी प्रदान कर सकते हैं कि कौन से विकल्प चुनने हैं? धन्यवाद।
ज़ेविए

8
@ zavié मुझे लगता है कि आपको "उन्नत उप-मॉड्यूल व्यवहार" चुनना चाहिए और फिर चेकबॉक्स "पुनरावर्ती अपडेट सबमॉड्यूल्स" की जांच करें जो दिखाई देगा, और सहेजें पर क्लिक करें।
काजागमनस

9
यदि आप एक निजी भंडार का उपयोग कर रहे हैं तो यह काफी काम नहीं करता है।
एरिक

1
एक निजी रेपो के साथ मेरे लिए पूरी तरह से काम किया
davegallant

3
यह केवल तभी काम करता है जब आपके रेपो को आपके गिट सबमॉड्यूल को पढ़ने के लिए प्रमाणीकरण की आवश्यकता नहीं होती है। जेनकिंस बग।
अर्न्स्ट कुशके

33

इस अनुभाग के तहत जेनकींस साइट पर गिट प्लगिन प्रलेखन में शामिल किया गया है: पुनरावर्ती सबमॉड्यूल्स

अंश

GIT प्लगइन सबमोडुल्स के साथ रिपॉजिटरी का समर्थन करता है जो बदले में खुद को सबमॉड्यूल करता है। हालांकि इसे चालू किया जाना चाहिए: नौकरी कॉन्फ़िगरेशन में -> अनुभाग स्रोत कोड प्रबंधन , Git -> उन्नत बटन (निर्माण के लिए शाखाओं के तहत) -> पुनरावर्ती सबमॉडुल्स को अद्यतन करें

उदाहरण

अपनी नौकरी के विन्यास स्क्रीन से, स्रोत कोड प्रबंधन अनुभाग में, खींच जोड़ें नीचे बटन का चयन करें "उन्नत उप मॉड्यूल व्यवहार"।

   एस 1

                                 s2

फिर "पुनरावर्ती अपडेट सबमॉडुल्स" का चयन करें:

   S3


1
धन्यवाद, लेकिन यह उस समय काम नहीं आया जब मैंने यह कोशिश की थी (लगभग 2 साल पहले)
Ben

@ - ठीक है, मैंने बस यही कोशिश की और यह मेरे लिए काम कर गया। आपके संस्करणों से संबंधित हो सकता है।
slm

1
यह केवल तभी काम करता है जब आपके रेपो को आपके गिट सबमॉड्यूल को पढ़ने के लिए प्रमाणीकरण की आवश्यकता नहीं होती है।
अर्न्स्ट कुश्के

@EnnstKuschke - मेरा मानना ​​है कि जेनकिंस को एक SSH कुंजी दी जा सकती है ताकि यह भी repos के साथ संवादात्मक हो सके, जिन्हें ओटर्म की आवश्यकता है।
स्लम

29

क्या आप जानते हैं कि आपकी गिट रिपॉजिटरी हमेशा एक सबमॉड्यूल के किसी विशेष संशोधन को संदर्भित करती है ? जेनकिंस स्वचालित रूप से संशोधन को बदलने नहीं जा रहा है।

यदि आप सबमॉड्यूल का नया संशोधन उपयोग में लेना चाहते हैं, तो आपको अपने स्थानीय Git रिपॉजिटरी में यह करना होगा:

cd submoduledir
git pull
cd ..
git add submoduledir
git commit -m 'Updated to latest revision of submoduledir'
git push # Go and watch Jenkins build with the new revision of the submodule

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

आप सबमॉडल्स पर एक अच्छा संदर्भ पढ़ना चाह सकते हैं, जैसे http://progit.org/book/ch6-6.html


1
ProGit लिंक @sti दिया गया पुराना है। मुझे लगता है कि यह वर्तमान समतुल्य https://git-scm.com/book/en/v2/Git-Tools-Submodules
Stevel

लिंक टूटा हुआ है (HTTPS संबंधित?) - "502 खराब गेटवे"
पीटर मोर्टेंसन

17

अंत में यह करने के लिए एक रास्ते पर ठोकर खाई और यह सरल है।

समस्या:

क्रेडेंशियल के साथ प्रारंभिक क्लोन ठीक काम करता है लेकिन बाद में submoduleक्लोनिंग गलत क्रेडेंशियल्स के साथ विफल हो जाता है।

  1. स्वचालित उन्नत उप-मॉड्यूल क्लोनिंग: Source Code Management >> Additional Behaviours >> Advanced sub-modules behavioursपरिणामी त्रुटि।
  2. git submodule update --initमें Execute Shellखंड भी साख त्रुटि के साथ विफल।

समाधान:

मैं उपयोग कर रहा हूं jenkins-1.574

  1. Build Environment >> SSH Agentबॉक्स को चेक करें ।
  2. सही क्रेडेंशियल्स का चयन करें (शायद Source Code Managementअनुभाग में चयनित के समान
  3. Execute Shellअनुभाग में अद्यतन सबमॉड्यूल

    git submodule sync
    git submodule update --init --recursive
    

यहाँ एक स्क्रीन शॉट हैयहां छवि विवरण दर्ज करें


3
अब ऐसा कोई चेकबॉक्स नहीं है।
adi518

11

ऐसा लगता है कि मुझे एक समाधान मिला:

मैंने निम्नलिखित शेल कमांड निष्पादित करने के लिए एक बिल्ड स्टेप जोड़ा:

git submodule foreach git checkout master
git submodule foreach git pull

जब आप उन आदेशों को करते हैं, तो आपको सुपरप्रोजेक्ट में प्रतिबद्ध करने की आवश्यकता हो सकती है, क्योंकि आपके सबमॉड्यूल में HEAD को अपडेट किया गया होगा।
स्लाइस

हाय बेन, क्या आप अपने समाधान को थोड़ा और विस्तार से साझा कर सकते हैं? मैं वही काम करना चाहता हूं। इसके अलावा, बस पुष्टि करने के लिए, आपका समाधान सबमॉडल को प्रोजेक्ट के सबमॉडल्स को वर्कशॉप में अपडेट करेगा, हाँ?
किम स्टैक

उससे अधिक विस्तार नहीं है। मैंने बस अपनी निर्माण प्रक्रिया में उन 2 पंक्तियों को जोड़ा और यह हमेशा सबमॉड्यूल के नवीनतम संस्करण को खींचता है।
बेन

10
जैसा कि @sti यहां एक अन्य प्रतिक्रिया में कहता है, ऐसा लगता है कि आप एसवीएन बाह्य उपकरणों की तरह गिट सबमॉडल्स का उपयोग करने की कोशिश कर रहे हैं। इन आदेशों को जेनकिंस से जोड़ने के बजाय, अपने मुख्य गिट रेपो के लिए उचित सबमॉड्यूल संस्करण प्रतिबद्ध करना बेहतर होगा। जेनकींस तब आपके प्रोजेक्ट के एक विशेष संस्करण का निर्माण करते समय हमेशा सबमॉडल्स के एक ही संस्करण की जांच करेगा। Reproducible बनाता है एक अच्छी बात है।
कोडी कोस्टरलाइन

4
@ मैं इस आदेश पर आया हूं कि यदि आप सबमॉडल में मास्टर शाखा का उपयोग नहीं कर रहे हैं तो esepcially अधिक उपयोगी हो सकता है git submodule update --init --recursive
Corey Scott

7

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


2

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

checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: false]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '[myCredentials]', url: 'https://git.myRepo.git']]])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.