gpt4 book ai didi

yaml - 使用 readYaml 从声明式 Jenkinsfile 中的文件返回的对象

转载 作者:行者123 更新时间:2023-12-05 01:14:58 30 4
gpt4 key购买 nike

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

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

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

https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readyaml-read-yaml-from-files-in-the-workspace-or-text

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

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException:找不到这样的字段:字段 java.lang.String appName

这是我正在尝试阅读的 values.yaml 的片段:

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

pipeline {
agent {
label "jenkins-maven"
}

environment {
valuesYaml = loadValuesYaml()
}
stages {
stage('CICD Initialize') {
steps {
script{
echo valuesYaml
println valuesYaml.getClass()
}
echo valuesYaml.appName.toString()
}
}
}

最佳答案

您正在 environment block 中设置您的 valuesYaml 变量,使其成为 string。将您的变量声明移动到 script block ,该变量将在后续阶段可访问。

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
}
}
}
}

或者,如果你想在 environment block 中声明它们,你可以重写你的 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
}
}
}
}
}

关于yaml - 使用 readYaml 从声明式 Jenkinsfile 中的文件返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57261787/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com