使用readYaml从声明性文件中的文件返回的对象
我想通过readYaml实用程序在声明性Jenkinsfile中读取yaml文件的内容。我的理解是readYaml应该返回一个映射,但是,我看到返回的对象类型是一个字符串。这违背了将数据放在yaml文件中的初衷 具体来说,我想从helm values.yaml文件中获取一些值,以便在Jenkins文件的全局环境部分中设置env值,以便所有后续阶段都可以使用使用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
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
}
}
}
}
}