Jenkins管道在处理json文件时出错



我是Jenkins管道的新手,正在编写groovy脚本来解析json文件。然而,我面临着一个许多人都面临过的错误,但没有一个解决方案对我有效。以下是我的Jenkinsfile和错误信息。

def envname = readJSON file: '${env.WORKSPACE}/manifest.json'
pipeline {
agent any
stages { 
stage('Build') {
steps {
echo WORKSPACE
sh "ls -a ${WORKSPACE}"
} 
}
}
}

[Pipeline]管道启动(管道)readJSON[管道]管道结束org.jenkinsci.plugins.workflow.steps.MissingContextVariableException:必需的上下文类hudson。FilePath丢失了,也许您忘记了用提供此功能的步骤包围代码,例如:node atorg.jenkinsci.plugins.pipeline.utility.steps.AbstractFileOrTextStepExecution.run (AbstractFileOrTextStepExecution.java: 30)

我甚至尝试了readJSON file: '${WORKSPACE}/manifest.json,但那也不起作用。我确定错误是在第一行,因为当删除这一行时,执行是成功的。文档很有帮助,但我无法追踪到我到底在哪里出错,这就是为什么在这里张贴。

更新:

我尝试了以下方法def envname = readJSON file: "./manifest.json"def envname = readJSON file: "${env.WORKSPACE}/manifest.json",甚至尝试在steps块下定义它们。毫无效果。下面是我在步骤块

下定义它们时收到的错误消息

WorkflowScript: 5:期望一个步骤@第7行,第13列defenvname =^

下面是readJson的官方语法文档,我可以看到我只使用了正确的语法。但仍然没有达到预期效果。https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/readjson-read-json-from-files-in-the-workspace

'${env.WORKSPACE}/manifest.json'将Groovyenv映射插入为shell变量。您需要将其插入为Groovy变量,如"${env.WORKSPACE}/manifest.json"

sh "ls -a ${WORKSPACE}"将shell环境变量WORKSPACE插入为Groovy变量。您需要将其插入为shell变量,如sh 'ls -a ${WORKSPACE}'

echo WORKSPACE试图将shell变量WORKSPACE解析为第一类Groovy变量表达式。您需要像使用echo env.WORKSPACE一样使用Groovy的env映射。

对于第一行的全局变量indefinite类型赋值:如果在进行了这些修复后仍然抛出上述错误,则可能是由于在声明性语法管道中无效地使用了脚本语法。在这种情况下,您可能需要将其放置在管道中的step块中。

在Matt schuchard的帮助下,我自己解决了这个问题。我不确定这是否是解决问题的唯一方法,但这对我来说很有效。

pipeline {
agent any
stages { 
stage('Json-Build') {
steps {
script {
def envname = readJSON file: "${env.WORKSPACE}/manifest.json"
element1 = "${envname.dev}"
echo element1
}
} 
}
}
}

最新更新