2016-06-28 7 views
8

किसी के पास जेनकींस पाइपलाइन स्क्रिप्ट है जो पिछले परिवर्तनों को एक चर में सफल बनाने के बाद से सभी बदलावों को भर सकती है? मैं गिट और मल्टीब्रैंच पाइपलाइन नौकरी का उपयोग कर रहा हूं।जेनकींस पाइपलाइन में आखिरी सफल निर्माण के बाद से परिवर्तन कैसे प्राप्त करें?

उत्तर

11

वैसे मैं कुछ एक साथ इकट्ठा करने में कामयाब रहा। मैं बहुत यकीन है कि मैं तुम्हें सरणियों बेहतर पुनरावृति सकता हूँ लेकिन यहाँ क्या मैं अब के लिए लिया है:

node('Android') { 
    passedBuilds = [] 

    lastSuccessfulBuild(passedBuilds, currentBuild); 

    def changeLog = getChangeLog(passedBuilds) 
    echo "changeLog ${changeLog}" 
} 

def lastSuccessfulBuild(passedBuilds, build) { 
    if ((build != null) && (build.result != 'SUCCESS')) { 
     passedBuilds.add(build) 
     lastSuccessfulBuild(passedBuilds, build.getPreviousBuild()) 
    } 
} 

@NonCPS 
def getChangeLog(passedBuilds) { 
    def log = "" 
    for (int x = 0; x < passedBuilds.size(); x++) { 
     def currentBuild = passedBuilds[x]; 
     def changeLogSets = currentBuild.rawBuild.changeSets 
     for (int i = 0; i < changeLogSets.size(); i++) { 
      def entries = changeLogSets[i].items 
      for (int j = 0; j < entries.length; j++) { 
       def entry = entries[j] 
       log += "* ${entry.msg} by ${entry.author} \n" 
      } 
     } 
    } 
    return log; 
    } 
0

Changes Since Last Success Plugin है जो आपकी मदद कर सकता है।

+1

लेकिन [टैग: जेनकींस-पाइपलाइन] के साथ काम नहीं करता है, मुझे लगता है .. – StephenKing

+0

हाँ मैंने इसे चेक आउट किया लेकिन यह पता नहीं लगा कि जेनकिन्सफाइल – CaptRespect

3

CaptRespect से जवाब मैं कथात्मक पाइपलाइन में इस्तेमाल के लिए निम्न स्क्रिप्ट के साथ आया था के आधार पर:

def changes = "Changes:\n" 
build = currentBuild 
while(build != null && build.result != 'SUCCESS') { 
    changes += "In ${build.id}:\n" 
    for (changeLog in build.changeSets) { 
     for(entry in changeLog.items) { 
      for(file in entry.affectedFiles) { 
       changes += "* ${file.path}\n" 
      } 
     } 
    } 
    build = build.previousBuild 
} 
echo changes 

यह stage->when->expression भागों में बहुत उपयोगी है जब कुछ फ़ाइलों को बदल दिया गया था। मुझे अभी तक उस हिस्से तक नहीं मिला है, हालांकि, मुझे इससे एक साझा लाइब्रेरी बनाना अच्छा लगेगा और इसे जांचने के लिए इसे कुछ ग्लोबिंग पैटर्न पास करना संभव होगा।

संपादित करें: Check the docs बीटीडब्ल्यू, यदि आप थोड़ा गहराई से गुजरना चाहते हैं। आप सभी object.getSomeProperty() कॉल को केवल entry.someProperty में कनवर्ट करने में सक्षम होना चाहिए।

+0

नाइस से इसका उपयोग कैसे किया जाए। यदि आप contrubute की देखभाल करते हैं तो कुछ पाइपलाइन उदाहरणों के साथ एक जिथब रेपो है: https://github.com/jenkinsci/pipeline-examples – CaptRespect

+0

यह घोषणात्मक पाइपलाइन शैली में नहीं बल्कि पटकथा पाइपलाइन है! – Lincoln

+1

@Lincoln, yup। आप इसे घोषणात्मक रूप से नहीं कर सकते हैं। आपको इसे करने की आवश्यकता है इसे स्क्रिप्ट ब्लॉक में लपेटें या इसे साझा लाइब्रेरी से उपयोग करें। – andsens

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