2016-07-01 9 views
14

यहाँ मेरी जेनकींस 2.x पाइप लाइन है:मैं जेनकिन्स 2.0 को चेकआउट के समान निर्देशिका में एक sh कमांड कैसे निष्पादित करूं?

node ('master'){ 
    stage 'Checkout' 
    checkout scm 
    stage "Build Pex" 
    sh('build.sh') 
} 

जब मैं इस पाइपलाइन चेकआउट कार्यक्षेत्र अपेक्षा के अनुरूप करने के लिए में कोड डालता है चलाने के लिए, लेकिन के बजाय (कार्यक्षेत्र/में स्क्रिप्ट ढूँढने में यह वास्तव में वहाँ की उम्मीद!), यह एक असंबंधित निर्देशिका में दिखता है: वर्कस्पेस @ tmp/durable-d812f509।

Entering stage Build Pex 
Proceeding 
[Pipeline] sh 
[workspace] Running shell script 
+ build.sh 
/home/conmonsysdev/deployments/jenkins_ci_2016_interns/jenkins_home/jobs/pex/branches/master/[email protected]/durable-d812f509/script.sh: line 2: build.sh: command not found 

मैं इस Jenkinsfile ताकि build.sh ठीक उसी निर्देशिका में क्रियान्वित किया जाता है, जहां के रूप में मैं इस परियोजना स्रोत कोड की जाँच की संशोधित करूँ?

+0

वास्तव में अपनी पूरी पाइपलाइन कौन है? या आपके पास एकाधिक 'नोड' ब्लॉक हैं? – StephenKing

+1

अभी के लिए, यह सब कुछ है। यह छोटी पाइपलाइन है जो बग का प्रदर्शन करती है। –

उत्तर

19

आप dir ब्लॉक में अपने कार्यों संलग्न कर सकते हैं।

checkout scm 
stage "Build Pex" 
dir ('your new directory') { 
    sh('build.sh') 
} 
... 

your new directory स्थान धारक आपकी वास्तविक निर्देशिका है। डिफ़ॉल्ट रूप से यह वर्कस्पेस का एक सापेक्ष पथ है। यदि आप सुनिश्चित हैं कि यह एजेंट पर मौजूद है, तो आप पूर्ण पथ को परिभाषित कर सकते हैं।

+0

'आपकी नई निर्देशिका' के लिए क्या खड़ा है? क्या यह प्लेसहोल्डर है? –

+1

मेरे लिए काम न करें :-(मुझे शेलस्क्रिप्ट कहां रखना है? अभी यह मेरे गिट रेपो की मूल निर्देशिका में है। मैंने इसे एक उपनिर्देशिका 'बिल्डस्क्रिप्ट' में स्थानांतरित करने की कोशिश की और फिर 'dir (' buildscripts 'का उपयोग करें ') {} 'लेकिन कोई भाग्य –

+0

@ बस्टियन वोगेट: आपको एक नया प्रश्न – Jayan

1

मैं एक ही मुद्दा हो रहा है और dir मदद नहीं कर रहा है, शायद क्योंकि मैं tmp निर्देशिका ही (कारण के लिए यहाँ मुनासिब नहीं) की उप-निर्देशिका के अंदर काम कर रहा हूँ। मेरे कोड लगता है कि यह

dir(srcDir){ 
    sh 'pwd; la -l; jenkins.sh "build.sh"' 
} 

उनके साथ मैं उत्पादन की तरह मिलता है (pwd और la -l बयान सिर्फ डिबगिंग के लिए जोड़ा गया था जारी करना मौजूद है/उन्हें ओ डब्ल्यू।।): इस

+ pwd 
/jenkins/workspace/[email protected]/repos/2 
+ ls -l 
total 72 
-rw-r--r-- 1 jenkins jenkins 394 May 19 12:20 README.md 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 api-automation 
-rwxr-xr-x 1 jenkins jenkins 174 May 19 12:20 build-it.sh 
-rwxr-xr-x 1 jenkins jenkins 433 May 19 12:20 build-release.sh 
-rwxr-xr-x 1 jenkins jenkins 322 May 19 12:20 build.sh 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-core 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-java-client 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-rest-models 
drwxr-xr-x 4 jenkins jenkins 4096 May 19 12:20 ix-service 
drwxr-xr-x 7 jenkins jenkins 4096 May 19 12:20 ixternal 
drwxr-xr-x 5 jenkins jenkins 4096 May 19 12:20 ixtraneous-stuff 
-rwxr-xr-x 1 jenkins jenkins 472 May 19 12:20 jenkins.sh 
-rw-r--r-- 1 jenkins jenkins 16847 May 19 12:20 pom.xml 
+ jenkins.sh build.sh 
/home/jenkins/workspace/[email protected]/repos/[email protected]/durable-a3ec0501/script.sh: line 2: jenkins.sh: command not found 

मैं अंत में किया था :

dir(srcDir){ 
    sh 'cdr=$(pwd); $cdr/jenkins.sh "build.sh"' 
} 
6

आपकी स्क्रिप्ट काम नहीं करने का कारण यह है कि "build.sh" आपके पथ में नहीं है।

Jenkinsfile एक "श" स्क्रिप्ट, जिसका संपूर्ण सामग्री स्ट्रिंग build.sh है चल रहा है। माता पिता स्क्रिप्ट "@tmp" निर्देशिका में है और हमेशा नहीं होगा - "@tmp" निर्देशिका जहां जेनकींस, Jenkinsfile रहता है अनिवार्य रूप से, एक रन के दौरान होता है।

समस्या को ठीक करने के लिए, sh "./build.sh" या sh "bash build.sh" करने के लिए अपने लाइन बदलने के लिए, ताकि Jenkinsfile में sh ब्लॉक सही ढंग से build.sh स्क्रिप्ट है कि आप पर अमल करना चाहते हैं कर सकते हैं।

0

जेनकींस जब यह इस तरह अपनी परियोजना से एक क्लोन बनाने के एक फ़ोल्डर बनाने: काम करने के लिए आप सेट करना होगा

/var/lib/जेनकींस/कार्यक्षेत्र/नौकरी नाम @script

इसके लिए फ़ाइल को निष्पादन योग्य के रूप में यदि आप एक लिनक्स वातावरण में हैं और फिर खोल स्क्रिप्ट को कॉल करें।

कुछ इस तरह:

// Permission to execute 
sh "chmod +x -R ${env.WORKSPACE}/../${env.JOB_NAME}@script" 

// Call SH 
sh "${env.WORKSPACE}/../${env.JOB_NAME}@script/script.sh" 
संबंधित मुद्दे