2016-09-16 4 views
7

जेनकींस पाइप लाइन के लिए: मैं एक पाइपलाइन p1 कि एक नौकरी J1 और फिर J2 से चलाता है। मुझे कुछ पैरामीटर चाहिए जो जे 1 द्वारा सेट किए गए हैं और पाइपलाइन पी 1 में जे 2 तक पहुंचे हैं। मैं जेनकींस पाइपलाइन प्लगइन का उपयोग करके इस funnctionality को कैसे लागू करूं? अग्रिम धन्यवादवापसी मानकों/एक नौकरी (पाइप लाइन से शुरू हो रहा) से परिणाम वापस उसी पाइपलाइन

+0

क्या ..........? – StephenKing

+0

आप उन्हें कैसे ट्रिगर करते हैं? क्या आप कुछ कोड साझा कर सकते हैं? – hakamairi

उत्तर

6

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

// Pipeline code in P1 

// Build J1 and get result. 
def j1BuildResult = build job: 'J1', parameters: [string(name: 'J1_PROP', value: 'FOO')], propagate: true, wait: true 

// Get results of J1 
step([$class    : 'CopyArtifact', filter: 'j1-result.properties', 
     fingerprintArtifacts: true, 
     flatten    : true, 
     projectName   : 'J1', 
     selector   : [$class  : 'SpecificBuildSelector', buildNumber: buildResult.getNumber().toString()]]) 

// Load J1 properties (you may need to turn off sandbox or approve this in Jenkins) 
Properties j1Props = new Properties() 
j1Props.load(new StringReader(readFile('j1-result.properties'))) 

// Build J2 
def j2BuildResult = build job: 'J2', parameters: [string(name: 'J2_PROP', value: j1Props.someProperty)], propagate: true, wait: true 

// Get results of J2 
step([$class    : 'CopyArtifact', filter: 'j2-result.properties', 
     fingerprintArtifacts: true, 
     flatten    : true, 
     projectName   : 'J2', 
     selector   : [$class  : 'SpecificBuildSelector', buildNumber: buildResult.getNumber().toString()]]) 

// Load J2 properties (you may need to turn off sandbox or approve this in Jenkins) 
Properties j2Props = new Properties() 
j1Props.load(new StringReader(readFile('j2-result.properties'))) 
7

यह "env" का उपयोग किया जा सकता है:

तो मैं कुछ इस तरह था। यदि आप j1 बनाने का प्रबंधन करते हैं तो इसकी जानकारी बिल्ड के env में जोड़ें।

तो j1 एक pieleline आप env.MYKEY=MYVALUE लिए कर सकता था। एक फ्रीस्टाइल-नौकरी के लिए मुझे लगता है कि इसे EnvInject plugin (कोशिश नहीं की गई) का उपयोग करके काम करना चाहिए। p1 में यदि आप निर्माण परिणाम से बाहर हैं तो आपको उस जानकारी के साथ एक नक्शा मिलेगा।

इसलिए, यदि आप p1 कुछ लाइन इस में कार्य करें:

// somewhere in your pipeline, i.e. p1: 
def j1BuildResult = build job: 'J1' 
def j1EnvVariables = j1BuildResult.getBuildVariables(); 

तो j1EnvVariables चर आप j1 में सेट से युक्त एक नक्शा होगा।

पुनश्च: कैसे उस जानकारी को पारित करने के लिए पैरामीटर के रूप में p2 उदा है कवर here

+0

यह मेरे लिए अपवाद उत्पन्न करता है: org.kohsuke.stapler.NoStaplerConstructorException: क्लास java.lang.String किसी भी कन्स्ट्रक्टर पर @DataBoundConstructor नहीं है – OlivierTerrien

+0

को ठीक करने का कोई भी विचार मैंने 'EnvInject प्लगइन' के साथ प्रयास किया और यह काम नहीं करता है। – igreen

3

आप

def buildProperties = runWrapper.rawBuild.getEnvironment() 

यह एक ग्रूवी नक्शा है का उपयोग कर मानकों वातावरण चर के साथ एक साथ निर्माण प्राप्त कर सकते हैं। लक्ष्य पैरामीटर

String someProperty = buildProperties.someProperty 

प्रतिबंध के साथ प्राप्त किया जा सकता है: "इन-प्रक्रिया स्क्रिप्ट अनुमोदन" में method hudson.model.Run getEnvironment अनुमति देते हैं और (rawBuild की वजह से) node बंद के अंदर इस कोड को कॉल करने के लिए की जरूरत है।

मैं भी runWrapper.rawBuild.getAction(ParametersAction.class) की कोशिश की है, लेकिन यह Jenkinsfile में कई आयात की आवश्यकता है।

नोट: runWrapper.getBuildVariables() मेरे लिए कुछ भी नहीं देता है।

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