2016-09-21 12 views
7

मेरी मास्टर शाखा में गिटहब शाखा सुरक्षा चालू होने पर मैं अपनी परियोजना के संस्करण संख्या को प्रबंधित करने के लिए एक अच्छी प्रक्रिया की तलाश में हूं।गिटहब संरक्षित शाखाओं में संस्करण संख्या कैसे बढ़ाएं?

एक आदर्श दुनिया में, जब आप अपनी 'रिलीज' शाखा में विलय करते हैं तो आपका निरंतर एकीकरण सर्वर अपने परीक्षण चलाएगा, फिर स्वचालित रूप से आपके प्रोजेक्ट की संस्करण संख्या बढ़ाएगा और आपके एससीएम सिस्टम पर वापस आ जाएगा।

हालांकि, शाखा सुरक्षा के साथ, आप पुल अनुरोध के बिना अपनी शाखा में प्रतिबद्ध नहीं हो सकते हैं, इसलिए आपके पास कैच -22 है जहां आपका सीआई सर्वर आपकी संरक्षित शाखा में धक्का नहीं दे सकता है जब यह संस्करण संख्या को अपडेट करने का प्रयास करता है।

मैं कुछ काम arounds के बारे में सोच सकते हैं, जो सभी के उप इष्टतम हैं:

  1. रिग ऊपर एक प्रणाली तो अपने सीआई सर्वर संस्करण को अद्यतन करने के लिए एक पीआर होगा। मुझे यकीन नहीं है कि क्या आप गिटहब के साथ ऐसा भी कर सकते हैं, लेकिन अगर ऐसा होता है तो यह हर एक 'वास्तविक' पीआर के लिए दो पुल अनुरोधों को तैयार करता है, जो अजीब है।
  2. शाखा संरक्षण निकालें - अब किसी को भी शाखाओं के लिए कुछ भी धक्का कर सकते हैं, और आप एक मैन्युअल प्रक्रिया
  3. अद्यतन पुल अनुरोध से पहले संस्करण मैन्युअल के माध्यम से अपने डेवलपर्स का प्रबंधन करने के लिए है। यह # 2 से थोड़ा बेहतर है, लेकिन डेवलपर्स के लिए नया संस्करण संख्या चुनते समय गलतियां करने के लिए दरवाजा खुलता है, या सही शाखा संख्या को गलत शाखा में विलय कर देता है।

मुझे उम्मीद है कि ऐसे अन्य विकल्प हैं जिनके बारे में मैंने नहीं सोचा है।

हम जावास्क्रिप्ट और एनपीएम का उपयोग कर रहे हैं, लेकिन मेरा मानना ​​है कि समस्या भाषा अज्ञेयवादी है, निश्चित रूप से एक ही समस्या जावा और मैवेन के साथ मौजूद होगी।

उत्तर

1

मैंने जेनकिंस का उपयोग करके संस्करण स्वचालित करने के लिए git tags का उपयोग किया। इसलिए जब भी नौकरी दौड़ती है तो यह अंतिम tag लेता है और इसे बढ़ाता है। चूंकि टैग काम करने से अलग हैं, इसलिए एक टैग जोड़ना शाखा संरक्षण के साथ संघर्ष नहीं करता है।

# get last tag 
last=$(git describe --abbrev=0 --tags) 
# increment and tag again 
git tag $(($last + 1)) 
git push origin $(($last + 1)) 

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

/* 
* Gets the version name from the latest Git tag 
*/ 
def getVersionName = { -> 
    def stdout = new ByteArrayOutputStream() 
    exec { 
     commandLine 'git', 'describe', '--tags' 
     standardOutput = stdout 
    } 
    return stdout.toString().trim() 
} 

मुझे यकीन है कि आप जावास्क्रिप्ट के साथ एक समान सेटअप का उपयोग कर सकते हैं।

+0

लेकिन यह संस्करण आईडी को वापस परियोजना में सही नहीं करता है? – JBCP

+0

कोई भी संस्करण जानकारी परियोजना में नहीं है। यह 'गिट टैग' में है जो जेनकींस हर बार मास्टर शाखा पर एक अद्यतन देखता है। प्रोजेक्ट सिर्फ अंतिम 'टैग' से संस्करण जानकारी को कैसे निकालना है, जानता है। तो हाँ कोई पीछे हटना नहीं है। –

+0

@ जेबीसीपी कृपया उत्तर को स्वीकार किए जाने पर स्वीकार करें। –

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