मैं एक पाइपलाइन जेनकींस नौकरी लिखने की कोशिश कर रहा हूं जो एक विशिष्ट निर्देशिका के सबफ़ोल्डर के माध्यम से लूप करता है और कुछ लॉन्च करता है। समस्या फाइल सिस्टम तक पहुंचने की है। किसी कारण से यह फाइल सिस्टम को बिल्कुल भी नहीं पढ़ता है, न ही इसका अपना कार्यक्षेत्र।

यह वह स्निपेट है जिसका मैं उपयोग कर रहा हूं

node ('label') {
    workspacePath = '/opt/installersWS'
    ws(workspacePath){
        stage ("test"){
            ...some stuff...
            runtimeBuildDir = new File(workspacePath + "/components")
            echo runtimeBuildDir.getPath()
            if (runtimeBuildDir.exists()){
                echo "search for subfolders"
            } else {
                echo "main folder not existing"
            }

        }
    }
}

बेशक फोल्डर सर्वर पर मौजूद है लेकिन रन हमेशा दूसरी इको के साथ वापस आता है।

अद्यतन करें: मुझे पता चलता है कि इस तरह से दिए गए सभी ग्रेडेल/जावा निर्देश नोड को लक्षित नहीं कर रहे हैं बल्कि मास्टर पर चल रहे हैं। यही कारण है कि मुझे निर्देशिका नहीं मिली। इसलिए मैं पूरी तरह से गलत समझ रहा था कि पाइपलाइन कैसे काम कर रही है।

कहा कि .. मैं इसे कैसे प्राप्त कर सकता हूं इस पर कोई विचार? उदाहरण के लिए शेल चरण से एक ग्रेडल प्रॉपर्टी सेट करने का कोई तरीका है?

धन्यवाद, मिशेल

3
Mikyjpeg 12 जिंदा 2017, 21:28

2 जवाब

सबसे बढ़िया उत्तर

नीचे मेरी समस्या हल हो गई। यह किसी ऐसे व्यक्ति की मदद कर सकता है जो इसे ढूंढ रहा है। उप फ़ोल्डरों को फ़ंक्शन का उपयोग करके सूची में जोड़ा जा सकता है जो नीचे की तरह पाइपलाइन में निर्देशिका की सूची देता है।

@NonCPS
def readDir()
{
    def  dirsl = [] 
    new File("${workspace}").eachDir()
    {
        dirs -> println dirs.getName() 
        if (!dirs.getName().startsWith('.')) {
            dirsl.add(dirs.getName())
        }
    }
    dirsl
}

फिर अपनी पाइपलाइन स्क्रिप्ट में, नीचे दिए गए फ़ंक्शन को कॉल करें और जो भी आवश्यक हो वह करें।

stage ('Build'){

    dirsl = readDir()
    def size = dirsl.size()
    print size
    for ( int i = 0; i < size; i++) {
        "Do whatever appropriate"
    }
}
3
Xpleria 6 फरवरी 2018, 15:42
1
यह केवल तभी काम करेगा जब आप इसे जेनकिंस मास्टर (बिल्ड एजेंट के रूप में) पर चला रहे हों - या क्या मुझे कुछ याद आ रहा है?
 – 
Joerg S
12 जुलाई 2019, 11:04

इस तरह मैंने इसे हल किया, एक शेल चला रहा था जो आउटपुट लौटाता था

def subfolders = sh(returnStdout: true, script: 'ls -d RuntimeBuild/*').trim().split(System.getProperty("line.separator"))

तब मैं निर्देशिकाओं के नाम के साथ सूची को चक्रित करने और उनमें हेरफेर करने में सक्षम था।

विंडोज़ के लिए जो बन सकता है:

def subfolders = bat(script: '@dir /B RuntimeBuild', returnStdout: true).split(/\n\r/)
4
Joerg S 12 जुलाई 2019, 12:18