2016-01-22 10 views
12

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

कोई भी यह अच्छा तरीका जानता है?

उत्तर

6

मैं भी 'जेनकींस-CLI' का उपयोग करके ऐसा करने का एक और रास्ता मिल गया अपने Jobname

def job = Jenkins.instance.getItem("workFlow") 
job.nextBuildNumber = 10 
job.saveNextBuildNumber() 
+2

यह कोड स्निपेट 'nextBuildNumber' फाइल करने के लिए नया बिल्ड नंबर लिखना नहीं है। इसके कारण, यदि आप (कृपापूर्वक) जेनकींस को पुनरारंभ करते हैं और फिर एक बिल्ड को ट्रिगर करते हैं, तो यह 'अगली बिल्डिंग संख्या' फ़ाइल में जो भी बिल्ड नंबर मौजूद था (और ऊपर दिए गए स्निपेट में निर्दिष्ट नहीं) का उपयोग करके समाप्त होता है। 'Job.saveNext() 'के बजाय' job.saveNextBuildNumber() 'का उपयोग इस समस्या को संबोधित करता है। – Amit

0

को .. जेनकींस स्क्रिप्ट कंसोल में स्क्रिप्ट नीचे चलाने की कोशिश करें बदलें "कार्यप्रवाह"। यह प्रतिष्ठानों नीचे बंद कर दिया जहां स्क्रिप्ट कंसोल की पहुंच उपलब्ध नहीं है के लिए काम करता है (Cloudbees उद्यम जेनकींस)

java -jar jenkins-cli.jar -s https://instanceURL/ \ 
      set-next-build-number workflow-name 33 
12

या, आप अपने पाइप लाइन के लिए इस तरह एक टुकड़ा जोड़ सकता है/कार्यप्रवाह काम डीएसएल स्क्रिप्ट (उर्फ Jenkinsfile):

offset = 5 
currentBuild.displayName = "#" + (currentBuild.number + offset) 
+0

यह वही है जो मुझे चाहिए! –

7

दुर्भाग्य से ऊपर सूचीबद्ध विधियां फ़ोल्डरों का उपयोग करते समय मेरे लिए काम नहीं करतीं। मैं जेनकींस स्क्रिप्ट कंसोल में निम्नलिखित का सहारा लिया:

job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class) 
job.nextBuildNumber = 92 
job.save() 
+1

यदि लाइन 3 के लिए 'job.saveNextBuildNumber()' का उपयोग करना है, तो यह मेरी बहु-शाखा पाइपलाइन के लिए काम करता है। –

+0

बहु-शाखा पाइपलाइन से अपना नौकरी नाम ढूंढने के लिए, इसे चलाएं: 'def jobs = Jenkins.getInstance()। GetAllItems(); println (नौकरियों) ' और फिर, जैसे @DavidV ऊपर वर्णित: ' डीईएफ़ काम = Jenkins.instance.getItemByFullName ("YourTeam/your_project/सुविधाओं% 2Fbranchname"); job.nextBuildNumber = 301; job.saveNextBuildNumber(); ' – kivagant

2

कुछ नोट:

  • जेनकींस नौकरियां और फ़ोल्डर serializable नहीं हैं। , @NonCPS
  • अक्षम ग्रूवी सैंडबॉक्स उपयोग करने की आवश्यकता के रूप में Jenkins.instance की तरह वैश्विक सुलभ अन्यथा
  • Jenkins.instance.getItem() फ़ोल्डरों के साथ अच्छी तरह से काम नहीं करेगा नहीं हैं। job.nextBuildNumber स्थापना प्रभाव बाद के निर्माण ले जाएगा, इसलिए आगे बढ़ें और अगले एक
  • शुरू करें कि आप अपने पाइप लाइन से बाहर लौट बनाएं ताकि शुरुआत निर्माण बुरा बिल्ड नंबर
  • के साथ जारी नहीं करता है env.JOB_NAME
  • के खिलाफ Jenkins.instance.getItemByFullName का प्रयोग करें

कोड:

@NonCPS 
def updateBuildNumber(build_number) { 
    def job = Jenkins.instance.getItemByFullName(env.JOB_NAME, Job.class) 
    job.nextBuildNumber = build_number 
    job.saveNextBuildNumber() 
    build env.JOB_NAME 
    return true 
} 
संबंधित मुद्दे