使用readYaml从声明性文件中的文件返回的对象

使用readYaml从声明性文件中的文件返回的对象,yaml,kubernetes-helm,jenkins-groovy,Yaml,Kubernetes Helm,Jenkins Groovy,我想通过readYaml实用程序在声明性Jenkinsfile中读取yaml文件的内容。我的理解是readYaml应该返回一个映射,但是,我看到返回的对象类型是一个字符串。这违背了将数据放在yaml文件中的初衷 具体来说,我想从helm values.yaml文件中获取一些值,以便在Jenkins文件的全局环境部分中设置env值,以便所有后续阶段都可以使用 println valuesYaml.getClass()返回java.lang.String,我认为这是不正确的,因为这个对象来自嵌套的y

我想通过readYaml实用程序在声明性Jenkinsfile中读取yaml文件的内容。我的理解是readYaml应该返回一个映射,但是,我看到返回的对象类型是一个字符串。这违背了将数据放在yaml文件中的初衷

具体来说,我想从helm values.yaml文件中获取一些值,以便在Jenkins文件的全局环境部分中设置env值,以便所有后续阶段都可以使用

println valuesYaml.getClass()
返回java.lang.String,我认为这是不正确的,因为这个对象来自嵌套的yaml文件,所以我认为返回的对象应该是一个映射

当以下echo语句运行时,
echo valuesYaml.appName.toString()
会出错,并出现以下错误:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:未找到此类字段:字段java.lang.String appName

这是values.yaml的一个片段,我正在阅读:

replicaCount: 1
appName: test

您正在
environment
块内设置
valuesYaml
变量,使其成为字符串。将变量声明移动到
script
块,在后续阶段可以访问该变量

def loadValuesYaml(){
  def valuesYaml = readYaml (file: './chart/values.yaml')
  return valuesYaml;
}

pipeline {
  agent {
    label "jenkins-maven"
  }
  stages {
    stage('CICD Initialize') {
      steps {
        script{
          valuesYaml = loadValuesYaml()
          println valuesYaml.getClass()
        }
      }
    }
    stage('Deploy') {
      steps {
        echo valuesYaml.appName
      }
    }
  }
}
或者,如果要在
环境
块中声明它们,可以重写
loadValuesYaml
函数以返回特定字符串,但是,这将多次调用
readYaml

def loadValuesYaml(x){
  def valuesYaml = readYaml (file: './chart/values.yaml')
  return valuesYaml[x];
}

pipeline {
  agent {
    label "jenkins-maven"
  }
  environment {
    APP=loadValuesYaml('appName')
    REPLICACOUNT=loadValuesYaml('replicaCount')
  }
  stages {
    stage('CICD Initialize') {
      steps {
        script{
          println APP
          println REPLICACOUNT
        }
      }
    }
  }
}

伟大的现在,如何解析template.yaml的“parameters”部分中的值。我正在尝试使用valueYaml.parameters[“parameter name”],但由于出现RejectedAccessException而失败。
def loadValuesYaml(x){
  def valuesYaml = readYaml (file: './chart/values.yaml')
  return valuesYaml[x];
}

pipeline {
  agent {
    label "jenkins-maven"
  }
  environment {
    APP=loadValuesYaml('appName')
    REPLICACOUNT=loadValuesYaml('replicaCount')
  }
  stages {
    stage('CICD Initialize') {
      steps {
        script{
          println APP
          println REPLICACOUNT
        }
      }
    }
  }
}