如何正确设置和获取变量的路径

108次阅读
没有评论

问题描述

在使用Jenkins通过SSH部署文件的脚本时,遇到了一个问题。他想要在脚本中设置一个变量的路径,但是Jenkins在执行脚本时返回了错误信息。他想知道如何正确设置和获取变量的路径。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在你的脚本中,你使用了withEnv来设置环境变量的路径。然而,withEnv并不会持久化环境变量。相反,你需要通过传递一个代码块给withEnv来告诉它在哪些步骤中使用该环境变量。以下是你的代码应该如何修改:

node('superhost01') {
  String HOSTNAME="host01"
  String USERNAME="tech_user"
  withEnv(['PATH=/data/jdbc_connector']) {
    stage('Prepare') {
      checkout scm
    }
    stage('Deploy') {
      sh """
      scp -r config.yaml ${USERNAME}@${HOSTNAME}:$PATH
      """
    }
  }
}

在上面的示例中,我们将withEnv包装在一个代码块中,并在代码块中定义了需要使用该环境变量的步骤。这样,环境变量的路径将在PrepareDeploy阶段中生效。
另外,我怀疑你实际上想要将PATH设置为/data/jdbc_connector:$PATH,否则你的checkout步骤将无法找到git,而deploy步骤将无法找到scp。

方案2

如果你想要在整个流水线中使用环境变量,你可以使用environment关键字来设置全局环境变量。
另一种方法是使用environment关键字来设置全局环境变量。以下是一个示例:

pipeline {
  agent any
  environment {
    PATH = '/data/jdbc_connector'
  }
  stages {
    stage('Prepare') {
      steps {
        checkout scm
      }
    }
    stage('Deploy') {
      steps {
        sh 'scp -r config.yaml ${USERNAME}@${HOSTNAME}:$PATH'
      }
    }
  }
}

在上面的示例中,我们使用environment关键字在整个流水线中设置了PATH环境变量。这样,你就可以在整个流水线中使用$PATH来引用该环境变量的路径。
请注意,这两种方案都可以实现你的需求,具体选择哪种方案取决于你的实际情况和偏好。

正文完