如何在groovy脚本中将变量从远程ssh连接传递到其他阶段

时间:2020-09-03 20:03:31

标签: jenkins groovy jenkins-pipeline

我正在为Jenkins管道编写一个Groovy脚本,并在寻找从远程ssh连接获取变量时如何跨阶段传递变量的过程中苦苦挣扎。 我在此站点上找到了示例1和示例2,我想将它们合并在一起,如下面的“我的尝试”所示。请注意,远程服务器上文件的输出为4。我正在尝试将4传递给a_var。

示例1:效果很好。 SSH连接。这将读取文件并将值输出到Jenkins控制台

def sshCredId = 'myid_cred'
def sshUser = 'myid'
def sshServer = 'myserver'

pipeline {
  agent { label 'docker-maven-slave' }
  stages {
    stage('one') {
      steps {
        script {
          sshagent([sshCredId]){ 
              sh "ssh -o StrictHostKeyChecking=no ${sshUser}@${sshServer} cat /mydir/myfile.csv" 
          } 
        }
      }
    }
    stage('two') {
      steps {
        echo "something" 
      }
    }
    stage('three') {
      steps {
        echo "do stuff"
      }
    }
  }
}

示例2:效果很好。这样会跨阶段传递参数

  pipeline {
        agent {
            label 'docker-maven-slave'
        }
        parameters {
            string(name: 'a_var', defaultValue: '')
        }
        stages {
            stage("one") {
                 steps {
                    script {
                    tmp_param =  sh (script: 'echo something', returnStdout: true).trim()
                    env.a_var = tmp_param
                    }
                  }
            }
            stage("two") {
                steps {
                  echo "${env.a_var}"
                }
            }
        }
  }

**我的尝试:第二阶段的输出为空。我期望是“ 4” **

def sshCredId = 'myid_cred'
def sshUser = 'myid'
def sshServer = 'myserver'

pipeline {
  agent { label 'docker-maven-slave' }
  parameters {
    string(name: 'a_var', defaultValue: 'nothing')
  }
  stages {
    stage('one') {
      steps {
        script {
            tmp_param=sshagent([sshCredId]){ 
              sh "ssh -o StrictHostKeyChecking=no ${sshUser}@${sshServer} cat /mydir/myfile.csv" 
            }
            env.a_var=tmp_param
        }
      }
    }
    stage('two') {
      steps {
        echo "${env.a_var}" 
      }
    }
    stage('three') {
      steps {
        echo "do stuff"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

根据MayJoAnneBeth的评论和反馈更新答案 尝试以下代码段

result.entityType == 'PostalCodeArea'