मैं एक जेनकींस पाइपलाइन स्थापित करने की कोशिश कर रहा हूं जहां मैं एक शेल स्क्रिप्ट के साथ "संबंधित" सर्वर नाम प्राप्त करता हूं और इसे एक चर ($ सर्वर) में संग्रहीत करता हूं, फिर मैं उस सर्वर पर लॉगिन करने के लिए अगले चरण में उस चर का उपयोग करना चाहता हूं और एक स्क्रिप्ट को दूरस्थ रूप से निष्पादित करें। मैं निम्नलिखित के साथ आया लेकिन यह पता नहीं लगा सकता कि सर्वर नाम को पहले और दूसरे फ़ंक्शन के बीच कैसे पास किया जाए:

  1 def SERVER
  2 
  3 def fetch_server() {
  4   sh """#!/bin/bash
  5     SERVER = ${env.LOCAL_SCRIPT_PATH}/getServer.sh ${params.HOSTNAME} ${TOKEN}
  6   """
  7 }
  8 def provisioning() {
  9   sh """#!/bin/bash
 10     ssh -o StrictHostKeyChecking=no username@$SERVER 'bash -s' ${env.REMOTE_SCRIPT_PATH}/script.py
 11   """
 12 }
 13 
 14 pipeline {
 15   agent {
 16     label 'slave1'
 17   } // end agent
 18   environment {
 19     REMOTE_SCRIPT_PATH = '/usr/local/bin/scripts'
 20     LOCAL_SCRIPT_PATH  = './jobs/scripts'
 21   }
 22   parameters {
 23     string(
 24       name: 'HOSTNAME',
 25       defaultValue: '---',
 26       description: 'Enter the hostname of server'
 27     ) // end HOSTNAME parameter
 28   } // end parameters
 29   stages {
 30     stage('Stage 1') {
 31       steps {
 32         withCredentials([string(credentialsId: 'some_cred', variable: 'TOKEN')]) {
 33           fetch_server()
 34         } 
 35       } // end steps
 36     } // end Stage 1 
 37     stage('Stage 2') {
 38       steps {
 39         sshagent(credentials : ['username']) {
 40            provisioning()
 41         } // end ssh credentials
 42       } // end steps 
 43     } // end Stage 2
 44   } // end stages
 45   post {
 46     always {
 47       cleanWs()
 48     } // end always
 49   } // end post step
 50 } // end pipeline
~                                             

क्या यह भी संभव है कि मैं यहां क्या करने की कोशिश कर रहा हूं?

-1
Lunacy 19 अप्रैल 2020, 15:58

1 उत्तर

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

शेल स्क्रिप्ट में असाइन किए गए पर्यावरण चर शेल सत्र के बाहर नहीं रहते हैं। आपको sh चरण से स्टडआउट प्राप्त करना होगा और इसे इस तरह एक ग्रोवी वैरिएबल में असाइन करना होगा:

@groovy.transform.Field String SERVER = null

def fetch_server() {
  SERVER = sh( returnStdout: true, 
               script: "${env.LOCAL_SCRIPT_PATH}/getServer.sh ${params.HOSTNAME} ${TOKEN}" ).trim()
}

उपयोग @groovy.transform.Field एनोटेशन पर ध्यान दें, जो चर को कार्यों से सुलभ बनाने के लिए आवश्यक है (अन्यथा यह वास्तव में स्क्रिप्ट क्लास)।

1
zett42 19 अप्रैल 2020, 14:04