जेनकिंस घोषणात्मक पाइपलाइन में आर्टिफैक्टिक प्लगइन का उपयोग करना


13

मैं अपनी निर्माण प्रक्रिया को स्वचालित करने के लिए जेनकिंस की घोषणात्मक पाइपलाइन का उपयोग कर रहा हूं। हम अपनी कलाकृतियों को एक दूरस्थ JFrog रिपॉजिटरी में प्रकाशित करना चाहते हैं यदि केवल कुछ शर्तें (सोनार, चेकमारक्स) पास हो।

थोड़ा शोध के बाद, मैंने पाया कि आर्टिफैक्टल प्लगइन इसके लिए उपयोगी है। लेकिन मैं घोषणात्मक पाइपलाइन में एकीकृत करने के तरीके पर कोई दस्तावेज नहीं पा रहा हूं। नीचे जेनकिंसफाइल से कोड स्निपेट है

stages{

    stage('Pre-Build'){
        steps{

             script{
                def server = Artifactory.server 'LocalJfrog'
                def rtGradle = Artifactory.newGradleBuild()
                rtGradle.resolver server: server, repo: 'gradle-dev-local'
                rtGradle.deployer server: server, repo: 'gradle-release-local'
                rtGradle.useWrapper = true
            }

        }   
    }
}

उपरोक्त कोड के साथ सशर्त प्रकाशन संभव नहीं है क्योंकि मैं ऑटो प्रकाशन को अक्षम करने पर भी सर्वर चर का पुन: उपयोग नहीं कर सकता ।

जवाबों:


3

जब आप किसी स्टेज के अंदर -ब्लॉक का उपयोग करके अपने घोषणात्मक पाइपलाइन में सशर्त हो सकते हैं । "पर्यावरण इंजेक्टर" नामक एक प्लगइन है जो आपको पाइपलाइन-स्क्रिप्ट के बाहर चर सेट करने देता है जो अच्छा है। इसके अलावा, यदि आप अन्य चरणों के नीचे कदम रखते हैं, तो वे विफल होने पर निष्पादित नहीं करेंगे।

 when {
    environment name: 'pushArtifact', value: 'true'
  }
  steps{
     //push artifact  
  }

संकेत के लिए धन्यवाद। अगर मुझे यह समझ में आया कि शर्तों को पूरा करने के बाद एक वेरिएबल सेट करना है और फिर प्री-बिल्ड स्टेप में उस वैरिएबल की जाँच करें
धरणीधर

2

मुझे लगता है कि आपकी समस्या पूर्व-निर्मित चरण ब्लॉक के बाहर पुन: प्रयोज्य नहीं होने वाले सर्वर चर में निहित है ।

जेनकिंस घोषणात्मक में, आप script { ... }ब्लॉक का उपयोग करते हुए वैरिएबल को परिभाषित कर सकते हैं , लेकिन एक बार जब आप मंच छोड़ देते हैं तो वे वैरिएबल अन्य से चरणों के लिए दुर्गम होते हैं।

पिछले सुझावों के साथ, मैं इसकी सलाह दूंगा:

एक साझा पुस्तकालय के लिए आर्टिफैक्ट तैनाती कोड को हाउस करें।

gradle_artifactory.groovy

    def कॉल (मानचित्र पैरामीटर = [:]) {// वैकल्पिक पैरामीटर मैपिंग

        def सर्वर = Artifactory.server 'LocalJfrog'
        def rtGradle = Artifactory.newGradleBuild ()
        rtGradle.resolver सर्वर: सर्वर, रेपो: 'gradle-dev-local'
        rtGradle.deployer सर्वर: सर्वर, रेपो: 'ग्रेडल-रिलीज़-लोकल'
        rtGradle.useWrapper = true
        def buildInfo = rtGradle.run rootDir: "projectDir /", buildFile: 
            'build.gradle', कार्य: 'आर्टिफिशल अप्रूवल'

    }

फिर अपनी घोषणात्मक पाइपलाइनों को रखने के लिए D.R.Y

@Library('my-shared-lib') 
...
stage('Artifactory Upload') {
    when { <some expression with sonarqube/checkmarx> }
    steps {
        script {
            gradle_artifactory()
        }
    }
}

refs:

https://jenkins.io/doc/book/pipeline/syntax/#when

https://jenkins.io/doc/book/pipeline/shared-libraries/


1

यदि आप जेनकिंसफाइल में तर्क को एम्बेड करना चाहते हैं, तो घोषणात्मक वाक्यविन्यास सबसे अच्छा तरीका नहीं हो सकता है क्योंकि कोड में इसे प्रतिबिंबित करना हमेशा आसान नहीं होता है।

यदि आप जेनकिंसफाइल स्क्रिप्टेड पाइपलाइन पर स्विच करते हैं, तो आप शर्तों को आसान तरीके से परिभाषित और उपयोग कर पाएंगे।


1
उत्तर के लिए धन्यवाद। मैं स्क्रिप्टेड पाइपलाइन के बारे में जानता हूं लेकिन चूंकि, यह किसी भी परियोजना के लिए एक बुनियादी आवश्यकता है, इसलिए इसे घोषणात्मक पाइपलाइन में शामिल किया जाएगा। स्क्रिप्टेड या बाहरी ग्रूवी स्क्रिप्ट पर वापस
जाएँगे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.