2016-08-02 10 views
9

वर्तमान में मेरी पाइपलाइन विफल हो जाती है (लाल), जब एक मेवेन-जॉब अस्थिर (पीला) होता है।जेनकिन्स पाइपलाइन विफल रहता है यदि चरण अस्थिर है

node { 
    stage 'Unit/SQL-Tests' 
    parallel (
     phase1: { build 'Unit-Tests' }, // maven 
     phase2: { build 'SQL-Tests' } // shell 
    ) 
    stage 'Integration-Tests' 
    build 'Integration-Tests' // maven 
} 

इस उदाहरण में नौकरी यूनिट-टेस्ट का परिणाम अस्थिर है, लेकिन पाइपलाइन में विफल होने के रूप में दिखाया गया है।

मैं नौकरियों/पाइपलाइन/जेनकींस को कैसे विफल कर सकता हूं (1) विफल होने की बजाय पाइपलाइन चरण अस्थिर हो सकता है और (2) विफल होने की बजाय पाइपलाइन की स्थिति अस्थिर हो सकती है।

मैंने MAVEN_OPTS पैरामीटर -Dmaven.test.failure.ignore=true जोड़ने का प्रयास किया, लेकिन इसने समस्या को हल नहीं किया। मुझे यकीन है कि build 'Unit-Test' को कुछ तर्कों में लपेटना है जो परिणाम को पकड़ और संसाधित कर सकते हैं।

this logic के साथ एक उप-पाइपलाइन जोड़ना चाल नहीं करता है, क्योंकि उपवर्तन से चेकआउट करने का कोई विकल्प नहीं है (वह विकल्प नियमित मैवेन जॉब में उपलब्ध है)। यदि संभव हो तो मैं कमांडलाइन चेकआउट का उपयोग नहीं करना चाहूंगा।

उत्तर

10

जो भी कदम अनावश्यक या विफल है, आपकी स्क्रिप्ट में अंतिम निर्माण परिणाम विफल हो जाएगा।

प्रवाह में असफल होने से बचने के लिए आप डिफ़ॉल्ट रूप से झूठी में प्रचार जोड़ सकते हैं।

def result = build job: 'test', propagate: false 

प्रवाह के अंत में, आप "परिणाम" चर से प्राप्त होने के आधार पर अंतिम परिणाम का निर्णय ले सकते हैं।

उदाहरण

currentBuild.result='UNSTABLE' 

यहाँ के लिए एक विस्तार उदाहरण How to set current build result in Pipeline

बीआर,

टिम

है
13

सबक सीखा:

  • जेनकींस लगातार currentBuild.result मूल्य है जो या तो SUCCESS, UNSTABLE या FAILED
  • build job: <JOBNAME> का परिणाम एक चर में संग्रहीत किया जा सकता हो सकता है के अनुसार पाइप लाइन अद्यतन करेगा। बिल्ड स्थिति variable.result में है।
  • build job: <JOBNAME>, propagate: false पूरे निर्माण को तुरंत विफल होने से रोक देगा।
  • currentBuild.resultcan only get worse। यदि यह मूल्य पहले से FAILED था और currentBuild.result = 'SUCCESS' के माध्यम से एक नई स्थिति SUCCESS प्राप्त करता है यह FAILED

रहना होगा यह है कि मैं क्या अंत में प्रयोग किया जाता है:

node { 
    def result // define the variable once in the beginning 
    stage 'Unit/SQL-Tests' 
    parallel (
     phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE 
     phase2: { build 'SQL-Tests' } 
    ) 
    currentBuild.result = result.result // update the build status. jenkins will update the pipeline's current status accordingly 
    stage 'Install SQL' 
    build 'InstallSQL' 
    stage 'Deploy/Integration-Tests' 
    parallel (
     phase1: { build 'Deploy' }, 
     phase2: { result = build job: 'Integration-Tests', propagate: false } 
    ) 
    currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse) 
    stage 'Code Analysis' 
    build 'Analysis' 
} 
+2

और आप एक 'SUCCESS' परिणाम निर्धारित नहीं कर सकते, अगर इसे पहले से ही 'FAILED'' पर सेट किया गया था (जैसा कि यहां चर्चा की गई है (http://stackoverflow.com/questions/38221836/how-to-manipulate-the-build-result-of-a-jenkins-pipeline-job)। – StephenKing

+1

जानकारी के लिए धन्यवाद। उत्तर में कहा गया। – michaelbahr

+0

मुझे एक ही समस्या है। फिर भी मुझे कारण समझ में नहीं आता है।स्टेज व्यू प्लगइन अस्थिर (पीला) का समर्थन करता है, तो अस्थिर को FAILED क्यों माना जाता है? आपको हर समय currentBuild.result को सेट करने की आवश्यकता क्यों है और न केवल सबसे खराब लेना? – lqbweb

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