是否可以将变量从Jenkins管道作业脚本传播到加载的Jenkins文件脚本?

是否可以将变量从Jenkins管道作业脚本传播到加载的Jenkins文件脚本?,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我想知道是否有可能将jenkins管道作业中的变量define传递给加载的脚本,如。 加载的脚本 管道作业 node { // Some declaration and code stage('Prepare deploy') { // Create a talbe for the servers lists def servers = [:] // For each server know, if deployment i

我想知道是否有可能将jenkins管道作业中的变量define传递给加载的脚本,如。 加载的脚本

管道作业

node {

     // Some declaration and code

    stage('Prepare deploy') {
        // Create a talbe for the servers lists
        def servers = [:]

        // For each server know, if deployment is enabled
        // deploy resources
        params.each { srv, value ->
        if ("$value" == "true"){
            // add the current current to the enabled servers
            servers["Server ${srv}"] = {

                // Define specific variable
                String SERVER=props."SRV_${srv}"
                String CONF=env.DEPLOY_HOME + "/${srv}"

               // Install server - the SERVER and CONF variable need to be propagate to the others scripts
               load env.JENKINSFILES_DIRECTORY + "/server-configuration"
               load env.JENKINSFILES_DIRECTORY + "/server-deploiement"
               load env.JENKINSFILES_DIRECTORY + "/server-postconfig"
               load env.JENKINSFILES_DIRECTORY + "/server-start"
            }
        }
    }
    parallel servers
    }

}

服务器配置文件

#!/usr/bin/env groovy​
node{
     // Some declaration
     stage('configure serveur'){
          // The variable SERVER and CONF must be visible here
          // is it possible ?
          sh "ssh -X " + env.USER +"@${SERVER} 'sh echo \"${CONF}\"'"
     }
}

谢谢,您正在寻找的是withEnv

node {

 // Some declaration and code

stage('Prepare deploy') {
    // Create a talbe for the servers lists
    def servers = [:]

    // For each server know, if deployment is enabled
    // deploy resources
    params.each { srv, value ->
    if ("$value" == "true"){
        // add the current current to the enabled servers
        servers["Server ${srv}"] = {

           // Install server - the SERVER and CONF variable need to be propagate to the others scripts
withEnv(["SERVER=props.SRV_${srv}","CONF=env.DEPLOY_HOME + ${srv}"]){
           load env.JENKINSFILES_DIRECTORY + "/server-configuration"
           load env.JENKINSFILES_DIRECTORY + "/server-deploiement"
           load env.JENKINSFILES_DIRECTORY + "/server-postconfig"
           load env.JENKINSFILES_DIRECTORY + "/server-start"
        }
}
    }
}
parallel servers
}
}
服务器配置

#!/usr/bin/env groovy​
node{
 // Some declaration
 stage('configure serveur'){
      // The variable SERVER and CONF must be visible here
      // is it possible ?
      sh "ssh -X " + env.USER +"@${env.SERVER} 'sh echo \"${env.CONF}\"'"
 }
}

非常感谢你。我试过使用env,效果很好。我正要写一篇评论,这时我看到了你的答案。我在你的脚本上得到了另一个提示:因为加载的脚本有自己的节点块,所以不应该在节点块内进行并行调用,因为这只会无缘无故地阻塞一个节点。如果运行时间只有几秒钟,这不会有什么影响。但是,如果节点不足,您可以阻止一个节点,直到另一个节点空闲。。。只是说:)哼。。。谢谢如果我能理解你说的话,我还是那样做好吗?def服务器。。。。节点{}。。。。parralel服务器?(parralel调用在节点内?)或者我在加载的脚本中抑制节点块?这将取决于您的需要。如果您能够重用该节点,我更愿意这样做,因为对于大型Jenkins实例,打开新节点块可能需要几分钟的时间。谢谢您的回答。我做了一些尝试。因此,出于我的需要,最好删除服务器配置文件中的节点块。谢谢