क्या जेनकिंस 2 पाइपलाइनों में मैन्युअल अनुमोदन डालने का कोई तरीका है?


19

जेनकिन्स 2 में पाइपलाइनों में प्रथम श्रेणी का नागरिक है। हालाँकि, उदाहरणों में कार्यों को एक अनुक्रम के रूप में निष्पादित किया गया लगता है:

node {
   // Mark the code checkout 'stage'....
   stage 'Checkout'

   // Get some code from a GitHub repository
   git url: 'git@github.com:elifesciences/elife-bot.git'

   // Mark the code build 'stage'....
   stage 'Build'
   echo "Unit tests will run here"

   stage "Production"
   echo "Deploying to production environment"
}

उत्पादन प्रणाली में तैनाती के लिए मैनुअल स्वीकृति की आवश्यकता के लिए यह अक्सर उपयोगी होता है; क्या पाइपलाइन के अंदर प्रेस करने के लिए मैन्युअल बटन डालने का कोई तरीका है?

मैं डॉक्स पर इसे पूरा करने के लिए संभावित कदमों की तलाश कर रहा हूं , कोई फायदा नहीं हुआ।


मैं जेनकिन्स नहीं जानता, लेकिन क्या आपकी बिल्ड योजना को कई चरणों में विभाजित करने का कोई तरीका नहीं है, और इनमें से कुछ चरणों को केवल "मैनुअल ट्रिगर" पर चलाया जाना चाहिए?
तैतक

अब तक का सबसे अच्छा आंशिक समाधान: inputपाइपलाइन में एक कदम जो रुक जाता है और उपयोगकर्ता को इनपुट के लिए पूछता है (या बिल्ड को निरस्त करने के लिए)। हालाँकि, स्टेज और स्टेटस इंडिकेटर चमकता रहता है, जबकि मैं एक स्थिर अवस्था चाहता था (जैसे कि आप शुक्रवार दोपहर में मिलते हैं और सोमवार को तैनात करने का फैसला करते हैं।)
जियोर्जियोसिरोनी

जवाबों:


18

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

node {
    stage('build'){
        echo "building"
    }
}
stage('Deploy approval'){
    input "Deploy to prod?"
}
node {
    stage('deploy to prod'){
        echo "deploying"
    }
}

यह देखते हुए कि कई पाइपलाइनें वहां मिल सकती हैं, उन पुराने लोगों का क्या होता है जो उत्पादन के लिए तैनात नहीं हैं? क्या अधूरे अवस्था में वृद्धों को वहां से रोकने का कोई तरीका नहीं है (पता नहीं कि वे चमकते होंगे)?
१५:०५ पर जियोर्जियोसिरोनी

1
जहां तक ​​मैं बता सकता हूं कि यह हमेशा के लिए फ्लैश करेगा जब तक आप गर्भपात पर क्लिक नहीं करते हैं, जो बहुत भद्दा है। आप शायद इनमें से कुछ को खोने से रोकने के लिए टाइमआउट सेटअप कर सकते हैं। समय समाप्त होने के बाद आप इसे तैनात करने की क्षमता खो देंगे। jenkins.io/doc/pipeline/steps/workflow-basic-steps/…
स्टीव मिस्कविज़

1
मुझे समझ नहीं आया कि किसी एजेंट को नहीं रखने के लिए इनपुट को कॉन्फ़िगर किया जा सकता है । यह इनपुट तरीके को अधिक उपयोगी बनाता है।
djhaskin987 18

एक संस्करण को फिर से तैयार करने, भवन के बिना, या पिछले संस्करण को तैनात करने की संभावना रखना अच्छा होगा।
तेहनीकॉर्ग

1

अंत में मैंने अलग test-projectऔर prod-projectपाइपलाइनों का निर्माण किया, जहां test-projectकोड के अंत में एक approvedशाखा में विलय कर दिया जाता है ।

फिर, prod-projectपाइपलाइन को हर नई प्रतिबद्ध के लिए ट्रिगर न करने के लिए सेट किया जा सकता है ताकि इसे ऑन-डिमांड पर तैनात किया जा सके।


0

इसके अतिरिक्त, आप नीचे की तरह ऑटो-टाइमआउट भी जोड़ सकते हैं

        stage('build') {
        steps {
            sh  """
                # Some commands
                """
            script {
              timeout(time: 10, unit: 'MINUTES') {
                input(id: "Deploy Gate", message: "Deploy ${params.project_name}?", ok: 'Deploy')
              }
            }
        }
    }

    stage('deploy') {
        when {
            branch 'master'
        }
        steps {
            sh  """
                # some commands
                """
        }
    }

यदि आप इसे देखते हैं तो आप जेनकिंस तक पहुँचने वाले उपयोगकर्ताओं के क्रेडेंशियल्स के लिए जेनकिंस इनपुट को भी बाँध सकते हैं यदि आप केवल विशिष्ट व्यक्तियों को जवाब देने में सक्षम होने की अनुमति देना चाहते हैं - यह इस तथ्य से भी कम है कि आपका गिट नियंत्रण भी पर्याप्त है।


0

यह सिर्फ एक सरल उदाहरण है, लेकिन आप इसे तब भी ट्रिगर कर सकते हैं जब आपको जरूरत हो।

stage{
    script{
        input "Continue?"
        ...enter code here
        ...
    }
}

0

मैंने नीचे दिए गए तरीके से इस डॉक्स https://jenkins.io/doc/book/pipeline/sitt// को पढ़कर दिखाया है

pipeline {
environment {
    BRANCH_NAME = "${env.BRANCH_NAME}"
}
agent any
stages{
    stage('Build-Initiator-Info'){
            steps{
                sh 'echo "Send Info"'
            }
    }
    stage('Build') {
        steps{
             catchError {
                sh 'echo "This is build"'
            }
         }
         post {
            success {
                echo 'Compile Stage Successful . . .'
            }
            failure {
                echo 'Compile stage failed'
                error('Stopping early…')

             }
    }
   }
  stage ('Deploy To Prod'){
  input{
    message "Do you want to proceed for production deployment?"
  }
    steps {
                sh 'echo "Deploy into Prod"'

              }
        }
  }
   }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.