2010-10-04 12 views
17

मेरे चींटी build.xml स्क्रिप्टसक्रिय Git शाखा "(कोई शाखा)" हडसन सीआई पर

<property environment="env"/> 
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo> 
<echo>PWD = ${env.PWD}</echo> 

हडसन सीआई के साथ शुरू होता है, जब निर्माण करने के लिए किसी भी शाखा परिवर्तन सेटअप है। कंसोल आउटपुट

Commencing build of Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48) 
GitAPI created 
Checking out Revision 90906a63929e9074035eb5b10c71ee055ad3e13c (origin/DPM-48) 
[workspace] $ git.exe checkout -f 90906a63929e9074035eb5b10c71ee055ad3e13c 
[workspace] $ cmd.exe /C '"C:\Program Files\WinAnt\bin\ant.bat" -file build.xml ...' 
[echo] GIT_BRANCH = ${env.GIT_BRANCH} 
[echo] PWD = /cygdrive/d/.hudson 

सांत्वना उत्पादन से, हडसन जानता है कि यह निर्माण कर रहा है विषय शाखा DPM-48 लेकिन वातावरण चर GIT_BRANCH सेट नहीं है और 'Git शाखा' रिटर्न 'एक अलग हेड' पर Git है कि है ... राज्य

* (no branch) 
master 
DPM-48 

मैं क्या जानना चाहता हूं कि मैं कौन सी शाखा हडसन पर बना रहा हूं। ऐसा करने का एक तरीका होना चाहिए।

+0

http://github.com/hudson/Hudson-GIT-plugin/blob/master/src/main/java/hudson/plugins/git/GitSCM.java मुझे लगता है कि Git पता चला Hudson के लिए एससीएम प्लगइन GIT_BRANCH पर्यावरण चर सेट करने के लिए buildEnvVars() विधि को ओवरराइड करता है लेकिन यह GIT_BRANCH = $ {env.GIT_BRANCH} milkplus

+0

अच्छा बिंदु का उपयोग करके एंटी स्क्रिप्ट के माध्यम से नहीं आ रहा है, मैंने इसे अपने उत्तर में एकीकृत किया है, साथ ही किसी समस्या का संदर्भ जो आपकी वर्तमान स्थिति को समझा सकता है। – VonC

+0

http://issues.hudson-ci.org/browse/HUDSON-6856 का अर्थ है कि हडसन पर पृथक शाखा मुद्दे को ठीक किया जा सकता है। मैं यह सुनिश्चित करने जा रहा हूं कि मेरे पास हडसन और गिट प्लगइन का नवीनतम संस्करण है। – milkplus

उत्तर

32

यह संकल्प Hudson bug 6856 में abayer द्वारा टिप्पणी देखने के बाद, मैं निम्नलिखित कदम उठाए:

  • हडसन प्लगइन प्रबंधक का उपयोग कर, मैं अपने हडसन Git प्लगइन संस्करण 1.1 अद्यतन) abayer के प्राप्त करने के लिए ठीक कर। > "का निर्माण करने के लिए शाखाओं" -
  • हडसन नौकरी विन्यास का उपयोग करना, मैं "स्रोत कोड प्रबंधन" के तहत "उन्नत" बटन क्लिक किया। मैंने फिर नाम के लिए उपयोग करने के लिए "उपयोग करने के लिए स्थानीय शाखा" को बदल दिया। इससे कोई फर्क नहीं पड़ता।
  • तो मैं "सहेजें" बटन क्लिक किया और "अब बनाएँ"

alt text

निर्माण लॉग

[workspace] $ git.exe checkout -b ChangeTester d6caef27759495c5714923c1ddf19551a70d6083 

के बजाय

[workspace] $ git.exe checkout -f d6caef27759495c5714923c1ddf19551a70d6083 
से पता चलता साथ निर्माण शुरू कर दिया

जिसका मतलब है कि मैं 'अलग सिर' राज्य में नहीं हूं और कर सकता हूं इसलिए करते हैं, टैग बनाते हैं, और धक्का देते हैं।

मैं प्रतिबद्ध हैश प्राप्त करने के लिए 'गिट रेव-पार्स हेड' का उपयोग कर सकता हूं और यदि मुझे इसकी आवश्यकता हो तो शाखा के असली नाम को खोजने के लिए 'गिट शो-रेफ' के आउटपुट में मिल जाए।

अब मैं अपने Git रेपो को सफल बनाने के टैग पुश करने में सक्षम हूँ।

+0

उत्कृष्ट प्रतिक्रिया! +1 – VonC

+1

मैंने इसे समझने की कोशिश करने में कुछ घंटों बर्बाद कर दिए ... धन्यवाद! –

+0

यह उत्तर भी इस उत्तर के साथ http://jenkins-ci.361315.n4.nabble.com/git-plugin-after-checkout-not-on-any-branch-tp4673842p4673855.html –

10

नोट:

Git अलग सिर के साथ बनाता है कोई बात नहीं क्या

हालांकि यह स्पष्ट नहीं है अगर: OP milkplus की टिप्पणी हाल Hudson bug 6856 (जून 2010) है, जो उल्लेख है को संदर्भित करता है उस विशेष मुद्दे को हल किया जाएगा (उत्तरों का सुझाव है कि यह वास्तव में "डिज़ाइन के रूप में काम कर सकता है"!), यह this version of hudson Git Plugin को भी संदर्भित करता है, जो स्थानीय शाखा को चेकआउट करने की अनुमति देता है।


आप क्योंकि, जैसा कि Git प्लगइन अब सही काम कर रहा है, यह चेकआउट सीधे एक प्रतिबद्ध SHA1 किया एक DETACHED HEAD में हैं, और एक शाखा नहीं HEAD

आप जिस राज्य में हैं, HEAD अलग है किसी भी शाखा द्वारा दर्ज नहीं किया गया है (जो प्राकृतिक है --- आप किसी भी शाखा में नहीं हैं)। इसका क्या अर्थ है कि आप अपनी अस्थायी प्रतिबद्धताओं को त्याग सकते हैं और मौजूदा शाखा में वापस स्विच करके विलय कर सकते हैं।

आपकी बिल्डिंग स्क्रिप्ट पहले find what branch the relevant commit is coming from पर आज़मा सकती है।


के रूप में ओ पी milkplussource code of the Hudson Git Plugin को देखकर महसूस किया:

public void buildEnvVars(AbstractBuild build, java.util.Map<String, String> env) { 
    super.buildEnvVars(build, env); 
    String branch = getSingleBranch(build); 
    if(branch != null){ 
     env.put(GIT_BRANCH, branch); 
    } 
} 

एक वातावरण चर GIT_BRANCH सेट कर दिया जाता है, लेकिन यह एक्सएमएल निर्माण स्क्रिप्ट में कोई मूल्य नहीं प्रतीत होता है:

<property environment="env"/> 
<echo>GIT_BRANCH = ${env.GIT_BRANCH}</echo> 

अगर ऐसा है, तो यह issue 7554 की वजह से हो सकता है:

GIT_BRANCH सेट नहीं जब कई शाखाओं का निर्माण के लिए चुना जाता है

जब पहचान करने के लिए क्या शाखा वर्तमान बिल्ड पर हैं की कोशिश कर रहा, मैंने पाया कि GIT_BRANCH वातावरण चर जब अधिक तो एक भी सेट नहीं है शाखा का निर्माण करने के लिए चुना जाता है।

यह वह जगह है नहीं वास्तव में एक बग एक सुविधा का अनुरोध के रूप में इतना, मुझे लगता है - GIT_BRANCH env var केवल, सेट वहाँ एक एकल शाखा दी जाती है तो इस तरह के रूप में, यह प्रासंगिक नहीं है, तो/एक से अधिक शाखाएं हैं जब । मुझे यकीन नहीं है कि हम इस संदर्भ में कई शाखाओं के लिए एक env var कैसे प्रारूपित करेंगे।

मैंने सोचा कि GIT_BRANCH वर्तमान में निर्माण की जा रही शाखा में सेट किया जाएगा। जैसे कि निर्माण मास्टर पर है, इसमें मास्टर शामिल होगा।

यह एक और दूरदराज कि शाखा है, जो इस बिल्ड दौरान बनाया गया था करने के लिए उदाहरण के लिए धक्का करने के लिए मदद मिलेगी। या सही शाखा सेट के साथ एक और बिल्ड ट्रिगर करा सकते हैं।

दर्पण NPE described here

alt text

किसी कारण का प्रकार Git प्लगइन GIT_BRANCH वातावरण चर के लिए शून्य मान पारित करने के लिए शुरू कर दिया।
इस वजह से Maven प्लगइन System.getProperties().putAll(systemProps) कॉल में विफल।

समाधान "master" का उपयोग "**" या खाली स्ट्रिंग के बजाय डिफ़ॉल्ट गिट शाखा के रूप में करना था।

+0

यही समस्या है। मुझे नहीं पता कि शाखा नाम कैसे ढूंढें जो हडसन को बनाने के लिए प्रेरित हुआ। – milkplus

+1

@ मिल्कप्लस: लेकिन जिस लिंक का उल्लेख मैंने किया है, उसमें विभिन्न लिपि (जिसमें मेरे उत्तर में 'क्या शाखा' स्क्रिप्ट शामिल है) शाखा शाखा का पता लगाने के लिए ठीक से बनाया गया है। – VonC

2

इस समाधान साझा करने के लिए बहुत-बहुत, धन्यवाद!

मुझे स्थानीय शाखा सेट करने के लिए इस वैकल्पिक संवाद को खोजने में कुछ परेशानी थी - और दूसरों को यह दिखाने के लिए कि यह अभी भी वर्ष 2015 में भी वर्तमान दृष्टिकोण है, मैं जेनकींस के वर्तमान गुई संवादों का कुछ स्क्रीनशॉट संलग्न करना चाहता हूं।

enter image description hereenter image description here

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